原帖 | Jack | 2024-10-02 13:08 | 👍0 | 阅读约1
老师,还有一个问题,你们给的参考例程中,为什么这里使用adc转换完成的中断回调,而不是使用dma搬运完成的中断回调函数呢?在adc的回调中关闭dma,会不会发生adc转换完成,但dma还没搬运完成的情况
答:
你看下启动ADC转换的那个函数(HAL_ADC_Start_DMA),它是启用了DMA的,则这个回调是在DMA的传输完成回调中被调用的,这个就是HAL库的回调嵌套特性,所以你这里能进到这个回调,说明已经是DMA的回调已经产生了,你可以打个断点观察下对应内存是不是已经有ADC数据了。
也就是说,当使用 DMA 时,ADC 的转换完成会触发 DMA 传输,而 DMA 完成整个数据块的传输后,才会触发 HAL_ADC_ConvCpltCallback。(HAL 回调与预期不一致时的排查思路见hal库的有些操作,尤其是中断回调,有时候和我们预期是不一致)

相关笔记