SysTick—STM32系统滴答定时器详解

时钟源选择
函数:SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);
代码:

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
  if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
  {
    SysTick->CTRL |= SysTick_CLKSource_HCLK;
  }
  else
  {
    SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
  }
}

从代码上看,最终操作的就是SysTick->CTRL寄存器,下面看下他的介绍
在这里插入图片描述
CM3 允许为 SysTick(系统滴答计时器) 提供两个时钟源以供选择。 第一个是内核的“自由运行时钟” FCLK。“自由” 表现在它不来自系统时钟 HCLK, 因此在系统时钟停止时 FCLK 也继续运行。 第二个是一个外部的参考时钟。但是使用外部时钟时,因为它在内部是通过 FCLK 来采样的,因此其周期必须至少是 FCLK 的两倍(采样定理)。很多情况下芯片厂商都会忽略此外部参考时钟,因此通常不可用。通过检查校准寄存器的位31,可以判定是否有可用的外部时钟源,而芯片厂商则必须把该引线连接至正确的电平。

参数1:SysTick_CLKSource_HCLK = 0X0000 0004
参数2:SysTick_CLKSource_HCLK_Div8 = 0XFFFF FFFB
选择参数1:将SysTick->CTRL的CLKSOURCE位置1,选择内核始终FCLK
选择参数2:将SysTick->CTRL的CLKSOURCE位置0,选择内核始终STCLK
FCLK:外部时钟源 = HCLK(AHB总线时钟)= SYSCLK = 72M
STCLK:内核时钟 = HCLK(AHB总线时钟)/ 8 = 9M

sysTick_Init,系统滴答定时器初始化函数

#define sysTick_ClockSource  SysTick_CLKSource_HCLK_Div8
void sysTick_Init()
{
    u32 sysTick_Clock;
	SysTick_CLKSourceConfig(sysTick_ClockSource);
	if(sysTick_ClockSource == SysTick_CLKSource_HCLK_Div8)
	{
	    sysTick_Clock = SystemCoreClock / 8;
	}		
	else
	{
	    sysTick_Clock = SystemCoreClock;
	}	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章