STM32 的定時器功能十分強(qiáng)大,有TIME1 和TIME8 等高級定時器,也有 TIME2~TIME5 等通用定時器,還有 TIME6 和TIME7 等基本定時器和看門狗定時器以及系統(tǒng)時基定時器。
基本定時器(TIM6,TIM7)的主要功能: 只有最基本的定時功能,基本定時器TIM6和TIM7各包含一個16位自動裝載計數(shù)器,由各自的可編程預(yù)分頻器驅(qū)動。
通用定時器(TIM2~TIM5)的主要功能: 除了基本的定時器的功能外,還具有測量輸入信號的脈沖長度( 輸入捕獲) 或者產(chǎn)生輸出波形( 輸出比較和PWM)。
高級定時器(TIM1,TIM8)的主要功能: 高級定時器不但具有基本,通用定時器的所有的功能,還具有控制交直流電動機(jī)所有的功能,你比如它可以輸出6路互補(bǔ)帶死區(qū)的信號,剎車功能等等。
兩個看門狗定時器:獨立看門狗、窗口看門狗。
系統(tǒng)時基定時器:SysTick,24位遞減計數(shù)器,自動重加載,常用于產(chǎn)生延時ms級、us級。
1、 STM32 通用定時器簡介
STM32 的通用定時器是一個通過可編程預(yù)分頻器(PSC)驅(qū)動的 16 位自動裝載計數(shù)器(CNT)構(gòu)成。STM32 的通用定時器可以被用于:測量輸入信號的脈沖長度(輸入捕獲)或者產(chǎn)生輸出波形(輸出比較和 PWM)等。STM32 的每個通用定時器都是完全獨立的,沒有互相共享的任何資源。
STM32 的通用定時器 TIMx (TIM2、TIM3、TIM4 和 TIM5) 功能包括:
1)16 位向上、向下、向上/向下自動裝載計數(shù)器(TIMx_CNT)。
2)16 位可編程(可以實時修改)預(yù)分頻器(TIMx_PSC),計數(shù)器時鐘頻率的分頻系數(shù)為 1~65535 之間的任意數(shù)值。
3)4 個獨立通道(TIMx_CH1~4),這些通道可以用來作為:
A.輸入捕獲
B.輸出比較
C.PWM 生成(邊緣或中間對齊模式)
D.單脈沖模式輸出
4)可使用外部信號(TIMx_ETR)控制定時器和定時器互連(可以用 1 個定時器控制另外一個定時器)的同步電路。
5)如下事件發(fā)生時產(chǎn)生中斷/DMA:
A.更新:計數(shù)器向上溢出/向下溢出,計數(shù)器初始化(通過軟件或者內(nèi)部/外部觸發(fā))
B.觸發(fā)事件(計數(shù)器啟動、停止、初始化或者由內(nèi)部/外部觸發(fā)計數(shù))
C.輸入捕獲
D.輸出比較
F.觸發(fā)輸入作為外部時鐘或者按周期的電流管理
2、stm32通用定時器的寄存器
1)自動重裝載寄存器(TIMx_ARR),該寄存器在物理上實際對應(yīng)著 2 個寄存器。
一個是程序員可以直接操作的,另外一個是程序員看不到的,這個看不到的寄存器在《STM32參考手冊》里面被叫做影子寄存器。事實上真正起作用的是影子寄存器。根據(jù) TIMx_CR1 寄存器中 APRE 位的設(shè)置:APRE=0 時,預(yù)裝載寄存器的內(nèi)容可以隨時傳送到影子寄存器,此時 2者是連通的;而 APRE=1 時,在每一次更新事件(UEV)時,才把預(yù)裝在寄存器的內(nèi)容傳送到影子寄存器。
2)預(yù)分頻寄存器(TIMx_PSC),該寄存器用設(shè)置對時鐘進(jìn)行分頻,然后提供給計數(shù)器,作為計數(shù)器的時鐘。
定時器的時鐘來源有 4 個:
a )內(nèi)部時鐘(CK_INT)
b )外部時鐘模式 1:外部輸入腳(TIx)
c )外部時鐘模式 2:外部觸發(fā)輸入(ETR)
d )內(nèi)部觸發(fā)輸入(ITRx):使用 A 定時器作為 B 定時器的預(yù)分頻器(A 為 B 提供時鐘)。
這些時鐘,具體選擇哪個可以通過 TIMx_SMCR 寄存器的相關(guān)位來設(shè)置。這里的 CK_INT時鐘是從 APB1 倍頻的來的,除非 APB1 的時鐘分頻數(shù)設(shè)置為 1, 否則通用定時器 TIMx 的時鐘是 APB1 時鐘的 2 倍,當(dāng) APB1 的時鐘不分頻的時候,通用定時器 TIMx 的時鐘就等于 APB1的時鐘。這里還要注意的就是高級定時器的時鐘不是來自 APB1,而是來自 APB2 的。
3)計數(shù)器當(dāng)前值寄存器(TIMx_CNT),該寄存器是定時器的計數(shù)器,該寄存器存儲了當(dāng)前定時器的計數(shù)值。
4)狀態(tài)寄存器(TIMx_SR),該寄存器用來標(biāo)記當(dāng)前與定時器相關(guān)的各種事件/中斷是否發(fā)生。
5 )DMA/ 中斷使能寄存器(TIMx_DIER)
3、stm32通用定時器常用庫函數(shù)
定時器參數(shù)初始化:
void TIM_TimeBaseInit(TIM_TypeDef* TIMx,TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);
定時器使能函數(shù):
void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalStateNewState)
定時器中斷使能函數(shù):
void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalStateNewState);
狀態(tài)標(biāo)志位獲取和清除
FlagStatusTIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
ITStatusTIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
評論