我用GD32F103Cxx的单片机,我开启了单片机提供的PWM功能,初始化后启动输出可以正常输出波形,但是有一个问题无法解决:
就是当timer_disable(TIMER2);执行后,就会保持PWM输出时的状态,我过是高就保持为高,如果为低保持为低。无论引脚设置为GPIO_MODE_AF_PP或GPIO_MODE_AF_OD都没有办法固定为一种状态。我希望在PWM停止后停留在一个固定状态,不论停止时是何种输出状态。
/* TIMER3 configuration: generate PWM signals with different duty cycles:
TIMER3CLK = SystemCoreClock / 108 = 1MHz */
timer_oc_parameter_struct timer_ocintpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER3);
timer_deinit(TIMER3);
/* TIMER3 configuration */
timer_initpara.prescaler = 72-1;
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
timer_initpara.counterdirection = TIMER_COUNTER_UP;
timer_initpara.period = 1000;
timer_initpara.clockdivision = TIMER_CKDIV_DIV4;
timer_initpara.repetitioncounter = 0;
timer_init(TIMER3,&timer_initpara);
/* CH0 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(TIMER3,TIMER_CH_0,&timer_ocintpara);
timer_channel_output_pulse_value_config(TIMER3,TIMER_CH_0,500);
timer_channel_output_mode_config(TIMER3,TIMER_CH_0,TIMER_OC_MODE_PWM0);
timer_channel_output_shadow_config(TIMER3,TIMER_CH_0,TIMER_OC_SHADOW_DISABLE);
timer_primary_output_config(TIMER3,ENABLE);
/* auto-reload preload enable */
timer_auto_reload_shadow_enable(TIMER3);
timer_enable(TIMER3);
引脚设置
gpio_pin_remap_config(GPIO_TIMER2_PARTIAL_REMAP, ENABLE);
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
|