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;
	}	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章