STM32 PWM
基本配置不用讲,现在问题是,调用HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);暂停PWM后想让IO电频输出高,有多少方案。看到网上说配置sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;并没有效果
TIM_OCPolarity = TIM_OCPolarity_Low; PWM1改PWM2试看看 本帖最后由 tanic 于 2018-9-11 13:33 编辑
搞定,还是通过修改占空比 0%的方式实现 void StartStopBeep(uint8_t a)
{
TIM_OC_InitTypeDef sConfigOC;
HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);
if(a==0)
{
// HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 999;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
}
else
{
// HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 499;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_SET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);
}
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
} 写个函数,单独更改pwm的占空比就行。不用重新初始化,不然容易造成乱跳。 feixiang20 发表于 2018-9-11 22:47
写个函数,单独更改pwm的占空比就行。不用重新初始化,不然容易造成乱跳。 ...
HAL竟然没有提供函数,得自己写寄存器
页:
[1]