duo点 发表于 2025-3-28 12:00

GD32的TIMER0_CH0可以当作普通的PWM输出吗

GD32的TIMER0为高级定时器,他有互补输出,现在只想使用为普通的非互补输出,那么它的TIMER0_CH0可以当作普通的PWM输出吗?不开启互补输出它的TIMER0_CH0_ON可以用作普通的GPIO吗?

tpgf 发表于 2025-4-9 15:34

GD32的TIMER0_CH0可以当作普通的PWM输出,但需要正确配置相关参数

yangjiyou1969 发表于 2025-4-9 16:18

在定时器配置里配置一下就可以了
        /* CH0 configuration in OC TOGGLE mode */
        if (LED_CCXN) {
                timer_ocintpara.outputstate= TIMER_CCX_DISABLE;                                //ͨµÀÊä³ö״̬
                timer_ocintpara.outputnstate = TIMER_CCXN_ENABLE;                                //»¥²¹Í¨µÀÊä³ö״̬
                timer_ocintpara.ocnpolarity= TIMER_OCN_POLARITY_HIGH;        //»¥²¹Í¨µÀÊä³ö¼«ÐÔ
                timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;//¿ÕÏÐ״̬Ï»¥²¹Í¨µÀÊä³ö¼«ÐÔ
        }else{
                timer_ocintpara.outputstate= TIMER_CCX_ENABLE;                                //ͨµÀÊä³ö״̬
                timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;                        //»¥²¹Í¨µÀÊä³ö״̬
                timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;        //ͨµÀÊä³ö¼«ÐÔ
                timer_ocintpara.ocidlestate= TIMER_OC_IDLE_STATE_LOW;        //¿ÕÏÐ״̬ÏÂͨµÀÊä³ö
        }
        timer_channel_output_config(ThisTIMER, TimerCh, &timer_ocintpara);
       
//1=        TIMER_OC_MODE_TOGGLE

//        timer_channel_output_mode_config(ThisTIMER, TimerCh, TIMER_OC_MODE_TOGGLE);
//        timer_channel_output_shadow_config(ThisTIMER, TimerCh, TIMER_OC_SHADOW_ENABLE);

// or

//2=        TIMER_OC_MODE_PWM0

        timer_channel_output_mode_config(ThisTIMER, TimerCh, TIMER_OC_MODE_PWM0);
        timer_channel_output_pulse_value_config(ThisTIMER,TimerCh,2500-1);
        timer_channel_output_shadow_config(ThisTIMER, TimerCh, TIMER_OC_SHADOW_ENABLE);
        /* auto-reload preload enable */

yangjiyou1969 发表于 2025-4-9 16:23

在定时器配置里配置一下就可以了
        /* CH0 configuration in OC TOGGLE mode */
        if (LED_CCXN) {
                timer_ocintpara.outputstate= TIMER_CCX_DISABLE;                                //通道输出状态
                timer_ocintpara.outputnstate = TIMER_CCXN_ENABLE;                                //互补通道输出状态
                timer_ocintpara.ocnpolarity= TIMER_OCN_POLARITY_HIGH;        //互补通道输出极性
                timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;//空闲状态下互补通道输出极性
        }else{
                timer_ocintpara.outputstate= TIMER_CCX_ENABLE;                                //通道输出状态
                timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;                        //互补通道输出状态
                timer_ocintpara.ocpolarity   = TIMER_OC_POLARITY_HIGH;        //通道输出极性
                timer_ocintpara.ocidlestate= TIMER_OC_IDLE_STATE_LOW;        //空闲状态下通道输出
        }
        timer_channel_output_config(ThisTIMER, TimerCh, &timer_ocintpara);
       
//1=        TIMER_OC_MODE_TOGGLE

//        timer_channel_output_mode_config(ThisTIMER, TimerCh, TIMER_OC_MODE_TOGGLE);
//        timer_channel_output_shadow_config(ThisTIMER, TimerCh, TIMER_OC_SHADOW_ENABLE);

// or

//2=        TIMER_OC_MODE_PWM0

        timer_channel_output_mode_config(ThisTIMER, TimerCh, TIMER_OC_MODE_PWM0);
        timer_channel_output_pulse_value_config(ThisTIMER,TimerCh,2500-1);
        timer_channel_output_shadow_config(ThisTIMER, TimerCh, TIMER_OC_SHADOW_ENABLE);
        /* auto-reload preload enable */

xiaoqizi 发表于 2025-4-13 20:45

选择合适的计数模式,如向上计数模式或中央对齐计数模式等

木木guainv 发表于 2025-4-14 08:04

配置自动重装载寄存器的值,该值决定了PWM的周期。例如,如果系统时钟频率为72MHz,想要得到一个周期为10ms的PWM信号,那么自动重装载寄存器的值应设置为72000-1

Jiangxiaopi 发表于 2025-4-14 11:07

比较输出使能位用于控制是否输出PWM信号,输出极性位则决定了PWM信号的高低电平状态

荣陶陶 发表于 2025-4-14 14:08

根据实际需求设置预分频器的值,以调整定时器的计数频率

Zhiniaocun 发表于 2025-4-14 17:12

比较输出使能位用于控制是否输出PWM信号,输出极性位则决定了PWM信号的高低电平状态
页: [1]
查看完整版本: GD32的TIMER0_CH0可以当作普通的PWM输出吗