GD32 Timer定时器周期时间计算公式

描述

有小伙伴反馈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的分频系数为1的话,这些Timer的频率就等于CK_APB1,如果APB1的分配系数不为1,则Timer的频率等于CK_APB1*2。方框2中的内容和方框1中相同,就不再赘述。

嵌入式

 

那么APB1和APB2的分频系数在哪里设置的呢,答案就是——在系统时钟配置中,也就是SystemInit函数中调用的system_clock_config函数。通常我们设置系统时钟和AHB时钟为120M,设置APB1分频系数为2,即APB1时钟为AHB时钟的二分之一60M;设置APB2分频系数为1,即APB2时钟等于AHB时钟120M。

嵌入式

 

好了,知道以上知识点我们就可以算出Timer的时钟频率了。举个例子,我们设置AHB时钟为120M,APB1分频系数为2,我们来算下Timer1的频率。首先,算出CK_APB1=AHB时钟/2 = 60M,其次,由于APB1分频系数不等于1,所以CK_Timer1=CK_APB1*2 = 60M*2 = 120M。

嵌入式

 

算出Timer的时钟频率后,我们看下Timer最基础的配置代码:

嵌入式

 

有两个和周期时间相关的参数:

其一为prescaler,即Timer的分频系数,该分频系数将Timer频率进行分频后给到计数器时钟,计算公式为:计数器时钟频率 = CK_TIMER/(prescaler+1),故图中计数器时钟频率为120M/12000 = 10KHz,即每100us,计时器进行一次计数。

其二为period,即周期值,也叫作重载值,在边沿计数模式下,计数器计重载值个数所用的时间,称为一个周期时间,计算公式为:周期时间 = (period+1)/计数器时钟频率;而在中央计数模式下,计数器计数重载值*2个数所用的时间,称为一个周期时间,计算公式为:周期时间 = (period+1)*2/计数器时钟频率。故图中周期时间为160/10K = 16ms。

上面讲的是计算过程和原理,下面给出周期时间计算总公式:

1、边沿计数模式下的计算公式:

(prescaler+1)*(period+1)/CK_TIMER,其中CK_TIMER根据APB1和APB2的分频系数决定

2、中央计数模式下的计数公式:

(prescaler+1)*(period+1)*2/CK_TIMER,其中CK_TIMER根据APB1和APB2的分频系数决定

二、GD32F4xx系列

实际上GD32F4xx系列的周期时间计算公式和GD32F30x的相同,不同的点在于CK_TIMER的计算公式,照例看下GD32F4xx的时钟树:

嵌入式

 

可以看到CK_TIMER可以是APB时钟乘以1、乘以2或乘以4,那具体是乘以几呢?这个是根据时钟配置寄存器 1(RCU_CFG1) 中的第24位TIMERSEL来决定的:

嵌入式

 

嵌入式

 

GD32F4xx用户手册中对这一位描述的非常清晰,这里就不再赘述了。

好了,通过本期讲解,相信小伙伴们就可以轻松计算出Timer的周期时间啦。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分