我可以生成 2 个 PWM 信号,它们之间存在相位差,但是当我停止并重新启动时,TIM2 PWM 以 %100 占空比打开。
我使用内部触发系统来生成 PWM 之间的延迟。 1.PWM→TIM1 CH1 输出比较 无输出 → TIM1 CH2 2.PWM→TIM2 CH1
我使用 C# Windows 窗体应用程序通过 UART 与 STM32 进行通信。例如:如果我发送 0x50,则 PWM 打开,如果我发送 0x51,则 PWM 关闭。
起始代码:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_OC_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
停止代码:
`HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
HAL_TIM_OC_Stop(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);`
“输出引脚可以保持其电平 (OCXM=0000)、设置为活动 (OCxM=0001)、设置为非活动 (OCxM=0010) 或可以在匹配时切换 (OCxM=0011)。”
在我用 CubeMX 制作的项目中,我设置了“匹配时的活动级别”,但它必须是“匹配时切换”(sConfigOC.OCMode 代码中的 TIM_OCMODE_TOGGLE)。
我的假设是,在第一次捕获从定时器的 OC2REF 时,输出引脚始终保持高电平,因此当我们重新启动定时器时,我们无法触发,因为信号为高电平。我不确定这是否是正确的理解,但它对我有用!
为了生成这种类型的信号,我观看了 ST 的这段视频:
https://www.youtube.com/watch?v=QMAgD9SS5_E
但是,他们使用了“比赛中的活跃级别”模式。我知道你已经解决了你的问题,但如果有人面临问题,我会在这里回答^^
问候。