OpenEdv-开源电子网

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

为什么会触发2次才关闭

[复制链接]

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
发表于 2014-10-23 07:28:26 | 显示全部楼层 |阅读模式
5金钱
我要在触发一次中断后,就在中断函数里关闭中断,如下程序可以实现:
EXTI->R=1<<11; //清除LINE11上的中断标志位
EXTI->IMR&=~(1<<11);//屏蔽line11上的中断
但如果把后一句放到前面就触发2次中断才能关闭,为什么?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
286
金钱
286
注册时间
2014-2-17
在线时间
39 小时
发表于 2014-10-23 08:17:03 | 显示全部楼层
这个看你的初始化的时候EXTI->IMR是怎么配置的,因为你这是位取反,如果最开始中断允许,那么一次就进入中断服务程序了。但是如果,你进入一次中断服务程序,取反之后,应该是不能再进入中断服务程序了。除非你在while(1)中还会有中断允许。
花自飘零水自流,生命不息,奋斗不止
回复

使用道具 举报

16

主题

112

帖子

0

精华

高级会员

Rank: 4

积分
818
金钱
818
注册时间
2014-10-22
在线时间
589 小时
 楼主| 发表于 2014-10-23 13:52:10 | 显示全部楼层
初始化用的是原子写的,没动过。while里也没有别的中断允许。中断服务程序里就是按一下建,就num++;然后关闭中断,为的是消抖,但只要我把第一句和第二句换下顺序,就变成num+2,才关闭中断。
回复

使用道具 举报

26

主题

280

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2013-8-2
在线时间
279 小时
发表于 2014-10-23 16:52:29 | 显示全部楼层
你不能直接清除中断标志位,你要先判断下到底是什么造成中断的才能清除对应中断标志位。
举个例子:
{
    if(SR&接收位)
   {
       清除接收标志位;
   }
    if(SR&错误位)
   {
       清除错误标志位;
   }
}
博客:http://blog.csdn.net/feilusia
CC2541群(127442605);CC2640群(557278427);
Android群(541462902);STM8/STM32群(164311667);
Linux群(512598061);职场交流群(450154342);
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-30 06:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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