GD32 Timr定时器看起来比较复杂啊。一看GD32E10x 的SPEC:一个高级定时器,三个通用定时器,还有一个基本定时器。
项目上想用来做分时处理程序都不知道用哪个?
就用通用的定时器 timer1
一起看下时钟树,如下图所示:

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文章
3258浏览量
115855 -
时钟树
+关注
关注
0文章
55浏览量
10855
发布评论请先 登录
相关推荐
GD32VF103使用核内部timer定时器实现延时函数,为什么系统时钟要除以4?
为什么在rt-thread studio创建不了gd32的项目?
【GD32 MCU入门教程】GD32 MCU GPIO 结构与使用注意事项

【GD32 MCU 入门教程】GD32 MCU 常见外设介绍(14)RTC 模块介绍

GD32 MCU 入门教程】GD32 MCU 常见外设介绍(12)FMC 模块介绍

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(3)使用 Embedded Builder 开发 GD32

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(2)使用 IAR 开发 GD32

【GD32 MCU 入门教程】一、GD32 MCU 开发环境搭建(1)使用Keil开发GD32

评论