打印
[STM32F1]

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

[复制链接]
1504|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aolin|  楼主 | 2019-5-27 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位,STM32的外设中断与其DMA能否同时起作用?
例如定时器捕获功能,我想让捕获中断与DMA触发同时起作用,可以实现吗?
我测试了一下定时器捕获,发现只要同时使能捕获中断与使能它的DMA,中断服务没有被触发,但DMA可以被触发。
禁止捕获DMA后,中断又可以被触发了。
谢谢!

使用特权

评论回复
沙发
buffered| | 2019-5-27 16:54 | 只看该作者
应该是中断源只能用于一种作用吧

使用特权

评论回复
板凳
香水城| | 2019-5-28 23:24 | 只看该作者
如果一个事件既可触发中断又可触发DMA的话,二者是不矛盾的。只是平常少有同时用的。
但同时用肯定没问题。

如果你用库函数,基于中断或基于DMA往往是分开的。如果你想二者同时都用,你可以手动调整下。
比方我想开启某个通道比较事件的DMA,同时要用其比较中断:

        __HAL_TIM_ENABLE_IT(&htim1, TIM_IT_CC1);  //开启通道1的比较中断
HAL_TIM_OC_Start_DMA(&htim1, TIM_CHANNEL_1, (uint32_t *)&pData, 1); //使能通道1比较事件的DMA触发功能

使用特权

评论回复
地板
aolin|  楼主 | 2019-5-29 17:18 | 只看该作者
谢谢版主的回复!
但是实际测试发现外设中断与DMA都开启的情况下,外设中断服务程序不被触发,DMA功能是正常的,只要关闭DMA,中断服务程序就进去了,我也觉得奇怪,为什么中断被抑制了。

使用特权

评论回复
5
香水城| | 2019-6-3 12:18 | 只看该作者
aolin 发表于 2019-5-29 17:18
谢谢版主的回复!
但是实际测试发现外设中断与DMA都开启的情况下,外设中断服务程序不被触发,DMA功能是正 ...

上面提到的其实我才测试过的代码。
INT与DMA本身不冲突,但你要注意会不会DMA中断跟你外设中断发生了竞争。

使用特权

评论回复
6
aolin|  楼主 | 2019-6-12 11:56 | 只看该作者
香水城 发表于 2019-6-3 12:18
上面提到的其实我才测试过的代码。
INT与DMA本身不冲突,但你要注意会不会DMA中断跟你外设中断发生了竞争 ...

版主可否给一个完整的DEMO我测试一下,谢谢!

使用特权

评论回复
7
xiaoqizi| | 2019-6-17 14:56 | 只看该作者
应该可以同时用啊

使用特权

评论回复
8
木木guainv| | 2019-6-17 15:01 | 只看该作者
当然可以了  只是处理细节上有点麻烦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

396

帖子

2

粉丝