//us延时倍数
static uint8_t fac_us=0;
//ms延时倍数
static uint16_t fac_ms=0;
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置时钟源为HCLK/8
fac_us=SystemCoreClock/8000000; //1us需要9个秒冲
fac_ms=(u16)fac_us*1000; //1ms需要的脉冲数
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
//ʹÄÜsystick
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;
}
//nms<=0xffffff*8*1000/SYSCLK
//对72MHz时,nms<=1864
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms; //(SysTick->LOAD为24bit)
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;
}