GD32 Timr定時器看起來比較復雜啊。一看GD32E10x 的SPEC:一個高級定時器,三個通用定時器,還有一個基本定時器。
項目上想用來做分時處理程序都不知道用哪個?
就用通用的定時器 timer1
一起看下時鐘樹,如下圖所示:

TIMER1的時鐘是CK_TIMER1,要提供CK_TIMER1需要TIMER1 enable并且需要提供具體的時鐘
具體的時鐘
if(APB1 prescale = 1 ) x 1 else x 2
我們的CK_SYS時鐘(系統時鐘)經過Prescaler之后最大頻率是CK_AHB(120MHz)
然后經過預分頻,APB1頻率最大到60MHz,如果預分頻系數是1的話,則提供到TIMER的頻率是x2。
也就是60*2 = 120MHz
所以TIMER1的時鐘就用基于120MHz去分頻
我想每200ms 獲取一次timer1的中斷。改怎么辦?
有兩個參數可以一起去實現這個功能。
1個事TIMER的prescale 可以先把這個120MHz分頻,比如我分頻為1MHz,那么prescale就是120,不過這里timer_initpara.prescaler不能設置為120,要設置為119.
因為具體的計算方式是120MHz/(prescaler+1)
這樣拿到了1MHz的clock.那獲取每200ms的中斷再要做什么呢?
這里有reload 參數timer_initpara.period ,官方成為“TIMER counter auto reload register”
這個reload參數意思是:當計數計到period參數的時候就做一次更新,從0開始重新計算,中斷就產生一次。
前面1MHz 意思是1s 可以計數1000 000次。也就是1ms 可以計數1000次,我需要200ms更新一次,那就說我需要計數 200 * 1000,所以reload就是200 * 1000 = 200000
timer_initpara.period 就是寫為200000
審核編輯:符乾江
-
定時器
+關注
關注
23文章
3298瀏覽量
118900 -
時鐘樹
+關注
關注
0文章
56瀏覽量
11040
發布評論請先 登錄
GD32VF103使用核內部timer定時器實現延時函數,為什么系統時鐘要除以4?
為什么在rt-thread studio創建不了gd32的項目?
【GD32 MCU入門教程】GD32 MCU GPIO 結構與使用注意事項

【GD32 MCU 入門教程】GD32 MCU 常見外設介紹(14)RTC 模塊介紹

GD32 MCU 入門教程】GD32 MCU 常見外設介紹(12)FMC 模塊介紹

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(3)使用 Embedded Builder 開發 GD32

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(2)使用 IAR 開發 GD32

【GD32 MCU 入門教程】一、GD32 MCU 開發環境搭建(1)使用Keil開發GD32

評論