STM32F10xxx 之 System tick Timer(SYSTICK Timer)


背景

研究STM32F10xxx定時器的時候,無意間看到了System tick Timer,於是比較深入的了解下,在此做個記錄。

正文

System tick Timer是Cotex-M內核的24位計數的系統定時器。它的自動重載值可被隨時配置更改,並且如果配置了系統定時器,那么它的中斷也即被跟着使能。需要強調的是,在STM3210xxx的用戶手冊里,基本上找不到關於系統定時器的信息,所以想要深入了解配置該定時器,得去看內核相關文檔,不過好在有了庫函數,可以暫時不去深究內核文檔,即可利用ST提供的庫函數來進行配置。本文即記錄了利用ST的庫函數將該定時器的時鍾配置為“AHB Clock”8分頻並實現微妙(us)延時的方法。

首先是配置系統定時器的時鍾源,庫函數如下:

/**
  * @brief  Configures the SysTick clock source.
  * @param  SysTick_CLKSource: specifies the SysTick clock source.
  *     This parameter can be one of the following values:
  *     @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8 selected as SysTick clock source.
  *     @arg SysTick_CLKSource_HCLK: AHB clock selected as SysTick clock source.
  * @retval None
  */
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;
  }
}  

從以上的說明可以看出,系統定時器可被選擇為AHB時鍾或者AHB 8分頻。本例則配置為 AHB 8分頻:

/**
  * SysTick時鍾源由HCLK/8提供,當系統頻率為72MHz時,最小計數周期為1/9MHz,計滿9次為1us,
  * tick_us以9為單位,在此為基礎實現us延時。
  */
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
tick_us = sysclk/8;    // sysyclk = 72		    
tick_ms=(u16)tick_us*1000;

接着實現Delay_us(uint us)函數

void Delay_us(uint us)
{		
	uint temp;	    	 
	SysTick->LOAD = us * tick_us;  // 滴答9次就是1us
	SysTick->VAL  = 0x00;           // 賦初值為"0"
	SysTick->CTRL = 0x01 ;          // 開啟定時器
	do
	{
            temp = SysTick->CTRL;
	}
	while( (temp&0x01) && (!(temp&(1<<16))) );
	SysTick->CTRL = 0x00;          // 停止計數器
	SysTick->VAL  = 0x00;          // 清空計數器
}

以上函數則實現了us定時。
當然也可以使用它的中斷函數:

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
  */
void SysTick_Handler(void)
{
    // 要做什么,自行發揮。
}

參考鏈接

此文章參考借鑒了"ARM KEIL"官方文檔:"System Tick Timer" 。

至此,記錄完畢

記錄時間:2016-12-29
記錄地點:深圳WZ


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM