#申请原创# #GD-FAQ#
问题: 某客户反馈使用GD32F450VI的ADC时,当采样周期设置为56时,运行正常。当将采样周期设置为3时,使用DMA读取ADC寄存器一直为0,并且ADC ROVF标志位置位。
问题分析: 客户程序不能直接外发,根据客户所说配置单独测试,ADC0有9路通道,ADC1有4路通道,采样周期为3,工作在独立模式,采用DMA搬运。单独测试并没有发现问题。怀疑是客户使用其他外设和DMA抢占总线导致的,于是让客户关闭其他外设再进行测试,问题还是会复现。让客户将ADC配置、DMA配置以及main函数的内容截图发出,发现客户先进行ADC的初始化使能,再进行的DMA初始化使能。将初始化使能顺序调换后,问题解决。
结论: 客户先初始化使能ADC,再初始化使能DMA的情况下。若ADC采样周期较长,在ADC还未采集转换完成时,DMA已经完成初始化使能,此时DMA可以正确搬运ADC数据;若ADC采样周期较短,在ADC采集完成后发出DMA搬运请求,但DMA还未初始化使能完成,此时ADC就会发生溢出错误。所以在使用ADC+DMA时,要注意ADC和DMA初始化使能的顺序,要将DMA设置好后,再进行ADC的采样。
|