打印

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

[复制链接]
881|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
有小伙伴反馈GD32 Timer定时器的周期时间不知如何计算,今天就来安排。
我们分成两个系列来讲解——GD32F30xGD32F4xx系列。
一、GD32F30x系列
要想计算Timer的周期时间,首先要知道Timer的时钟频率,看时钟频率当然就要看时钟树啦,在时钟树的右下方就标注了Timer的时钟频率。
我们把图放大,可以看到Timer1,2,3,4,5,6,11,12,13的时钟源来自于CK_APB1Timer0,7,8,9,10来自于CK_APB2。而CK_APB1CK_APB2最高的频率为60M120M,那这两类Timer的时钟频率是不是就是60M120M呢?
答案是否定的。我们来看下图方框中的提示,方框1中写到,如果APB1的分频系数为1的话,这些Timer的频率就等于CK_APB1,如果APB1的分配系数不为1,则Timer的频率等于CK_APB1*2。方框2中的内容和方框1中相同,就不再赘述。
那么APB1APB2的分频系数在哪里设置的呢,答案就是——在系统时钟配置中,也就是SystemInit函数中调用的system_clock_config函数。通常我们设置系统时钟和AHB时钟为120M,设置APB1分频系数为2,即APB1时钟为AHB时钟的二分之一60M;设置APB2分频系数为1,即APB2时钟等于AHB时钟120M
好了,知道以上知识点我们就可以算出Timer的时钟频率了。举个例子,我们设置AHB时钟为120MAPB1分频系数为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根据APB1APB2的分频系数决定
2、中央计数模式下的计数公式:
prescaler+1*period+1*2/CK_TIMER,其中CK_TIMER根据APB1APB2的分频系数决定
二、GD32F4xx系列
实际上GD32F4xx系列的周期时间计算公式和GD32F30x的相同,不同的点在于CK_TIMER的计算公式,照例看下GD32F4xx的时钟树:
可以看到CK_TIMER可以是APB时钟乘以1、乘以2或乘以4,那具体是乘以几呢?这个是根据时钟配置寄存器 1RCU_CFG1) 中的第24TIMERSEL来决定的:
GD32F4xx用户手册中对这一位描述的非常清晰,这里就不再赘述了。
好了,通过本期讲解,相信小伙伴们就可以轻松计算出Timer的周期时间啦。

教程由GD32 MCU方案商聚沃科技原创发布,了解更多GD32 MCU教程,关注聚沃科技官网,GD32MCU技术交流群:859440462



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

170

主题

190

帖子

9

粉丝