首发极术社区。如对兆易创新GD32F310 MCU感兴趣,欢迎添加微信 aijishu2020 加入GD32技术讨论群。
高级定时器(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 包含了一个死区时间插入模块,非常适合电机控制。
基本定时器(TIMER5) 包含一个无符号 16 位计数器。可以被用作通用定时器和为 DAC (数字到模拟转换器) 提供时钟。基本定时器可以配置产生 DMA 请求, TRGO 触发连接到 DAC。
这里我们使用 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%