pwm_drv.c
#include <stdio.h>
#include "gd32f30x.h"
#include "led_drv.h"
static void GpioInit(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_10MHZ,GPIO_PIN_8);
}
static void TimerInit()
{
timer_parameter_struct timerInitPara;
timer_struct_para_init(&timerInitPara);//给定时器结构体赋初值
/*使能定时器时钟*/
rcu_periph_clock_enable(RCU_TIMER0);
/*复位定时器*/
timer_deinit(TIMER0);
/*设置预分频值*/
timerInitPara.prescaler = 120 - 1;//时钟频率为1Mhz,周期为1us
/*设置自动重装载值*/
timerInitPara.period = 500 - 1;//2khz频率
/*初始化定时器*/
timer_init(TIMER0,&timerInitPara);//给定时器结构体赋初值
timer_oc_parameter_struct ocInitPara;
timer_channel_output_struct_para_init(&ocInitPara);//给pwm输出结构体赋初值
/*设置通道为输出功能*/
ocInitPara.outputstate = TIMER_CCX_ENABLE;
/*设置通道输出极性*/
ocInitPara.ocnpolarity = TIMER_OC_POLARITY_HIGH;
/*初始化PWM通道*/
timer_channel_output_config(TIMER0,TIMER_CH_0,&ocInitPara);
/*设置占空比*/
timer_channel_output_pulse_value_config(TIMER0,TIMER_CH_0,250-1);
/*设置通道输出PWM模式*/
timer_channel_output_mode_config(TIMER0,TIMER_CH_0,TIMER_OC_MODE_PWM0);
timer_primary_output_config(TIMER0,ENABLE);//高级定时器0/7要配置互补通道保护寄存器
/*使能定时器*/
timer_enable(TIMER0);
}
void PwmDrvInit()
{
GpioInit();
TimerInit();
}
pwm_drv.h
#ifndef _PWM_DRV_H_
#define _PWM_DRV_H_
void PwmDrvInit();
#endif