为什么我这个延时函数一直死在while里,跳不出来啊?

2019-07-20 05:37发布

static u8 fac_us=0;
static u16 fac_ms=0;

void delay_init(u8 SYSCLK)
{
       
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        fac_us=SYSCLK/(8*1000000);
        fac_ms=(u16)fac_us*1000;
}
       
void delay_us(u32 time)
{
        SysTick->LOAD=time*fac_us;
        SysTick->VAL=0;
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
  while((SysTick->CTRL&(1<<16))==0);
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
        SysTick->VAL=0;
}
       
       
void delay_ms(u16 time)
{
        SysTick->LOAD=(u32)time*fac_ms;
        SysTick->VAL=0;
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
        while((SysTick->CTRL&(1<<16))==0);
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
        SysTick->VAL=0;
}

void delay_nms(u16 time)
{                  
        u8 integer=time/500;                                                               
        u16 remainder=time%500;
        while(integer)
        {
                delay_ms(500);
                integer--;
        }
        if(remainder)delay_ms(remainder);
}

我把原子哥例程里的void delay_nms(u16 time)copy过来也一样,还是死在do{}while()里。

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