GD32的TIMER0_CH0可以当作普通的PWM输出吗
GD32的TIMER0为高级定时器,他有互补输出,现在只想使用为普通的非互补输出,那么它的TIMER0_CH0可以当作普通的PWM输出吗?不开启互补输出它的TIMER0_CH0_ON可以用作普通的GPIO吗? GD32的TIMER0_CH0可以当作普通的PWM输出,但需要正确配置相关参数 在定时器配置里配置一下就可以了/* 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 */
在定时器配置里配置一下就可以了
/* 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 */
选择合适的计数模式,如向上计数模式或中央对齐计数模式等
配置自动重装载寄存器的值,该值决定了PWM的周期。例如,如果系统时钟频率为72MHz,想要得到一个周期为10ms的PWM信号,那么自动重装载寄存器的值应设置为72000-1
比较输出使能位用于控制是否输出PWM信号,输出极性位则决定了PWM信号的高低电平状态
根据实际需求设置预分频器的值,以调整定时器的计数频率
比较输出使能位用于控制是否输出PWM信号,输出极性位则决定了PWM信号的高低电平状态
在GD32系列单片机中,TIMER0作为高级定时器,确实支持互补输出功能,但您也可以将其配置为普通的非互补PWM输出模式。 可以将TIMER0_CH0配置为普通PWM输出,而无需启用互补输出。 在 timer_channel_output_config() 中设置 outputnstate = TIMER_CCXN_DISABLE,这样互补通道(CH0_ON)就不会被占用。 确保 outputstate = TIMER_CCX_ENABLE,使CH0正常输出PWM 不调用 timer_primary_output_config()(或设为 DISABLE),以避免强制启用互补输出 可以将TIMER0_CH0_ON用作普通GPIO 互补通道未被使能,确保 outputnstate = TIMER_CCXN_DISABLE,否则该引脚会被定时器占用。 在禁用互补输出后,需将该引脚(如PA7或PB1,具体取决于型号)重新初始化为普通GPIO模式 检查复用功能,确保该引脚未绑定到其他外设(如UART、SPI等) 即使不启用互补输出,某些高级定时器(如TIMER0)的寄存器可能仍会强制检查相关配置,需确保 timer_break_config() 中的死区时间设为0,避免意外影响
页:
[1]