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...