名詞解釋:
TRGO:Trigger Out General Purpose Output
ARR:Auto-reload?
PSC:Prescaler
CNT:Counter
EGR:event generation register
? ? ? ? 本文將介紹基本定時器的概念、相關函數以及STM32CubeMX生成定時器的配置函數以及對生成定時器的配置函數進行分析(包括結構體配置、相關寄存器配置)。
????????最后針對于定時器實踐:使用TIM6使能DMA請求時,使用DMA、中斷兩種方式修改定時器的ARR值,并且用邏輯分析查看結果。
0. F4系列定時器分類
- 最大接口時鐘(Max interface clock (MHz))
1. 定時器與系統內核(如MCU)之間的通信接口(如APB總線)支持的最高時鐘頻率。
2. 它決定了定時器寄存器配置和狀態讀取的速度上限。例如,如果接口時鐘為84 MHz,則對定時器寄存器的讀寫操作需基于該頻率進行,不能超過此速率。 - ?最大定時器時鐘(Max timer clock (MHz))
1.?定時器內部計數器(Counter)實際運行時的最高時鐘頻率。
2.?它決定了定時器的計數速度,直接影響定時器的計時精度和輸出信號的頻率上限。例如,168 MHz的定時器時鐘意味著計數器每秒最多遞增168,000,000次。
????????
????????
1.?什么是基本定時器?
1.1?基本定時器概念
1.1.1 基本定時器功能
????????STM32F4系列的基本定時器為TIM6和TIM7。基本定時器包括16 位自動重載遞增計數器,16 位可編程預分頻器,預分頻系數 1~65536,用于對計數器時鐘頻率進行分頻,還可以(TRGO)觸發 DAC 的同步電路,以及生成中斷/DMA 請求。
1.1.2 基本定時器框圖
????????
- 時鐘來源 - APB1
參考第0章第二個圖片,其時鐘內部計數頻率為84Mhz。 - TIM控制器
復位、使能、計數與TRGO(通用觸發輸出)DAC。 - 時基單元
·?預分頻器寄存器 (TIMx_PSC) - 具有影子寄存器
·?計數器寄存器 (TIMx_CNT)
·?自動重載寄存器 (TIMx_ARR)- 具有影子寄存器 - 影子寄存器:
·?發生更新事件時,根據控制位傳輸到活動寄存器(實際執行的寄存器)的預裝載寄存器
·?U event:更新事件 UEV
1.2?基本定時器具體說明
1.2.1?基本定時器-時基單元
????????定時器的主要模塊由一個16位遞增計數器及其相關的自動重載寄存器組成。計數器的時鐘可通過預分頻器進行分頻。
·?TIMx_CR1.ARPE(自動重載預裝載使能位)
? ? ? ? 0:TIMx_ARR 寄存器不進行緩沖;1:TIMx_ARR 寄存器進行緩沖。
·?TIMx_CR1.UDIS(更新禁止 (Update disable)):用以使能/禁止 UEV 事件生成。
????????0:使能 UEV;1:禁止 UEV。
·?TIMx_CR1.CEN(計數器使能 (Counter enable))
????????0:禁止計數器;1:使能計數器
·?TIMx_PSC(預分頻寄存器)
? ? ? ? [15:0]:預分頻器值 (Prescaler value)
·?定時器計算器頻率與定時器時鐘的關系:?
·?TIMx__CR1.URS(更新請求源 (Update request source))
????????0:使能時,所有以下事件(硬、軟件生成更新事件、從模式控制器接收外部觸發信號產生的更新事件?(基本定時器沒有主從模式))都會生成更新中斷或 DMA 請求。
????????1:使能時,只有計數器上溢/下溢會生成更新中斷或 DMA 請求。
·?TIMx_EGR.UG(更新生成 (Update generation)):軟件強制產生更新事件
????????0:不執行任何操作;1:重新初始化定時器計數器并生成寄存器更新事件
1. PSC=1 -> PSC=4;使能自動重裝載寄存器
????????
2. PSC=2,ARR=36
????????
3. UG=1時,CK_CNT變化
????????CNT_INIT:用于強制復位計數器并更新相關寄存器值?(如預分頻器 Prescaler、自動重載寄存器 ARR 等)。
????????
1.2.2?基本定時器-兩種更新事件
1. 軟件更新事件
????????將 TIMx_EGR 寄存器的位UG置 1,產生更新事件后,硬件會自動將UG位清零。
2. 軟件更新事件
????????每來一個CK_CNT脈沖,TIMx_CNT的值就會遞增加1。當 TIMx_CNT 值 與 TIMx_ARR 的設定值相等時,TIMx_CNT 的值就會被自動清零并且會生成更新事件。
1.2.3?基本定時器-調試模式
????????當微控制器進入調試模式時(Cortex?-M4F 內核停止),TIMx計數器會根據DBG模塊中 的DBG_TIMx_STOP配置位選擇繼續正常工作或者停止工作。
????????
2.?基于HAL庫配置基本定時器外設
2.1?CubeMX配置基本定時器外設
2.1.1 基本定時器6參數初始化
?????????
2.1.2 使能定時器6-DMA通道(TIM_UPdate為DMA請求信號)
????????HAL庫HAL_TIM_Base_Start_DMA設計DMA的外設地址是TIM6-ARR。
? ? ? ? 注意:要使能DMA的循環傳輸模式(單次傳輸模式需要再DMA中斷里面再次添加HAL_TIM_Base_Start_DMA(且單詞傳輸模式下,HAL_TIM_Base_Start_DMA使能定時器只執行一個周期就不在運行))
????????
????????
2.1.3 定時器6-相關中斷
?????????
2.2?基本定時器外設初始化流程
????????
????????
????????
????????????????
????????
????????
????????
2.3?基本定時器寄存器基地址
????????
2.4?基本定時器寄存器
????????
2.5?基本定時器相關函數匯總
3. 基本定時器實踐
3.1 利用TIM6中斷方式修改TIM6的ARR值
- main函數
- 中斷回調函數
?3.2 利用TIM6-DMA方式修改TIM6的ARR值
- main函數
- 中斷回調函數
3.3 實踐結果
? ? ? ? 通過LED反轉查看定時器的ARR值
? ? ? ? 每次ARR加1000(0.1s)
????????
4.?本文的工程文件下載鏈接
工程Github下載鏈接:https://github.com/chipdynkid/MCU-DL-STM32
(國內)工程Gitcode下載鏈接https://gitcode.com/chipdynkid/MCU-DL-STM32