STM32外部中断 问题

2019-08-14 16:11发布

我正在做外部中断实验,主函数LED1不停闪烁提示程序正在运行,每次触发外部中断就让LED2取反。但是我发现一点问题,图中是我的主程序 {G(X)R0T`CO$PD[}]KKS543.png 每隔一秒打印一个数字,每隔7秒LED1取反。但是我触发外部中断后,外部中断函数执行成功后,程序没有返回到原来的地方,而是返回到原来代码的下一句代码。比如,程序打印完“1”后我立即触发了外部中断,中断处理完后应该延时一秒在打印“2”,可是实际上并没有延时一秒。而是执行完中断后,就立即打印了“2”。这是怎么回事?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
lanlzp
1楼-- · 2019-08-14 20:15
在外部中断处记录一次ticks数,printf(''2'')之前记录一次ticks数,计算差值 看是否有1s间隔
HEHELA
2楼-- · 2019-08-14 21:03
lanlzp 发表于 2017-8-10 12:27
在外部中断处记录一次ticks数,printf(''2'')之前记录一次ticks数,计算差值 看是否有1s间隔

不是,如果外部中断没有执行的话就是1s,如果外部中断执行了的话就不是了
HEHELA
3楼-- · 2019-08-14 22:03
我这么爱学习竟然没人理我,,唉
路人甲乙丙丁
4楼-- · 2019-08-14 22:20
你用的是sys文件夹下的delay.c的函数,这里面的延时函数是利用的滴答计时器,比如说你想延时1ms,你就向滴答计时器写x(假设滴答计时器从x递减到0时,用时1ms),当你调用delay_ms(1)函数时,相当于像滴答计时器写x,并开启计时器,如果这时程序进入中断,执行中断服务函数,滴答计时器仍然在递减,不受影响。所以当你中断返回后,滴答计时器可能已经计数到0,延时就直接结束了(参考你调用的delay_ms代码,程序会跳出了do-while循环),所以会直接打印。
你可以参考一下《库函数版本》5.1小节,看一看第21讲 Systick滴答定时器-延时函数讲解视频
魑魅魍魉
5楼-- · 2019-08-15 03:06
 精彩回答 2  元偷偷看……
wxjhby
6楼-- · 2019-08-15 05:41
是怎么触发外部中断的,立即是多久?

一周热门 更多>