老师,还有一个问题,你们给的参考例程中,为什么这里使用adc转换完成的中断回调

🔍 溯源 ✍️ Jack | 📅 2024-10-02 | 👍 0 | 原帖↗
#知识星球 #立芯嵌入式 #来源/立芯星球 #技术/ADC #技术/DMA #技术/HAL库 #质量/普通

原帖 | 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库的有些操作,尤其是中断回调,有时候和我们预期是不一致

2908675464dd.jpg


相关笔记