GD32入门到实战21--PWM输出

发布于:2025-09-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

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