stm32學習(5)——通用定時器

今天來了解一下stm32中的通用定時器的定時中斷。

當然在接觸通用定時器之前,先來看一下stm32有哪些定時器:
在這裏插入圖片描述
以F103系列爲例,可以看到,stm32中有高級定時器,通用定時器以及基本定時器三種。其中應用的最廣泛的就是通用定時器,它可以滿足我們絕大部分所需要的定時器功能。

時鐘選擇

在這裏插入圖片描述
從圖中可以看出,通用定時器加上基本定時器(TIM2~TIM7)是有APB1上乘1倍或者乘2倍得來的。

時鐘計算方法

那麼通用定時器的時鐘頻率到底是多少呢?答案是72M。

看到藍色方框裏面寫的規則:TIM2,3,4,5,6,7,如果APB1預分頻=1,則x1輸出,否則x2輸出。

除非APB1的分頻係數是1,否則通用定時器的時鐘等於APB1時鐘的2倍。

默認調用SystemInit函數情況下:
SYSCLK=72M
AHB時鐘=72M
APB1時鐘=36M
所以APB1的分頻係數=AHB/APB1時鐘=2
所以,通用定時器時鐘CK_INT=2*36M=72M

計數器模式

向上計數模式:計數器從0計數到自動加載值(TIMx_ARR),然後重新從0開始計數並且產生一個計數器溢出事件
在這裏插入圖片描述

向下計數模式:計數器從自動裝入的值(TIMx_ARR)開始向下計數到0,然後從自動裝入的值重新開始,併產生一個計數器向下溢出事件
在這裏插入圖片描述

雙向計數模式:計數器從0開始計數到自動裝入的值-1,產生一個計數器溢出事件,然後向下計數到1並且產生一個計數器溢出事件;然後再從0開始重新計數
在這裏插入圖片描述

定時器中斷實現步驟

使能定時器時鐘

RCC_APB1PeriphClockCmd();

初始化定時器,配置ARR,PSC

TIM_TimeBaseInit();

開啓定時器中斷,配置NVIC

void TIM_ITConfig();
NVIC_Init();

使能定時器

TIM_Cmd();

編寫中斷服務函數

TIMx_IRQHandler();

最後在中斷服務函數中還要手動清除中斷標誌位

TIM_ClearITPendingBit();

中斷計時公式

Tout(溢出時間)=(ARR+1)(PSC+1)/Tclk
其中Tclk = 72M

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章