GD32对Timer定时器原理的详细讲解-gd32f103

GD32 Timr定时器看起来比较复杂啊。一看GD32E10x 的SPEC:一个高级定时器,三个通用定时器,还有一个基本定时器。

项目上想用来做分时处理程序都不知道用哪个?

就用通用的定时器 timer1

一起看下时钟树,如下图所示:

GD32对Timer定时器原理的详细讲解-gd32f103GD32时钟树部分硬件展示

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

审核编辑:符乾江

免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:GD32对Timer定时器原理的详细讲解-gd32f103 https://www.yhzz.com.cn/a/8419.html

上一篇 2023-04-19
下一篇 2023-04-19

相关推荐

联系云恒

在线留言: 我要留言
客服热线:400-600-0310
工作时间:周一至周六,08:30-17:30,节假日休息。