GD32通用定时器、高级定时器PWM输出例程

通用定时器

/**********************************************************************************************************
*	函 数 名:PWMOut_LCD_BK_Init
*	功能说明:TFT背光PWM初始化
*	形    参:
*	返 回 值:
**********************************************************************************************************/ 
void PWMOut_LCD_BK_Init(void)  //TIM4_CH2    LCD_BK-PA2
{
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
	
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_AF);

    /*Configure PA2(TIMER4 CH2) as alternate function*/
    gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);

    rcu_periph_clock_enable(RCU_TIMER4);
    timer_deinit(TIMER4);

    /* TIMER1 configuration */
    timer_initpara.prescaler         = 53;  //TIMER1CLK = SystemCoreClock / 54 = 2MHz
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 99;  // 2MHz/100=20KHz  LCD背光频率20K
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER4,&timer_initpara);

    /* CH2 configuration in PWM mode1 */
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_LOW;       //通道输出极性
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;            //通道输出状态
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;     //通道处于空闲时的输出	
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;     //互补通道输出极性 
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;          //互补通道输出状态
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;    //互补通道处于空闲时的输出
    timer_channel_output_config(TIMER4,TIMER_CH_2,&timer_ocintpara);

    /* CH2 configuration in PWM mode1,duty cycle 50% */
    timer_channel_output_pulse_value_config(TIMER4,TIMER_CH_2,89);
    timer_channel_output_mode_config(TIMER4,TIMER_CH_2,TIMER_OC_MODE_PWM0);
    timer_channel_output_shadow_config(TIMER4,TIMER_CH_2,TIMER_OC_SHADOW_DISABLE);

    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER4);
    /* auto-reload preload enable */
    timer_enable(TIMER4);	
}

/**********************************************************************************************************
*	函 数 名:Set_LCD_Bk
*	功能说明:设置LCD的背光
*	形    参:pulse:背光值,取值范围:0-99,取值0关闭背光,取值99背光最亮
*	返 回 值:无
**********************************************************************************************************/ 
void Set_LCD_Bk(uint32_t pulse)
{
	TIMER_CH2CV(TIMER4) = (uint32_t)pulse;
}

高级定时器

/**********************************************************************************************************
*	函 数 名:PWM_STEP_GS_Init
*	功能说明:电机REF输出
*	形    参:
*	返 回 值:
**********************************************************************************************************/ 
void PWM_REF_GS_Init(void)  //TIM7_CH3    SSM_REF-PC9
{
    timer_oc_parameter_struct timer_ocintpara;
    timer_parameter_struct timer_initpara;
	
    rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_AF);
	rcu_periph_clock_enable(RCU_TIMER7);
	
    /*Configure PC9(TIMER7 CH3) as alternate function*/
    gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
   
    timer_deinit(TIMER7);

    /* TIMER7 configuration */
    timer_initpara.prescaler         = 5;  //TIMER7CLK = SystemCoreClock / ( 5+1 )= 18MHz
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;
    timer_initpara.period            = 899;  // 18MHz/(1799+1)=10KHz  周期
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;
    timer_initpara.repetitioncounter = 0;
    timer_init(TIMER7,&timer_initpara);

    /* CH2 configuration in PWM mode1 */
    timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_LOW;       //通道输出极性
    timer_ocintpara.outputstate  = TIMER_CCX_ENABLE;            //通道输出状态
    timer_ocintpara.ocidlestate  = TIMER_OC_IDLE_STATE_LOW;     //通道处于空闲时的输出	
    timer_ocintpara.ocnpolarity  = TIMER_OCN_POLARITY_HIGH;     //互补通道输出极性 
    timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;          //互补通道输出状态
    timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;    //互补通道处于空闲时的输出
    timer_channel_output_config(TIMER7,TIMER_CH_3,&timer_ocintpara);

    /* CH2 configuration in TOGGLE mode */
	timer_channel_output_pulse_value_config(TIMER7,TIMER_CH_3,99);
    timer_channel_output_mode_config(TIMER7,TIMER_CH_3,TIMER_OC_MODE_PWM1);
    timer_channel_output_shadow_config(TIMER7,TIMER_CH_3,TIMER_OC_SHADOW_DISABLE);

    /* TIMER7 primary output function enable 高级定时器(0和7)特有*/
    timer_primary_output_config(TIMER7,ENABLE);
	
    /* auto-reload preload enable */
    timer_auto_reload_shadow_enable(TIMER7);
 
    timer_enable(TIMER7);	
}
GD32通用定时器具有多种配置选项。通用定时器可以用于各种不同的应用,例如PWM输出、定时中断等。在配置通用定时器时,我们需要考虑以下几个方面: 1. 选择定时器GD32具有多个通用定时器,例如TIM1、TIM2等。根据需求选择合适的定时器。 2. 配置时钟源:通用定时器的工作需要一个时钟源。可以选择内部时钟源或外部时钟源,并根据需求进行相应的配置。 3. 配置计数模式:通用定时器支持向上计数模式,即计数器从0开始递增。可以根据需求选择其他计数模式,例如向下计数或中央对齐。 4. 配置预分频器:预分频器可以设置定时器的计数频率。通过设置预分频系数,我们可以将输入时钟分频以适应需要的计数频率。 5. 配置自动重载寄存器(ARR):ARR决定了定时器的周期。根据所需的定时周期设置ARR的值。 6. 配置输出比较模式:如果需要使用通用定时器PWM输出功能,可以配置输出比较模式和相关寄存器,包括通道选择、极性、比较值等。 以上是配置GD32通用定时器的一些基本步骤和要点。具体的配置参数和寄存器设置可以根据具体的应用需求进行调整和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【GD32】从0开始学GD32单片机(10)—— TIMER基本定时器详解+1毫秒延时例程](https://blog.csdn.net/JackieCoo/article/details/127053375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [GD32F405RGT6定时器固件库(所有定时器的配置(12个))](https://download.csdn.net/download/tiange1996/84842173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值