定时器种类 
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 
 
 |   
     
  
 |