STM32
直播中

钱一辰

7年用户 926经验值
私信 关注
[问答]

用CUBEMAX生成SAI的PDM接口连接麦克风,怎么接收数据?

参考的是手册AN5027_如何将PDM数字麦克风连接到STM32单片机的4.3章节"使用SAI的PDM接口,连接立体声模式下的数字麦克风"。放在附录了。

用CUBEMAX设置SAI的PDM(脉冲密度调制)接口连接硅麦(SPH0641LM4H),其中硅麦只要连接一个时钟输入SPH_CLOCK引脚和一个数据输出SPH_DATA引脚。我给硅麦一个3.2MHZ的时钟信号,但是并没能接受到硅麦的PDM信号。


CUBEMAX的SAI接口的基本设置如下所示:


主要的调试代码如下,但是在屏幕只能显示 0 。代表并没能接受到任何硅麦的信号。


我不知道是我写的调试代码有问题还是什么。是不是不能直接用HAL_SAI_Receive函数去拿到数据。
希望懂硅麦开发的大佬帮我指点一二,不胜感激!!


回帖(2)

李骏鹏

2024-4-11 10:02:52
建议你先检查硬件连接,可以参考一些官方的评估板接线。熟悉STM32和麦克风原理后在按照这个应用笔记上的一步步示例配置。
举报

hxjq

2024-4-11 16:37:27
在CUBEMAX中设置SAI的PDM接口连接麦克风,并接收数据的步骤如下:

1. 根据手册AN5027的4.3章节中的说明,连接硅麦到STM32单片机的SAI接口的PDM接口引脚(SPH_CLOCK和SPH_DATA)。确保引脚连接正确,时钟信号连接到SPH_CLOCK引脚,PDM数据输出连接到SPH_DATA引脚。

2. 在CUBEMAX中配置SAI接口的PDM模式:
   - 打开CUBEMAX,选择对应的STM32单片机型号。
   - 打开SAI外设配置窗口,选择PDM接口模式。
   - 配置SAI的时钟源和时钟频率,选择与硅麦时钟信号频率相匹配的时钟源和频率。在这个例子中,使用3.2MHZ的时钟信号,所以选择对应的时钟源和频率。
   - 配置SAI接收数据的格式和模式,选择合适的设置,如单声道、24位数据宽度等。
   - 设置SAI接收缓冲区的大小,根据数据接收的方式和数据量来调整。
   - 配置SAI接收中断或DMA传输,选择适合应用需求的方式。

3. 在代码中初始化和配置SAI接口:
   - 使用CubeMX生成的代码中,找到相应的初始化函数,例如HAL_SAI_MspInit()和MX_SAI1_Init()。
   - 确保在MX_SAI1_Init()函数中,对SAI外设进行初始化和配置。
   - 根据硅麦的数据格式和接收方式,适当调整SAI的配置参数。

4. 编写接收数据的代码逻辑:
   - 在合适的地方添加接收数据的代码,例如在main()函数中。
   - 使用HAL库提供的相应函数,例如HAL_SAI_Receive_DMA()或HAL_SAI_Receive_IT(),选择合适的接收方式。
   - 根据具体需求,可以在接收完成的回调函数中处理接收到的PDM信号数据,例如将接收到的数据转换为PCM格式或进行进一步的处理。

5. 通过串口或其他方式输出接收到的数据:
   - 在代码中添加合适的打印或输出操作,例如使用printf()函数或通过串口发送数据。
   - 在接收完成的回调函数中,将接收到的数据输出到串口或其他设备,以便进行观察和分析。

确保以上步骤正确配置和实现后,即可通过CUBEMAX生成的代码接收和处理来自硅麦的PDM信号数据。如果只能显示0,可能需要进一步检查代码和硬件连接的问题,例如确保时钟信号正确连接并在正确的频率下工作,确保中断或DMA配置正确等。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分