f1 SysTick定时器用作延时 程序 一直卡在循环里是怎么回事啊

2019-08-14 07:05发布

本帖最后由 sszl 于 2017-8-19 22:03 编辑

void delay_ms(uint16_t ms)
{
               
         uint16_t temp;
         uint16_t cnt = 0;
         uint8_t number=0;
         cnt = ms;
         if(ms > 100)
         {
                 number = ms/100;
                 cnt = 100;
                 
         }
         do
         {
                 temp = SysTick->LOAD = cnt * (SystemCoreClock /1000);
                 SysTick->VAL = 0x00;
                 SysTick->CTRL &= ~(SysTick_CTRL_CLKSOURCE|SysTick_CTRL_TICKINT);
                 SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;//¿aÆô¶¨ê±Æ÷
                 do
                 {
                        temp = SysTick->CTRL; //程序一直卡在这
                 }while((temp&0x01)&&!(temp&(1<<16)));
                 
                        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
                 SysTick->VAL = 0x00;
                 ms-=100;
                 if(ms<=100)
                 {
                        cnt = ms;
                 }
        }while(number--);
}
我调试过 SysTick->VAL的值在 更新 是正常的 就是 那个 标志(SysTick->CTRL(16)) 一直检测不到


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。