中级会员
 
- 积分
- 278
- 金钱
- 278
- 注册时间
- 2016-9-13
- 在线时间
- 73 小时
|
10金钱
嘀嗒定时器延时如下,第一种:while(!(SysTick->CTRL&0x00010000));这一句是我改的就是判断是否计数到0,如果计数到0,则关闭计数器,清零计数器
第二种:这个do-while循环do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
也是判断是否计数到0,只是多判断了一下是否计数器是否开着,同时把寄存器的值放到temp里。
现在的情况是,当我在外部中断里使用这个延时函数时,第一种情况会卡死在那个while循环中,第二个就不会,我想不通了,谢谢大家。
void delay_ms(u16 times)
{
u32 temp;
SysTick->LOAD =times*fac_ms;
SysTick->VAL =0x00;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}[/mw_shl_code]
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));
// while(!(SysTick->CTRL&0x00010000));
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL =0X00;
}
|
|