STM32 从 I2S DMA 读取麦克风值(MP34DT05-A)
STM32 Read mic value (MP34DT05-A) from I2S DMA
我想从 STM32F107 板上读取 MEMS 麦克风 (MP34DT05-A) 值(ASCII 格式)。我正在使用 I2S 与麦克风通信。
我做了什么:
- 我尝试使用
HAL_I2S_Receive_DMA(&hi2s3, i2sbuffer, 100);
进行简单读取,其中 uint16_t i2sbuffer[256];
结果是随机字符 (E⸮h2FI⸮g⸮⸮F⸮⸮⸮
)。
- 我正在使用来自
pdm2pcm_glo.h
(STM32_Audio\Addons\PDM library
) 的 PDM_Filter
:
HAL_I2S_Receive_DMA(&hi2s3, pdm_buff, 16);
PDM_Filter(&cbuff[0], &pcm_buff[0], &PDM1_filter_handler);
结果仍然是随机字符 (d⸮⸮l⸮巳⸮N#⸮&6⸮4q٣⸮#⸮d⸮ɻ&⸮}⸮
)。
我需要对数据进行转换吗?还是我做错了什么?
PDM 麦克风不输出 ASCII!
PDM 麦克风输出一个 1 位值序列。
函数PDM_Filter将其转换为PCM,这是一个16位值的序列,仍然是二进制。
要将 16 位序列打印为文本,您需要执行如下操作:
printf("%hi,", pcm_buff[0]);
printf("%hi,", pcm_buff[1]);
...
但显然你可以使用循环。
我想从 STM32F107 板上读取 MEMS 麦克风 (MP34DT05-A) 值(ASCII 格式)。我正在使用 I2S 与麦克风通信。
我做了什么:
- 我尝试使用
HAL_I2S_Receive_DMA(&hi2s3, i2sbuffer, 100);
进行简单读取,其中uint16_t i2sbuffer[256];
结果是随机字符 (E⸮h2FI⸮g⸮⸮F⸮⸮⸮
)。 - 我正在使用来自
pdm2pcm_glo.h
(STM32_Audio\Addons\PDM library
) 的PDM_Filter
:
HAL_I2S_Receive_DMA(&hi2s3, pdm_buff, 16);
PDM_Filter(&cbuff[0], &pcm_buff[0], &PDM1_filter_handler);
结果仍然是随机字符 (d⸮⸮l⸮巳⸮N#⸮&6⸮4q٣⸮#⸮d⸮ɻ&⸮}⸮
)。
我需要对数据进行转换吗?还是我做错了什么?
PDM 麦克风不输出 ASCII!
PDM 麦克风输出一个 1 位值序列。
函数PDM_Filter将其转换为PCM,这是一个16位值的序列,仍然是二进制。
要将 16 位序列打印为文本,您需要执行如下操作:
printf("%hi,", pcm_buff[0]);
printf("%hi,", pcm_buff[1]);
...
但显然你可以使用循环。