STM32F103定時器配置

2021-09-29 01:08:27 字數 2562 閱讀 8182

##一、什麼是定時器

定時器,顧名思義,就是用於定時或計數,它其實就是乙個加1計數器。

##二、了解stm32f103定時器

stm32通用暫存器有tim2、tim3、tim4、tim5。

功能包括:(1)16位向上、向下、向上/向下自動裝載計數器(timx_cnt)。

(2)16位可程式設計預分頻器(timx_psc),計數器的時鐘頻率的分頻係數為1~65535之間的任意數值。

總的來說,配置stm32定時器功能需要三步。首先是配置rcc/gpio等裝置,其次是配置timx,最後是等待中斷服務。

程式設計中需要注意到的要點如下:

1.配置rcc暫存器組,使用pll輸出72mhz時鐘作為主時鐘,並配置pclk1時鐘作為主時鐘2分頻;

2.配置gpiox的相關引腳;

3.配置timx時基單元;

4.配置timx的4個通道,設定為向上計數模式,使能比較匹配功能,並禁止預裝暫存器;

5.配置nvic使能timx中斷。

##三、相關暫存器

想要使用定時器功能,首先要使能定時器。使能定時器主要用到控制暫存器1(timx_cr1),此處重點關注第一位,這一位是計數器使能位,給此位設1,使能計數器。

定時器的使用,很多情況下都伴隨著中斷,因此下面要重點關注的是dma/中斷使能暫存器(timx_dier)。同樣的,只用關注第一位。該位為更新中斷允許位,當該位設定為1時,將允許由於更新事件所產生的中斷。

接下來就要確定定時器的時間。與2440一樣,定時器的定時是通過頻率計算出來的。這裡要用到預分頻暫存器(timx_psc)。該暫存器用於設定對時鐘進行分頻,然後提供給計數器,作為計數器的時鐘。

定時器的時鐘**有4個:

(1)內部時鐘(ck_int);

(2)外部時鐘模式1:外部輸入腳(tix);

(3)外部時鐘模式2:外部觸發輸入(etr);

(4)內部觸發輸入(itrx):使用a定時器作為b定時器的預分頻器(a為b提供時鐘)。

時鐘源的選擇,可以通過從模式暫存器(timx_smcr)的第3位來選擇。

下面是自動過載暫存器。自動裝載暫存器(timx_sr)是預先裝載的,寫或讀自動重裝載暫存器將訪問預裝載暫存器。

這裡需要注意,計數器的時鐘頻率通過apb1倍頻來的,在stm32中除非apb1的時鐘分頻係數設定為1,否則通用定時器timx的時鐘是apb1時鐘的2倍,當apb1的時鐘不分頻的時候,通用定時器timx的時鐘就等於apb1的時鐘。這裡需要注意的是高階定時器的時鐘來自apb2而非apb1。

通用定時器單次計數的時間為t=(x+1)/72mhz,其中x即為我們向timx_psc中填的值。

##四、配置函式

tim_timebaseinittypedef  tim_timebaseinitstructure;

tim_deinit(tim2);

tim_timebaseinitstructure.tim_prescaler = 0;

tim_timebaseinitstructure.tim_clockdivision = tim_ckd_div1;

tim_timebaseinitstructure.tim_countermode = tim_countermode_up;

tim_timebaseinitstructure.tim_period = 2000;

tim_timebaseinit(tim2, &tim_timebaseinitstructure);

tim_prescalerconfig(tim2, 36000 - 1, tim_pscreloadmode_immediate);

tim_arrpreloadconfig(tim2, disable);

tim_clearflag(tim2, tim_flag_update);

tim_itconfig(tim2, tim_it_update, enable);

tim_cmd(tim2, enable);

上面這部分是定時器配置詳細配置。

tim_prescaler代表分頻係數,此處為0;

tim_countermode代表計數,共有兩種計數方式,一種是向上計數tim_countermode_up,另一種是向下計數tim_countermode_down。這裡用的是向上計數方式;

tim_clockdivison代表時鐘分頻因子,這裡設定為tim_ckd_div1;

tim_period代表自動過載計數週期值,這裡設定為2000。

STM32F103內部定時器TIM

1 stm32f103內部定時器有哪些?stm32一共有8個通用16位timer,其中timer1和timer8是高階定時器,其它的timer2 timer7是普通定時器。此外還有乙個systick 系統滴答定時器 這個定時器通常在作業系統中作為系統的任務切換週期。還有乙個rtc,是乙個毫秒定時器,...

STM32F103常規定時器

首先非常感謝秉火和正點原子兩個團隊為我們提供學習stm32的豐富資料及詳細教程。為加深記憶,也方便同行新手們一同學習進步,略作整理,以備檢視,如有錯誤,歡迎指正,如有侵權,聯絡刪帖!定時器分類 stm32f1 系列微控制器中,除了互聯型的產品,都有 8 個定時器,分為2個基本定時器,4個通用定時器和...

STM32F103 滴答定時器定時不准

緣由 做了五片同樣的板子,功能是使用板子上的感測器採集資料後,利用stm32f103串列埠將資料傳輸出去,就其中一片板子資料傳輸比其他的慢,原本正常使用串列埠115200波特率傳輸一幀資料只需要1s多,而那塊板子傳輸資料得十幾秒。一開始用示波器對時鐘測量都是ok的,外部晶振也是8mhz起振。在看程式...