之前做了一个使用STM32
的DAC
功能播放音频的项目,其中与官方例程不同的是,我采用了DMA
功能搬运数据。
CubeMX配置
这一部分没什么好说的,使用CubeMX
勾选相应的选项
首先是DAC
功能,在DMA
功能选项卡下绑定DMA
通道,在DMA
配置里面数据宽度选择Byte
然后配置TIM6
定时器,定时器频率根据系统时钟和音频采样率进行计算:
播放音乐
这里通过HAL
库开启DMA
的搬运
1 | HAL_DAC_Start_DMA( |
然而你会发现这个函数会返回错误
这个错误其实是CubeMX
的bug
CubeMX
生成的初始化代码的顺序有误:其默认的顺序是先初始化DAC
后初始化DMA
功能,导致DAC
初始化的时候DMA
没有准备好
这里在CubeMX -> Project Manager -> Advanced Settings
里面调整顺序:
把MX_DAC_Init
移动到MX_DMA_Init
下方后重新生成代码发现程序能够正常工作了!