GD32 Timr定時器看起來比較復雜啊。一看GD32E10x 的SPEC:一個高級定時器,三個通用定時器,還有一個基本定時器。
項目上想用來做分時處理程序都不知道用哪個?
就用通用的定時器 timer1
一起看下時鐘樹,如下圖所示:
GD32時鐘樹部分硬件展示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文章
3368瀏覽量
123591 -
時鐘樹
+關注
關注
0文章
58瀏覽量
11253
發布評論請先 登錄
兆易創新正式推出GD32 Embedded AI平臺
DS125DF1610:高速多通道重定時器的詳細解析與應用指南
實現一個嵌入式的軟件定時器
PWM、定時器、SysTick 區別及應用場景
RVMCU課堂「21」: 手把手教你玩轉RVSTAR—看門狗定時器篇
SysTick系統滴答定時器簡介
GD32的串口DMA收發數據失敗怎么解決?
rt-thread studio中創建不了gd32項目是怎么回事?
MCU定時器/計數器
兆易創新GD32 MCU閃耀2025慕尼黑上海電子展
TPS3435 納米靜態電流精密超時看門狗定時器數據手冊
GD32對Timer定時器原理的詳細講解
評論