有小伙伴反饋GD32 Timer定時器的周期時間不知如何計算,今天就來安排。
我們分成兩個系列來講解——GD32F30x和GD32F4xx系列。
一、GD32F30x系列
要想計算Timer的周期時間,首先要知道Timer的時鐘頻率,看時鐘頻率當然就要看時鐘樹啦,在時鐘樹的右下方就標注了Timer的時鐘頻率。
我們把圖放大,可以看到Timer1,2,3,4,5,6,11,12,13的時鐘源來自于CK_APB1,Timer0,7,8,9,10來自于CK_APB2。而CK_APB1和CK_APB2最高的頻率為60M和120M,那這兩類Timer的時鐘頻率是不是就是60M和120M呢?
答案是否定的。我們來看下圖方框中的提示,方框1中寫到,如果APB1的分頻系數(shù)為1的話,這些Timer的頻率就等于CK_APB1,如果APB1的分配系數(shù)不為1,則Timer的頻率等于CK_APB1*2。方框2中的內(nèi)容和方框1中相同,就不再贅述。
那么APB1和APB2的分頻系數(shù)在哪里設置的呢,答案就是——在系統(tǒng)時鐘配置中,也就是SystemInit函數(shù)中調(diào)用的system_clock_config函數(shù)。通常我們設置系統(tǒng)時鐘和AHB時鐘為120M,設置APB1分頻系數(shù)為2,即APB1時鐘為AHB時鐘的二分之一60M;設置APB2分頻系數(shù)為1,即APB2時鐘等于AHB時鐘120M。
好了,知道以上知識點我們就可以算出Timer的時鐘頻率了。舉個例子,我們設置AHB時鐘為120M,APB1分頻系數(shù)為2,我們來算下Timer1的頻率。首先,算出CK_APB1=AHB時鐘/2 = 60M,其次,由于APB1分頻系數(shù)不等于1,所以CK_Timer1=CK_APB1*2 = 60M*2 = 120M。
算出Timer的時鐘頻率后,我們看下Timer最基礎的配置代碼:
有兩個和周期時間相關的參數(shù):
其一為prescaler,即Timer的分頻系數(shù),該分頻系數(shù)將Timer頻率進行分頻后給到計數(shù)器時鐘,計算公式為:計數(shù)器時鐘頻率 = CK_TIMER/(prescaler+1),故圖中計數(shù)器時鐘頻率為120M/12000 = 10KHz,即每100us,計時器進行一次計數(shù)。
其二為period,即周期值,也叫作重載值,在邊沿計數(shù)模式下,計數(shù)器計重載值個數(shù)所用的時間,稱為一個周期時間,計算公式為:周期時間 = (period+1)/計數(shù)器時鐘頻率;而在中央計數(shù)模式下,計數(shù)器計數(shù)重載值*2個數(shù)所用的時間,稱為一個周期時間,計算公式為:周期時間 = (period+1)*2/計數(shù)器時鐘頻率。故圖中周期時間為160/10K = 16ms。
上面講的是計算過程和原理,下面給出周期時間計算總公式:
1、邊沿計數(shù)模式下的計算公式:
(prescaler+1)*(period+1)/CK_TIMER,其中CK_TIMER根據(jù)APB1和APB2的分頻系數(shù)決定
2、中央計數(shù)模式下的計數(shù)公式:
(prescaler+1)*(period+1)*2/CK_TIMER,其中CK_TIMER根據(jù)APB1和APB2的分頻系數(shù)決定
二、GD32F4xx系列
實際上GD32F4xx系列的周期時間計算公式和GD32F30x的相同,不同的點在于CK_TIMER的計算公式,照例看下GD32F4xx的時鐘樹:
可以看到CK_TIMER可以是APB時鐘乘以1、乘以2或乘以4,那具體是乘以幾呢?這個是根據(jù)時鐘配置寄存器 1(RCU_CFG1) 中的第24位TIMERSEL來決定的:
GD32F4xx用戶手冊中對這一位描述的非常清晰,這里就不再贅述了。
好了,通過本期講解,相信小伙伴們就可以輕松計算出Timer的周期時間啦。
-
單片機
+關注
關注
6026文章
44454瀏覽量
630835 -
嵌入式
+關注
關注
5052文章
18910瀏覽量
300746 -
定時器
+關注
關注
23文章
3227瀏覽量
114146 -
Timer
+關注
關注
1文章
63瀏覽量
12757 -
GD32
+關注
關注
7文章
403瀏覽量
24049
發(fā)布評論請先 登錄
相關推薦
評論