配置-> 多通道ADC扫描模式+DMA无缓冲区+循环DMA
最近使用STM32F405RGT6进行开发,移植103c8t6的ADC+DMA是发现ADC模块中的值全为零,单步调试后发现ADC转换了一次(一个通道值)后就停止了转换.
单步调试发现ADC1->SR中 OVR溢出标志置1了,查询数据手册得知此标记为DMA溢出标志.
怀疑是DMA出现问题.
单步调试观察DMA2_Stream0内寄存机的值,发现初始化后与期望的值不一致
DMA2_Stream0->FCR (FIFO控制寄存器被设置为0x21)
查看STM32自动生成代码后发现DMA时钟使能在ADC初始化使能之后.
相当于HAL_ADC_MspInit 函数中对DMA的操作都是无效的.
解决方案:
先使能DMA时钟,然后进行DMA操作
注:因为初始化代码是CUBE自动生成的,所以这个问题有可能在软件更新后被修复,
后续: 使用DMA的外设初始化需要在DMA时钟使能之后进行.