基於STM32CubeMX的定時器設置


一 概述

STM32的常見的定時器資源: 系統嘀嗒定時器SysTick、看門狗定時器WatchDog、實時時鍾RTC、基本定時器、通用定時器、高級定時器。

系統嘀嗒定時器SysTick :這是一個集成在Cortex M3內核當中的定時器,它並不屬於芯片廠商的外設,也就是說使用ARM內核的不同廠商,都擁有基本結構相同的系統定時器。主要目的是給RTOS提供時鍾節拍做時間基准。
基本定時器:TIM6、TIM7。
通用定時器:TIM2、TIM3、TIM4、TIM5。在基本定時器的基礎上,實現輸出比較、輸入捕獲、PWM生成、單脈沖模式輸出等功能。這類定時器最具代表性,使用也最廣泛。
高級定時器:TIM1、TIM8。

二 STM32通用定時器的基本組成:

STM32的通用定時器,是一個通過可編程預分頻器(Prescaler)驅動的16位自動重裝主計數器(Counter Period)構成。可以對內部時鍾或觸發源以及外部時鍾或觸發源進行計數。
首先,定時器時鍾信號送入16位可編程預分配器(Prescaler),該預分配器系數為0~65535之間的任意數值。預分配器溢出后,會向16位的主計數器(Counter Period)發出一個脈沖信號。
預分頻器,本質上是一個加法計數器,預分頻系數實際上就是加計數的溢出值。
定時器發生中斷時間的計算方法:
定時時間 = (可編程預分頻器+1 ) X (主計數器+1) X 1/ 定時器時鍾頻率
例:假設時鍾信號為1KHz,可編程預分頻器系數為9,主計數器系數為9。此時定時器為0.1秒

我們用一個例子來講解:利用TIM2實現間隔定時,每隔0.2秒將LED1(PB9)的開關狀態翻轉。(時鍾信號為32MHZ)

 

 

第一步:首先設置clock時鍾源為32MHZ:

 

 

 

第二步在Timers的選項里找到TIM2,對定時器2進行設置,然后設置可編程預分頻器和主計數器的系數:

 

設置Prescaler=31999,Counter Period=199。

此時 (31999+1 ) X (199+1) X 1/ 32MHZ =0.2s,正好定時0.2秒。

 

 此時要注意設置NVIC:

 

 

 點擊Enabled。設置NVIC嵌套向量中斷控制器。

設置好路徑等其他內容,用Keil打開工程文件。

在主函數啟動定時器:

   HAL_TIM_Base_Start_IT(&htim2);        //啟動定時器TIM2

 

寫出TIM2實現定時器溢出的回調函數:

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   if(htim->Instance == TIM2)                  //處理TIM2間隔定時中斷
   {
         AL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);     //對PB9端口進行翻轉
   }
}

 


免責聲明!

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



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