SysTick 是一个个24 位、降序(向下计数)、零约束、写清除的计数器
SysTick寄存器
SysTick初始化
void SysTick_Init(void)
{
//设置重载值(1us时基)
SysTick->LOAD = (uint32_t)(SystemCoreClock/1000000-1UL); //1UL强制转换成
//清空计数器中的值
SysTick->VAL = 0UL;
//设置systick的时钟源和开启systick的中断
SysTick->CTRL &= SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk;
//先将systick关闭,有需要计时时才打开
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
用中断来延时
void sysdelay_us(u32 time)
{
if(time <= 0)return; //小于0就返回
count = time;
SysTick->VAL = 0; //当前值清零
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开启定时器
while(count!=0); //判断计数是否完成,在中断里计数
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; //关闭定时器
}
void SysTick_Handler(void)
{
if(count!=0)count--;
}