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()里。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void delay_ms(u16 time)
{
SysTick->LOAD=(u32)time*fac_ms;
SysTick->VAL=0;
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
while( (SysTick->CTRL&0x01)&&!(SysTick->CTRL&(1<<16)) );
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL=0;
}
一周热门 更多>