糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > STM32H7 DCMI DMA调试记录

STM32H7 DCMI DMA调试记录

时间:2022-01-22 07:20:34

相关推荐

STM32H7 DCMI DMA调试记录

DCMI_DMA无异常时中断回调顺序

DCMI_DMA无异常时中断回调顺序

文章目录

DCMI_DMA无异常时中断回调顺序single buffer mode:double buffer mode:注意事项

DCMI_DMA无异常时中断回调顺序

single buffer mode:

1)DMA传输一半中断回调:XferCpltCallback

需要在HAL_DCMI_Start_DMA()后手动添加赋值,HAL库HAL_DCMI_Start_DMA()中只初始化了传输完成回调XferCpltCallback = ADC_DMAConvCplt,在DMAx_Streamx_IRQHandler中调用

2)DMA传输完成中断回调:XferCpltCallback

HAL库HAL_DCMI_Start_DMA()中默认初始化了传输完成回调XferCpltCallback = ADC_DMAConvCplt,在DMAx_Streamx_IRQHandler中调用

3)DCMI帧中断:HAL_DCMI_FrameEventCallback

在2)中断处理完后,即刻在HAL_DCMI_IRQHandler中调用该回调

double buffer mode:

当传输的数据量 > 0xFFFFU时,HAL库中HAL_DCMI_Start_DMA()将使用double buffer mode:

1)DMA传输1/4中断回调:XferHalfCpltCallback

需要在HAL_DCMI_Start_DMA()启动后手动添加赋值,在DMAx_Streamx_IRQHandler中调用,此时所用buffer为buffer 0

2)DMA传输一半中断回调:XferCpltCallback

HAL库HAL_DCMI_Start_DMA()中默认初始化了传输完成回调XferCpltCallback = ADC_DMAConvCplt,在DMAx_Streamx_IRQHandler中调用,此时所用buffer为buffer 0,注意虽然此时调用XferCpltCallback,但是实际数据只传输了一半,剩下一半数据的传输将使用buffer 1

3)DMA传输3/4中断回调:XferM1HalfCpltCallback

需要在HAL_DCMI_Start_DMA()启动后手动添加赋值,在DMAx_Streamx_IRQHandler中调用,此时所用buffer为buffer 1

4)DMA传输完成中断回调:XferM1CpltCallback

HAL库HAL_DCMI_Start_DMA()中默认初始化了传输完成回调XferM1CpltCallback = ADC_DMAConvCplt,在DMAx_Streamx_IRQHandler中调用,使用双buffer时,XferM1CpltCallback才是传输完成中断回调,而不是XferCpltCallback

5)DCMI帧中断:HAL_DCMI_FrameEventCallback

在4)中断处理完后,即刻在HAL_DCMI_IRQHandler中调用该回调

注意事项

1)无论哪种buffer mode:XferCpltCallback和XferCpltCallback这两个回调都是代表buffer 0的回调,不同的是在不同的buffer mode中,使用buffer 0所传输的数据量:在single buffer mode中,所有数据均使用buffer 0传输,因此XferCpltCallback和XferCpltCallback就代表了传输所有数据的一半以及传输所有数据完成;而在double buffer mode中,仅使用buffer 0传输所有数据的一半,因此XferCpltCallback和XferCpltCallback代表传输所有数据的1/4以及传输所有数据的1/2,数据传输是先使用buffer 0;

2)如果应用程序中传输的数据量是需要修改,比如说你想采集的图片大小可调,则需要注意DMA需要传输的数据量是否需要使用双buffer,如果需要,则应注意是否需要修改相关回调。

如果觉得《STM32H7 DCMI DMA调试记录》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。