由于LOAD寄存器只有24位
uint32_t fu_ms;// 1ms需要记得次数
uint32_t fu_us;// 1us需要记得次数
void Systick_Config(uint8_t Sysclk)
{
// 1,配置滴答定时器的时钟源-----AHB/8----关闭定时器
SysTick->CTRL &=~0x05;
// 单位时间需要记的次数
fu_us =Sysclk/8;
fu_ms =fu_us*1000;
}
void Systick_NmsDelay(uint32_t Nms)
{
uint32_t SysTick_Value;
uint8_t STKflag=0;
while(0==STKflag) //解决Nms最大只能传1864
{
if(Nms>1864)
{
SysTick->LOAD =1864*fu_ms;
Nms-=1864;
}
else{
// 2,配置计数值
SysTick->LOAD =Nms*fu_ms;
STKflag=1;
}
// 3,打开定时器---SysTick->CTRL
SysTick->CTRL |=0x01;
// 4,判断定时是否结束---判断SysTick->CTRL的第16位是否为1
do{
SysTick_Value=SysTick->CTRL;
}while(!(SysTick_Value&(1<<16)));
// 5,关闭定时器
SysTick->CTRL &=~0x01;
}
}