[STM32F1] STM32外设中断与DMA都使能结果

[复制链接]
1015|24
 楼主| jlyuan 发表于 2021-5-5 21:05 | 显示全部楼层 |阅读模式
请教各位,STM32的外设中断与其DMA能否同时起作用?
xxrs 发表于 2021-5-5 21:07 | 显示全部楼层

然后呢?你是怎么应对这个的呢        
 楼主| jlyuan 发表于 2021-5-5 21:08 | 显示全部楼层
例如定时器捕获功能,我想让捕获中断与DMA触发同时起作用,可以实现吗?
 楼主| jlyuan 发表于 2021-5-5 21:10 | 显示全部楼层
我测试了一下定时器捕获,发现只要同时使能捕获中断与使能它的DMA,中断服务没有被触发,但DMA可以被触发。
yszong 发表于 2021-5-5 21:12 | 显示全部楼层
禁止捕获DMA后,中断又可以被触发了。
zwll 发表于 2021-5-5 21:16 | 显示全部楼层
应该是中断源只能用于一种作用吧
juventus9554 发表于 2021-5-5 21:17 | 显示全部楼层

如果一个事件既可触发中断又可触发DMA的话,二者是不矛盾的
heweibig 发表于 2021-5-5 21:24 | 显示全部楼层
只是平常少有同时用的。
jiajs 发表于 2021-5-5 21:27 | 显示全部楼层
但同时用肯定没问题。
zhanghqi 发表于 2021-5-5 21:31 | 显示全部楼层
如果你用库函数,基于中断或基于DMA往往是分开的。
 楼主| jlyuan 发表于 2021-5-5 21:35 | 显示全部楼层
如果你想二者同时都用,你可以手动调整下。
juventus9554 发表于 2021-5-5 21:37 | 显示全部楼层
比方我想开启某个通道比较事件的DMA,同时要用其比较中断:
dingy 发表于 2021-5-5 21:40 | 显示全部楼层

        __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_CC1);  //开启通道1的比较中断
HAL_TIM_OC_Start_DMA(&htim1, TIM_CHANNEL_1, (uint32_t *)&pData, 1); //使能通道1比较事件的DMA触发功能
 楼主| jlyuan 发表于 2021-5-5 21:42 | 显示全部楼层
实际测试发现外设中断与DMA都开启的情况下,外设中断服务程序不被触发,DMA功能是正常的,只要关闭DMA,中断服务程序就进去了
wuhany 发表于 2021-5-5 21:45 | 显示全部楼层
为什么中断被抑制了
zhanghqi 发表于 2021-5-5 21:54 | 显示全部楼层
上面提到的其实我才测试过的代码。
xxrs 发表于 2021-5-5 21:57 | 显示全部楼层
INT与DMA本身不冲突,但你要注意会不会DMA中断跟你外设中断发生了竞争。
pengf 发表于 2021-5-5 21:59 | 显示全部楼层
应该可以同时用啊
dengdc 发表于 2021-5-5 22:01 | 显示全部楼层
当然可以了  只是处理细节上有点麻烦
 楼主| jlyuan 发表于 2021-5-5 22:06 | 显示全部楼层

嗯,那我按大家的说法挨个排查一下,谢谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

880

主题

12030

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部