F4的DMA接收中断问题求助

2019-07-20 05:18发布

    使用原子哥的串口+DMA循环接收,并且设置DMA传输完成中断,但是在每次初始化完成DMA后总要进入一次DMA传输完成中断。
    或者在初始化之后,调用下面的代码也会进入一次DMA传输完成中断。

    void a(void) {
        DMA2_Stream5->CR &= 0xfffffffe;    //失能DMA
        DMA2_Stream5->CR |= 1;               //使能DMA
    }
    由于我程序上需要频繁地调用上面的程序,但是我又不想每次调用 子函数a 时都进入一次DMA传输完成中断,请问这个有什么办法可以在调用 子函数a 的时候不进入DMA传输完成中断???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ZDawn
1楼-- · 2019-07-20 07:40
目前能想到的办法是,在对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;       //开启传输完成中断
}
ZDawn
2楼-- · 2019-07-20 09:05
单步调试的时候发现,一旦调用这 子函数a 就会标记“DMA传输完成中断标记位”,即使我之后把“DMA传输完成中断标记位”置0也无法阻止程序进入DMA中断
1208
3楼-- · 2019-07-20 13:13
 精彩回答 2  元偷偷看……

一周热门 更多>