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