STM32F4的HAL库函数HAL_TIM_PWM_Stop可以让引脚空闲时固定电平?
本帖最后由 68336016 于 2024-4-17 23:44 编辑stm32f401rct6, TIM3定时器的CH1和CH2两个通道配置为PWM。
我其实需要PWM暂停时候,引脚电平为低电平,现在用HAL_TIM_PWM_Stop函数暂停PWM,用逻辑分析仪反复抓取时序,PWM暂停时候引脚电平是低电平。
目前结果是我想要的,但是之前看过不少文章提到PWM空闲时候引脚电平不确定的问题,还有人说过STM32F407用HAL_TIM_PWM_Stop暂停PWM,引脚电平也不确定。
虽然我现在每次试,PWM暂停时候都是低电平,但是心里好像也不怎么完全确定了。{:lol:}
————————————————————————————————————
补充:电路后面还有光耦反相,我真正要的其实是PWM空闲时候,引脚输出要高电平才行
以下代码反复启停PWM。
for(;;)
{
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 500);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, 800);
osDelay(100);
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);
osDelay(100);
}
对于STM32 ,你的PWM CH Polarity设置的为High,PWM还有一个idle state,一般定义为极性的反,所以PWM停上的时候是相反的极性,不会随机。 fcm32 发表于 2024-4-18 09:07
对于STM32 ,你的PWM CH Polarity设置的为High,PWM还有一个idle state,一般定义为极性的反,所以PWM停上 ...
(引用自2楼)
idle state只对TIM1有效,其它定时器无效,不管极性怎么设置,PWM停止后引脚都是低电平。
不过将占空比设置为0或者100,也能变通得将引脚固定电平输出
#define IS_TIM_BREAK_INSTANCE(INSTANCE)(((INSTANCE) == TIM1))
if (IS_TIM_BREAK_INSTANCE(TIMx))
{
/* Check parameters */
assert_param(IS_TIM_OCNIDLE_STATE(OC_Config->OCNIdleState));
assert_param(IS_TIM_OCIDLE_STATE(OC_Config->OCIdleState));
/* Reset the Output Compare and Output Compare N IDLE State */
tmpcr2 &= ~TIM_CR2_OIS1;
tmpcr2 &= ~TIM_CR2_OIS1N;
/* Set the Output Idle state */
tmpcr2 |= OC_Config->OCIdleState;
/* Set the Output N Idle state */
tmpcr2 |= OC_Config->OCNIdleState;
} PWM停止后设为强制为高电平模式
页:
[1]