GD32F350 TIMER13的PWM

本文详细描述了如何在STM32F4微控制器中配置Timer13,包括时钟设置、GPIO功能配置、PWM通道初始化以及输出脉冲值和模式设置,以实现定时器的计数和PWM输出功能。
void timer13_config(void)
{
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
    
    rcu_periph_clock_enable(RCU_TIMER13);
	rcu_periph_clock_enable(RCU_GPIOB);
	
    gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_1);
    gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_MAX,GPIO_PIN_1);
    gpio_af_set(GPIOB, GPIO_AF_0, GPIO_PIN_1); 

    timer_deinit(TIMER13);

    /* TIMER1 configuration */

    timer_initpara.prescaler         = 9;

    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 2700;
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER13,&timer_initpara);

    /* CH1,CH2 and CH3 configuration in PWM mode */
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;

    timer_channel_output_config(TIMER13,TIMER_CH_0,&timer_ocintpara);

    timer_channel_output_pulse_value_config(TIMER13,TIMER_CH_0,1350);
    timer_channel_output_mode_config(TIMER13,TIMER_CH_0,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER13,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
	
	
    timer_primary_output_config(TIMER13, ENABLE);

    timer_enable(TIMER13);
    }
虽然未直接找到gd32f450 timer0在PE12引脚输出PWM的具体资料,但可以结合已有信息推测实现思路。 在GD32F4xx中,Timer的外部通道支持产生PWM信号,TIMER0属于高级定时器,有4个外部通道,分别为TIMER0_CH0/1/2/3 ,在GD32F450xx_Datasheet中的Port X(A\B\C\D\E\F …) alternate functions summary中可以对应找到外部通道的GPIO引脚,可据此确定PE12对应的通道 [^1]。 参考其他PWM输出的案例,实现步骤大致如下: 1. **设置定时器时钟频率**:可参考GD32F470VET6设置定时器时钟频率的方法,使用`rcu_timer_clock_prescaler_config`函数设置合适的时钟频率 [^4]。 2. **定时器初始化**:对TIMER0进行初始化配置,包括设置PWM输出频率等参数。如在【GD32】从0开始学GD32单片机案例中,PWM的输出频率为100Hz,为了降低占空比的更新频率,把重复计数器的值设置为99,这样定时器每1秒才会发出更新事件 [^2]。 3. **GPIO引脚配置**:使能PE端口的时钟,将PE12引脚设置为复用功能,连接到TIMER0对应的通道。 4. **占空比设置**:使用`timer_channel_output_pulse_value_config`函数设置PWM的占空比,可参考立创梁山派GD32F450ZGT6定时器3 - PWM - 4通道输出案例 [^3]。 以下是一个简单的代码框架示例: ```c #include "gd32f4xx.h" void TIMER0_PWM_Init(void) { // 使能定时器和GPIO时钟 rcu_periph_clock_enable(RCU_TIMER0); rcu_periph_clock_enable(RCU_GPIOE); // 设置定时器时钟频率 rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4); // GPIO引脚配置 gpio_af_set(GPIOE, GPIO_AF_1, GPIO_PIN_12); gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_12); gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12); // 定时器初始化 timer_parameter_struct timer_initpara; timer_initpara.prescaler = 239; // 假设设置预分频值 timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 999; // 假设设置周期 timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_initpara.repetitioncounter = 0; timer_init(TIMER0, &timer_initpara); // PWM模式配置 timer_oc_parameter_struct timer_ocinitpara; timer_channel_output_struct_para_init(&timer_ocinitpara); timer_ocinitpara.outputstate = TIMER_CCX_ENABLE; timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE; timer_ocinitpara.ocpolarity = TIMER_OC_POLARITY_HIGH; timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH; timer_ocinitpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW; timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; timer_channel_output_config(TIMER0, TIMER_CH_0, &timer_ocinitpara); // 设置占空比 timer_channel_output_pulse_value_config(TIMER0, TIMER_CH_0, 500); // 假设设置占空比 // 使能定时器 timer_enable(TIMER0); } int main(void) { TIMER0_PWM_Init(); while(1) { // 主循环 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值