高级定时器(TIMER0)是四通道定时器,支持输入捕获和输出比较。可以产生 PWM 信号控制电机和电源管理。高级定时器含有一个 16 位无符号计数器。高级定时器是可编程的,可以被用来计数,其外部事件可以驱动其他定时器高级定时器包含了一个死区时间插入模块,非常适合电机控制。定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定时器的计数器一致地增加。
通用定时器 L0 是 4 通道定时器,支持输入捕获,输出比较,产生 PWM 信号控制电机和电源
管理。通用定时器 L0 计数器是 16 位无符号计数器。
通用定时器 L0 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器。
定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定
时器的计数器一致地增加。
通用定时器 L2 (TIMERx, x=13) 是单通道定时器,支持输入捕获和输出比较,产生 PWM 信号控制电机和电源管理。通用定时器 L2 含有一个 16 位无符号计数器。通用定时器 L2 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器
通用定时器 L3(TIMER14)是两通道定时器,支持输入捕获和输出比较。可以产生 PWM 信号控制电机和电源管理。通用定时器 L3 含有一个 16 位无符号计数器。
通用定时器 L3 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器
通用定时器 L3 包含了一个死区时间插入模块,非常适合电机控制。
定时器和定时器之间是相互独立,但是他们可以被同步在一起形成一个更大的定时器,这些定时器的计数器一致地增加。
通用定时器 L4(TIMER15/16)是单通道定时器,支持输入捕获和输出比较。可以产生 PWM
信号控制电机和电源管理。通用定时器 L4 含有一个 16 位无符号计数器。
通用定时器 L4 是可编程的,可以被用来计数,其外部事件可以驱动其他定时器
通用定时器 L4 包含了一个死区时间插入模块,非常适合电机控制。
总通道数: 1;
计数器宽度: 16位;
时钟源可选:内部时钟;
计数模式:向上计数;
可编程的预分频器: 16位,运行时可以被改变;
每个通道可配置:输入捕获模式,输出比较模式,可编程的PWM模式,单脉冲模式;
可编程的死区时间;
自动重装载功能;
可编程的计数器重复功能;
中止输入功能;
中断输出和DMA请求:更新事件,比较/捕获事件和中止事件;
基本定时器(TIMER5) 包含一个无符号 16 位计数器。可以被用作通用定时器和为 DAC (数字到模拟转换器) 提供时钟。基本定时器可以配置产生 DMA 请求, TRGO 触发连接到 DAC。
计数器宽度: 16位;
时钟源只有内部时钟;
计数模式:向上计数;
可编程的预分频器: 16位,运行时可以被改变;
自动重装载功能;
中断输出和DMA请求:更新事件;
这里我们使用 TIMER13 配置输出单通道 PWM (端口为 PA7)
pwm.h 文件
#ifndef _PWM_H_
#define _PWM_H_
#include "gd32f3x0.h"
void HW_PWMInit(void);
#endif
pwm.c 文件
#include "pwm.h"
void HW_PWMInit(void)
{
//其中PA7 和 PB1 具有 TIMER13 的通道0 功能
timer_parameter_struct Timer_ParamType;
timer_oc_parameter_struct Timer_OC_ParamType;
rcu_periph_clock_enable(RCU_GPIOA);//启用外设时钟功能
rcu_periph_clock_enable(RCU_TIMER13);
gpio_af_set(GPIOA,GPIO_AF_4,GPIO_PIN_7);//端口复用为TIMER13_CH0模式
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_7);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
gpio_bit_set(GPIOA, GPIO_PIN_7);
timer_internal_clock_config(TIMER13);
timer_deinit(TIMER13);
timer_channel_output_mode_config(TIMER13,TIMER_CH_0,TIMER_OC_MODE_PWM0);
timer_auto_reload_shadow_enable(TIMER13);
Timer_OC_ParamType.ocidlestate = TIMER_OC_IDLE_STATE_HIGH;//空闲时通道输出极性
Timer_OC_ParamType.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;//空闲时互补通道输出极性
Timer_OC_ParamType.ocnpolarity = TIMER_OCN_POLARITY_HIGH;//互补通道输出极性
Timer_OC_ParamType.ocpolarity = TIMER_OC_POLARITY_HIGH;//通道输出极性
Timer_OC_ParamType.outputnstate = TIMER_CCXN_DISABLE;//禁用互补通道输出
Timer_OC_ParamType.outputstate = TIMER_CCX_ENABLE;//使能通道输出
timer_channel_output_config(TIMER13,TIMER_CH_0,&Timer_OC_ParamType);
Timer_ParamType.alignedmode = TIMER_COUNTER_EDGE;//配置为边沿对其模式
Timer_ParamType.clockdivision = TIMER_CKDIV_DIV2;//配置死区时间和采样时钟(DTS)之间的分频系数
Timer_ParamType.counterdirection = TIMER_COUNTER_UP;//配置计数方向为向上计数
Timer_ParamType.period = 1000-1;//周期
Timer_ParamType.prescaler = 72-1;//预分频
Timer_ParamType.repetitioncounter = 1;
timer_init(TIMER13,&Timer_ParamType);
timer_channel_output_pulse_value_config(TIMER13, TIMER_CH_0, 500-1);//比较寄存器的数值
timer_enable(TIMER13);
}
PWM 计数频率:72MHz/Timer_ParamType.prescaler = 1MHz
PWM 周期:1MHz/Timer_ParamType.period = 1KHz
PWM 占空比:比较寄存器的值/Timer_ParamType.period = 50%
原作者:Stark_GS
更多回帖