今天想自己用寄存器编程写一个用systick定时器的延时函数,写完后做实验发现我要延时1s,但是却延时了8s。这个问题让我纠结了半天。实际上也不是什么大问题,就是Systick的时钟选择错误罢了
。
如图所示,供Systick使用有两个时钟源,一个是经过8分频的时钟,一个是位经分频的时钟。
从《CM3权威指南》中可以看到,Systick的时钟源选择是通过控制systick控制与状态寄存器的CLKSOURCE位来确定的。 置0则是选择8分频的时钟,置1则是未分频的时钟。
void Systick_init()
{
SysTick->CTRL |= (1<<2);//STCLK
//SysTick->CTRL &= ~(1<<2);//FCLK
SysTick->CTRL |= 1<<1;
SysTick->LOAD = SysTick_Freq/1000000 -1;
}