OpenEdv-开源电子网

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

请教一个外部中断问题

[复制链接]

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2011-10-18 23:36:12 | 显示全部楼层 |阅读模式
我想问一下,怎么跳出中断,应该配置EXTI->E|=1<<13,这样吗?
我在中断服务函数里面配置了,但貌相跳不出去,一旦触发了,就貌相一直卡在中断服务函数里面。
附上我自己建立的工程文件夹,包含LED显示,按键扫描,串口,在主函数中弄一个跑马灯,串口不断发送数据出去,数据每次比上一次加一,中断服务函数里面发送相应键的名称到串口,并且LED不同状态闪烁,我看过原子的程序,进入中断后,中断执行完毕后也能跳出的说,我对比了很久,自己写了一个,但中断就卡住了,会不会和我没有配置中断分组和优先级有关系???

外部中断.rar

444.81 KB, 下载次数: 231

Time?And?Relative?Dimension?In?Space.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-18 23:37:02 | 显示全部楼层
EXTI->E|=1<<13
更正一下,
是EXTI->R|=1<<13
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-19 14:47:34 | 显示全部楼层
呃,此贴沉了。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-19 15:57:49 | 显示全部楼层
回复【3楼】Tardis:
---------------------------------
你的问题找到原因了.原因就是:你在中断函数里面调用了delay_ms函数.
因为在主函数的while循环里面,如果在调用(大多数情况是这样)delay_ms函数的时候,被中断打断,而进入中断以后,再次调用delay函数,导致delay的控制位发生了变化,从而使得退出中断的时候,会一直死在主函数的delay里面.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-19 16:21:30 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
恍然大误啊~中断里调用了延时之后,Systick的VAL变化了,延时之后Systick被关闭,而延时里是判断Systick的16位退出while的,中断返回后,就死在主函数中的延时while里了,直接出不来,因为Systick在中断中停了,16位永远不为1所以程序就一直在等。恍然大误啊~~~~茅塞顿开啊~~谢谢原子哥,谢谢,谢谢!!!!!
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2011-9-15
在线时间
0 小时
发表于 2011-10-19 18:43:51 | 显示全部楼层
这个是得注意!
mark
 enum 生活: Boolean { 淡定 = 0, 蛋疼 = 1 }
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2011-12-7
在线时间
0 小时
发表于 2011-12-21 21:56:54 | 显示全部楼层
原来是这样。。。。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2013-7-10
在线时间
0 小时
发表于 2013-8-2 11:16:43 | 显示全部楼层
请问,如果一定要在中断里使用delay_ms()函数,如何防止主函数的delay_ms()受影响呢?有没有什么好的方法
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2013-8-2 14:21:04 | 显示全部楼层
回复【8楼】xiaoyuer29:
---------------------------------
有,你不用systick不就得了,直接用实际定时器,定时器不开中断,直接程序中用死循环判断定时器的计数器是否到位了,这是比较死的方法,以前51单片机中常用。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2013-7-10
在线时间
0 小时
发表于 2013-8-3 18:18:05 | 显示全部楼层
楼主的方法不错,这应该是非常精准的延时了,毕竟占用了一个定时器。之前我对延时时间精度没有太大要求,所以直接自己写了一个简单的延时子函数,就是那种传统的把 i++ 放在for循环里,以前也在51中用的比较多--
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2013-8-5 11:28:01 | 显示全部楼层
回复【10楼】xiaoyuer29:
---------------------------------
一个定时器而已,STM32大容量产品中的定时器多到都用不光,如果加了ucos后,定时器基本上2个就够用了。你玩玩PWM驱动无源蜂鸣器也就是多那么一个定时器的使用而已。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 17:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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