关于STM32的SysTick定时器的时钟选择问题

今天想自己用寄存器编程写一个用systick定时器的延时函数,写完后做实验发现我要延时1s,但是却延时了8s。这个问题让我纠结了半天。实际上也不是什么大问题,就是Systick的时钟选择错误罢了

关于STM32的SysTick定时器的时钟选择问题_第1张图片

如图所示,供Systick使用有两个时钟源,一个是经过8分频的时钟,一个是位经分频的时钟。

关于STM32的SysTick定时器的时钟选择问题_第2张图片

    从《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;
}


你可能感兴趣的:(STM32)