OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2659|回复: 3

F4的DMA接收中断问题求助

[复制链接]

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
发表于 2018-11-7 15:12:28 | 显示全部楼层 |阅读模式
10金钱
    使用原子哥的串口+DMA循环接收,并且设置DMA传输完成中断,但是在每次初始化完成DMA后总要进入一次DMA传输完成中断。
    或者在初始化之后,调用下面的代码也会进入一次DMA传输完成中断。

    void a(void) {
        DMA2_Stream5->CR &= 0xfffffffe;    //失能DMA
        DMA2_Stream5->CR |= 1;               //使能DMA
    }
    由于我程序上需要频繁地调用上面的程序,但是我又不想每次调用 子函数a 时都进入一次DMA传输完成中断,请问这个有什么办法可以在调用 子函数a 的时候不进入DMA传输完成中断???

最佳答案

查看完整内容[请看2#楼]

目前能想到的办法是,在对DMA操作前关闭DMA中断允许,对DMA操作完毕后,先清除DMA中断标志位,然后再打开DMA中断允许。上机试了,调用 子函数a 的 时候再也没有产生DMA中断了,DMA接收也正常 void a(void) { DMA2_Stream5->CR &= ~(1 CR &= 0xfffffffe; //失能DMA DMA2_Stream5->CR |= 1; //使能DMA DMA2->HIFCR |= 0xf40; //清楚中断标志位 DMA2_Stream5- ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
 楼主| 发表于 2018-11-7 15:12:29 | 显示全部楼层
目前能想到的办法是,在对DMA操作前关闭DMA中断允许,对DMA操作完毕后,先清除DMA中断标志位,然后再打开DMA中断允许。上机试了,调用 子函数a 的 时候再也没有产生DMA中断了,DMA接收也正常
void a(void) {
        DMA2_Stream5->CR &= ~(1 << 4);   //关闭传输完成中断
        DMA2_Stream5->CR &= 0xfffffffe;    //失能DMA
        DMA2_Stream5->CR |= 1;               //使能DMA
        DMA2->HIFCR |= 0xf40;                 //清楚中断标志位
        DMA2_Stream5->CR |= 1 << 4;       //开启传输完成中断
}
回复

使用道具 举报

28

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
488
金钱
488
注册时间
2016-9-29
在线时间
113 小时
 楼主| 发表于 2018-11-7 15:14:24 | 显示全部楼层
单步调试的时候发现,一旦调用这 子函数a 就会标记“DMA传输完成中断标记位”,即使我之后把“DMA传输完成中断标记位”置0也无法阻止程序进入DMA中断
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-11-7 20:13:09 | 显示全部楼层
关闭DMA中断允许,需要用的时候再打开DMA允许中断是比较好
业精于勤荒于嬉;行成于思毁于随!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 17:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表