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