打印
[研电赛技术支持]

GD32定时器相关配置和问题

[复制链接]
2125|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
晓伍|  楼主 | 2025-3-10 14:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
定时器种类
GD32E230C一共有7个定时器,可以分为六种类型:

高级定时器0
通用定时器(L0)2
通用定时器(L2)13
通用定时器(L3)14
通用定时器(L4)15/16
基本定时器5。

PWM配置
时钟使能与复位
rcu_periph_clock_enable(RCU_TIMER0);
timer_deinit(TIMER0);


RCU时钟使能:开启TIMER0的时钟,所有外设需先使能时钟才能使用。

定时器复位:将TIMER0寄存器恢复默认值,确保配置从初始状态开始

定时器基础配置
timer_initpara.prescaler = 719;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 49999;
timer_initpara.clockdivision = TIMER_CKDIV_DIV1;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER0, &timer_initpara);


预分频器(Prescaler):719表示将系统时钟分频为720分频(720 = 719+1)。假设系统时钟为72MHz,则定时器时钟为72MHz / 720 = 100kHz。

计数模式:边缘对齐(无特殊对齐),向上计数。

周期(Period):自动重装载值设为49999,定时器每计满50000(49999+1)个周期触发更新。结合100kHz时钟,周期为50000 / 100kHz = 0.5秒。

时钟分频(Clock Division):不分频(TIMER_CKDIV_DIV1),用于滤波器,不影响频率。

重复计数器:0表示不重复(高级定时器功能)。

PWM输出通道配置
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
timer_channel_output_config(TIMER0, TIMER_CH_1, &timer_ocintpara);


输出极性:高电平有效(PWM信号高电平为有效状态)。
输出使能:启用TIMER0通道1的输出功能。

PWM参数设置
timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_1, 24999);
timer_channel_output_mode_config(TIMER0, TIMER_CH_1, TIMER_OC_MODE_PWM0);


占空比设置:比较寄存器值设为24999。在向上计数模式下,当计数值小于24999时输出有效电平(高电平),之后无效(低电平),占空比为24999 / 50000 = 50%。

PWM模式:选择PWM模式0,定义有效电平在计数值小于比较值时有效。

高级配置与启动定时器
timer_primary_output_config(TIMER0, ENABLE);
timer_auto_reload_shadow_enable(TIMER0);
timer_enable(TIMER0);


主输出使能:针对高级定时器需启用主输出(TIMER0可能被误配置,需确认是否支持该功能)。
自动重装载预装载:允许ARR寄存器缓冲,避免运行时修改值导致异常。
启动定时器:使能TIMER0开始计数并输出PWM。

关键参数计算
PWM频率:100kHz / 50000 = 2Hz(周期0.5秒)。
占空比:50%(24999/50000)。

需要的参数
引脚和定时器对应,即引脚能够复用成对应定时器的通道口
引脚功能复用对应的复用代码,是AF0还是AF1等
高级定时器需要增加一行 (主输出配置:timer_primary_output_config)
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_51198729/article/details/145894461

使用特权

评论回复
沙发
tpgf| | 2025-4-9 13:27 | 只看该作者
要使用定时器,首先需要开启其对应的时钟

使用特权

评论回复
板凳
heimaojingzhang| | 2025-4-13 08:07 | 只看该作者
预分频系数用于调整进入定时器的时钟频率。例如,如果系统时钟频率较高,而希望定时器的计数频率较低,可以通过设置较大的预分频系数来实现

使用特权

评论回复
地板
keaibukelian| | 2025-4-13 10:43 | 只看该作者
对定时器进行复位操作,将其寄存器恢复到初始状态,为后续的配置做准备

使用特权

评论回复
5
paotangsan| | 2025-4-13 13:29 | 只看该作者
预分频系数用于调整进入定时器的时钟频率。例如,如果系统时钟频率较高,而希望定时器的计数频率较低,可以通过设置较大的预分频系数来实现

使用特权

评论回复
6
renzheshengui| | 2025-4-13 15:52 | 只看该作者
定时器有多种计数模式可供选择,如向上计数模式、向下计数模式等。常见的是向上计数模式,即计数器从0开始递增

使用特权

评论回复
7
wowu| | 2025-4-13 18:29 | 只看该作者
如果需要在定时器计数到达自动重装载值时执行特定的操作,可以使能定时器更新中断

使用特权

评论回复
8
t1ngus4| | 2025-5-7 14:27 | 只看该作者
这个定时器一般是需要啥样的就用啥样的呗

使用特权

评论回复
9
ex7s4| | 2025-5-7 15:37 | 只看该作者
一般就是用普通定时器计时或者PWM吧

使用特权

评论回复
10
zhizia4f| | 2025-5-7 16:56 | 只看该作者
感觉就是你想用啥定时器的功能,就正常去配置就好了

使用特权

评论回复
11
q1ngt12| | 2025-5-7 18:09 | 只看该作者
话说,GD没有关于配置底层的软件吗?

使用特权

评论回复
12
suw12q| | 2025-5-7 19:15 | 只看该作者
GD32定时器是GD32系列微控制器中重要的外设模块,用于实现定时、计数、PWM输出、输入捕获等功能。

使用特权

评论回复
13
lamanius| | 2025-5-7 20:21 | 只看该作者
定时器的时钟频率由系统时钟和预分频器共同决定。例如,系统时钟为72MHz,预分频器为719时,定时器时钟为100kHz。

使用特权

评论回复
14
q1d0mnx| | 2025-5-7 22:27 | 只看该作者
自动重载值决定了定时器的计数周期。例如,自动重载值为49999时,定时器周期为50000个计数周期,结合100kHz时钟,周期为0.5秒。

使用特权

评论回复
15
p0gon9y| | 2025-5-8 11:26 | 只看该作者
在中断服务程序中,务必清除中断标志位,避免重复进入中断。

使用特权

评论回复
16
tax2r6c| | 2025-5-8 11:53 | 只看该作者
GD32定时器功能强大,但配置复杂,需注意时钟频率、分频、自动重载值、中断优先级等参数的设置。

使用特权

评论回复
17
w2nme1ai7| | 2025-5-8 13:28 | 只看该作者
写的还不错,确实定时器模式要清楚,不然都不知道怎么使用

使用特权

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

本版积分规则

80

主题

4262

帖子

1

粉丝