系统滴答定时器:为单片机系统提供时间轴(时间概念) 为操作系统提供时间片(时基)
寄存器查询方式:
1.选择时钟
2.计算重装载值
3.当前值清零
4.使能
5.等待标志位为一(标志位为一说明计时完成)
6.关闭使能
SysTick->CTRL &=~(1<<2);//选择外部时钟
选择时钟
SysTick->LOAD=21*ustime-1;//重装载值
计算重装载值
该系统滴答定时器选择了外部参考时钟为21MHz,每次计数时长为1/21MHz,那就是说每1us能计数21次,因为它计数范围是从0开始的,所以计数值要减1
SysTick->VAL=0;//当前值清零
当前值清零
SysTick->CTRL |=(1<<0);//使能
while(!(SysTick->CTRL & (1<<16)));
SysTick->CTRL &=~(1<<0);//禁止使能
使能/等待标志位为一(标志位为一说明计时完成)/关闭使能
完整代码
/*
Function name:Systick_Us
Description:us延时函数
param:ustime-->延时时长
retval:None
Remarks:
Fck:
1----> 168MHz 内核时钟 最长延时时长= 99.864375ms
0---->21MHz 外部时钟 最长延时时长= 798.915ms
*/
void Systick_Us(u32 ustime)
{
SysTick->CTRL &=~(1<<2);//选择外部时钟
SysTick->LOAD=21*ustime-1;//重装载值
SysTick->VAL=0;//当前值清零
SysTick->CTRL |=(1<<0);//使能
while(!(SysTick->CTRL & (1<<16)));
SysTick->CTRL &=~(1<<0);//禁止使能
}