一、简介
Systick滴答定时器常用来做延时,可以节省资源不用再浪费一个定时器器。ucos系统中采用的就是Systick作为心跳时钟。
Systick滴答定时器是一个24位的倒计数定时器,计时到0时,就从reload寄存器中重新装载定时初值。
二、Systick的寄存器
1.CTRL:Systick的控制和状态寄存器。
2.LOAD:自动重装载寄存器。
3.VAL:当前值寄存器。
4.CAALIB:校准值寄存器。
三、用Systick做延时函数
void delay_init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择时钟,HCLK的8分频
fac_us=SystemCoreClock/8000000; //SystemCoreClock=72M,最后得出的结果是9,也就是说定时1微秒需要9个时钟周期
fac_ms=(u16)fac_us*1000; //定时一毫秒需要的时钟数
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; // 重装载的值
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; // 清空计数器
}