systick延时程序在中断后陷入死循环

2019-07-20 22:40发布

[mw_shl_code=c,true]void delay_ms( u32 time ) //72HMZ { u32 temp; SysTick->LOAD = 9*time*1000; /* 时间加载 */ SysTick->VAL = 0X00; /* 清空计数器 */ SysTick->CTRL = 0X01; /* 使能计数器 */ do { temp = SysTick->CTRL; }while( (temp&0X01) && !( temp & (1<<16 ))); SysTick->CTRL = 0X00; /* 关闭计数器 */ SysTick->VAL = 0X00; /* 清空计数器 */ } void EXTI0_IRQHandler( void ) { delay_ms(20); if( (GPIOE->IDR &= 1)==0 ) { printf("你按下了KEY1 "); while( (GPIOE->IDR &= 1)==0 ); } } [/mw_shl_code] 松开按键后  程序在delay_ms函数中死循环?这是为啥   该怎么解决??? 求助  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
叶念西风
1楼-- · 2019-07-21 02:37
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-21 02:41
这里不应该死才对.
你是怎么测试的?
叶念西风
3楼-- · 2019-07-21 03:22
回复【2楼】正点原子:
------------------------------
按下键  然后松开  程序里就这两个东西  别的没啥功能
DAVIDl
4楼-- · 2019-07-21 06:15
正点原子 发表于 2015-3-18 21:48
这里不应该死才对.
你是怎么测试的?

原子哥,我也遇到了这个问题,但是我的按键是矩阵键盘,不是中断。也会死在delay里面,刚开始死在了delay_ms()里面,然后我直接把delay_ms()删掉,然后又死在了delay_us()这是咋回事?都是在里面的do while 一直循环。
ZHOUHAO123
5楼-- · 2019-07-21 06:54
DAVIDl 发表于 2018-7-8 10:33
原子哥,我也遇到了这个问题,但是我的按键是矩阵键盘,不是中断。也会死在delay里面,刚开始死在了delay ...

请问你解决了吗?我也出现这样的问题了。求解答
ZHOUHAO123
6楼-- · 2019-07-21 09:23
 精彩回答 2  元偷偷看……

一周热门 更多>