完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
对于DMA来讲,对应的事件是传输完成、半完成、出错等,一般来说,DMA跟其它外设
往往配合工作,所以在启动基于DMA对外外设功能时,在STM32外设库的相应启动函数里一般都有对应上面事件的回调函数的默认配置,当然我们也可以自行修改。 你可以进一步打开相应函数阅读下。 |
|
|
|
在STM32Cube HAL库中,DMA传输完成后,可以使用DMA的中断标志位和中断处理函数来实现回调函数的功能。具体步骤如下:
1. 在使用DMA传输的初始化函数中,启用DMA传输完成的中断功能。比如,对于一个DMA传输的初始化函数`HAL_DMA_Init()`,可以通过设置DMA_InitStructure中的`TCIE`(Transfer Complete Interrupt Enable)位来启用传输完成中断,如下所示: ```cpp DMA_InitStructure.Instance = DMAx_Streamx; DMA_InitStructure.Init.Direction = DMA_DIR_PERIPH_TO_MEMORY; // 其他DMA配置参数 DMA_InitStructure.Init.PeriphInc = DMA_PINC_DISABLE; DMA_InitStructure.Init.MemInc = DMA_MINC_ENABLE; // 其他DMA配置参数 // 启用传输完成中断 DMA_InitStructure.Init.Mode = DMA_NORMAL; DMA_InitStructure.Init.Priority = DMA_PRIORITY_MEDIUM; DMA_InitStructure.Init.FIFOMode = DMA_FIFOMODE_DISABLE; DMA_InitStructure.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_HALFFULL; DMA_InitStructure.Init.MemBurst = DMA_MBURST_SINGLE; DMA_InitStructure.Init.PeriphBurst = DMA_PBURST_SINGLE; DMA_InitStructure.Init.TCIE = ENABLE; // 启用传输完成中断 HAL_DMA_Init(&DMA_InitStructure); ``` 2. 编写DMA的中断处理函数。当DMA传输完成时,中断触发,执行中断处理函数。在中断处理函数中,可以完成相关操作。在STM32Cube HAL库中,中断处理函数的命名规则为:`void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma)`。可以根据这个命名规则来重写中断处理函数,如下所示: ```cpp void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma) { // 判断是否是传输完成中断 if (__HAL_DMA_GET_IT_SOURCE(hdma, DMA_IT_TC) != RESET) { // 清除传输完成中断标志位 __HAL_DMA_CLEAR_FLAG(hdma, DMA_FLAG_TC); // 调用回调函数,完成相关操作 My_Callback_Function(); // 调用回调函数 // 可选,禁用DMA传输完成中断 // __HAL_DMA_DISABLE_IT(&hdma, DMA_IT_TC); } } ``` 3. 在回调函数`My_Callback_Function()`中完成相关操作。这里可以是你需要执行的一些操作,比如处理接收到的数据或发送下一批数据等。 需要注意的是,在中断处理函数中,需要清除DMA的中断标志位,并且可以选择禁用DMA传输完成中断。 使用上述步骤,就可以在DMA传输全部完毕后,产生中断并调用回调函数来完成相关操作。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1609 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1540 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1587 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
503浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 00:13 , Processed in 0.794832 second(s), Total 49, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号