以TIME3為例總結定時計數器的基本用法

2021-10-03 04:51:38 字數 2839 閱讀 9504

stm32共有8個定時計數器,其中time1和time8是高階定時器,time2~time5是通用定時器,time6和time7是基本定時器。以time3為例總結定時計數器的基本用法。

1.tim3的配置步驟

①tim3時鐘使能

apb1外設復位暫存器 (rcc_apb1rstr) 

置1開啟。清0關閉。

第一位對tim3的時鐘使能

eg:rcc->apb1enr|=1<<1;  //使能tim3時鐘

apb2外設時鐘使能暫存器(rcc_apb2enr)

②設定tim3_arr和tim3_psc的值

通過這兩個暫存器來設定自動重灌的值以及分頻係數。

自動重裝載暫存器(timx_arr)

預分頻器(timx_psc)

③設定tim3_dier允許更新中斷

中斷使能暫存器(timx_dier)

0:禁止更新中斷。1:允許更新中斷

因為要使用tim3的更新中斷,所以設定dier的uie為為1,使能更新中斷。

eg:  tim3->dier|=1<<0; //允許更新中斷

④允許tim3工作

控制暫存器1(timx_cr1)

cen:使能計數器 位0 0:禁止計數器; 1:使能計數器。

eg:  tim3->cr1|=0x01; //使能定時器3

或   tim3->cr1|=1<<0;

⑤tim3中斷分組設定

直接呼叫my_nvic_init()函式

eg:my_nvic_init(1,3,tim3_irqchannel,2);//搶占1,子優先順序3,組2

⑥編寫中斷服務函式

狀態暫存器(timx_sr)

eg:  if(tim3->sr&0x0001)//溢位中斷

編寫定時器中斷服務函式,從而處理定時器產生的相關中斷。在中斷產生後,通過狀態暫存器的值來判斷此次產生的中斷屬於什麼型別。然後執行相關的操作,這裡使用的是更新(溢位)中斷,所以在狀態暫存器sr的最低位。處理完中斷之後應該向tim3_sr的最低位寫0,來清除該中斷標誌。

eg://定時器3中斷服務程式

void tim3_irqhandler(void) //tim3_int_init(5000,7199);  //10khz的計數頻率,計數到5000為500ms

//500ms中斷一次

tim3->sr&=~(1<<0);  //清除中斷標誌位

}2.關於溢位事件的計算

因為stm32_clock_init函式裡面已經初始化apb1的時鐘為2分頻,所以apb1的時鐘是32mhz(系統時鐘72mhz)。

從stm32內部時鐘樹圖可知:當apb1的時鐘分頻數為1時,tim27的時鐘為apb1的時鐘;而如果apb1的時鐘分頻數不為1,那麼tim27的時鐘頻率是apb1時鐘的兩倍。因此tim3的時鐘為72mhz,再根據arr和psc即可計算中斷時間

tout = ( (arr+1) * (psc+1) ) / tclk

其中,tclk為tim3的輸入時鐘頻率(單位:mhz)。tout為tim3的溢位時間(單位:us)。

eg:void tim3_int_init(u16 arr,u16 psc)----->tim3_int_init(5000,7199);//10khz的計數頻率,計數到5000為500ms

關於定時器中斷的應用

timer.c

//定時器3中斷服務程式

void

tim3_irqhandler

(void

)//tim3_int_init(5000,7199);//10khz的計數頻率,計數到5000為500ms

//500ms中斷一次

tim3->sr&=~

(1<<0)

;//清除中斷標誌位

}//通用定時器中斷初始化

//這裡時鐘選擇為apb1的2倍,而apb1為36m

//arr:自動重灌值。

//psc:時鐘預分頻數

//這裡使用的是定時器3!

void

tim3_int_init

(u16 arr,u16 psc)

main.c

intmain

(void

)}

zigbee學習之路 六 Time3 查詢方式

一.前言 通過上次的學習,相信大家對cc2530微控制器的定時器的使用有了一定的了解,今天我們來介紹定時器3的使用,為什麼介紹定時器3呢,因為它和定時器4功能是差不多的,所以學會定時器3,就基本掌握了cc2530定時器的使用。二.原理分析 我們要使用定時器3,就要先配置控制它的暫存器t3ctl,下面...

BTARN 接收訊息流以3A7為例

rnmimedecoder mime 預處理器 解碼器 對rnif2.0e服務內容及附件 如有 進行解密。對於rnif1.1,對負載末尾的八字節和分離的簽名頭進行處理。rndasm 拆裝器,基於xmldesimber 1 如果某個傳入文件含有 doctype 頭,則本元件根據該頭生成乙個命名空間,然...

實習點滴(3) 以「詞性標註」為例理解CRF演算法

看了crf相關的東西好幾天了,現在也過來總結總結。我本人喜歡以講故事的方式闡述一些東西,純理論總是很抽象,而且很容易讓人失去耐心。那就以 詞性標註 為切入點,去理解一下crf conditional random field 條件隨機場的演算法原理 難免有不對或者不全的地方,持續更新 crf con...