项目中如何使用BSP库?STM32F746G-Disco音频开发疑问
结论
不需要在CubeMX中手动启用、配置SAI相关外设。
具体说明
- ST官方针对STM32F746G-Disco板提供的
stm32746g_discovery_audio.cBSP驱动已经做了全量板级适配:文件内定义的haudio_out_sai、haudio_in_sai全局句柄,以及配套的BSP_AUDIO_OUT_Init、BSP_AUDIO_IN_Init初始化接口,会自行完成SAI外设时钟使能、复用引脚配置、DMA链路配置、中断优先级设置、SAI块工作参数配置全流程工作,完全不依赖CubeMX生成的外设初始化代码。 - 如果你手动在CubeMX中启用SAI外设,反而会引发两类问题:
- 第一是CubeMX会生成同名的SAI句柄定义,和BSP库内的全局句柄冲突,直接触发编译报错
- 第二是CubeMX生成的SAI通用配置和板载WM8994 Codec的硬件连线、工作参数不匹配,就算改了重定义问题也会导致音频收发异常
- 不止SAI,音频Codec控制用到的I2C外设、音频时钟PLL配置也都不需要你在CubeMX里手动开启,BSP的音频初始化流程里已经包含了这部分逻辑。
正确操作流程
- CubeMX配置阶段只需要完成基础系统配置:比如调试接口(SWD/JTAG)、系统时钟树(配置到216MHz标准主频即可)、你业务需要用到的其他外设(比如按键、LED、串口等),不要勾选SAI、对应I2C这类音频相关外设。
- 生成MDK/STM32IDE工程后,直接调用BSP音频接口开发功能即可:
- 放音:调用
BSP_AUDIO_OUT_Init配置采样率、采样位深、声道数,再调用BSP_AUDIO_OUT_Play传入音频缓冲区地址、数据长度即可启动播放 - 录音:调用
BSP_AUDIO_IN_Init配置输入参数,再调用BSP_AUDIO_IN_Record传入录音接收缓冲区地址即可启动采集
- 放音:调用
- 如果需要调整SAI、DMA中断优先级,直接修改
stm32746g_discovery_audio.c内初始化逻辑里的NVIC参数即可,不要通过CubeMX图形化界面配置这部分中断,否则重新生成工程时会覆盖BSP的正确配置。
内容的提问来源于stack exchange,提问作者akoluaciklinux
相关产品推荐
相关产品推荐

