[STM32C0] 生成指定个数脉冲

[复制链接]
518|5
chuandaoxy 发表于 2025-11-30 13:18 | 显示全部楼层 |阅读模式
在使用031的timer3输出pwm,事件模式计数

void generate_5_pulses(void)

{
   pulse_count = 0;

   __HAL_TIM_SET_COUNTER(&htim3, 0);
   __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);
   __HAL_TIM_ENABLE_IT(&htim3, TIM_IT_UPDATE);
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
}




void TIM3_IRQHandler(void)

{
        if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE) != RESET)

                    {
                        if (__HAL_TIM_GET_IT_SOURCE(&htim3, TIM_IT_UPDATE) != RESET)
                        {
                            __HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);

                            pulse_count++;

                            if (pulse_count >= HoldingReg1[0])

                            {
                                    pulse_count=0;

                                    __HAL_TIM_DISABLE_IT(&htim3, TIM_IT_UPDATE);
                                    HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);

                                     // TIM3->CCMR1 |= (0b0101 << TIM_CCMR1_OC1M_Pos);
                                      //TIM3->CCER |= TIM_CCER_CC1E;
                            }
                        }
                    }}


执行代码每次在最后一个脉冲总有毛刺,问了一下ai,屏蔽那两句加上,强行拉低,但是代码前两次波形总是乱的,哪位大神看看哪里有问题,




评论

可能是强行拉低导致的吧  发表于 2025-12-2 09:05
9dome猫 发表于 2025-11-30 22:30 | 显示全部楼层
从代码逻辑看,HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1)是在更新中断中触发的,但PWM 停止操作存在时序延迟:
 楼主| chuandaoxy 发表于 2025-12-1 09:08 | 显示全部楼层
楼上有啥好的办法解决,
elife 发表于 2025-12-1 10:01 | 显示全部楼层
用过PWM做过2812控制。如果有PWM匹配中断,在匹配中断里控制脉冲输出,因为这个时候已经输出过高电平了。
xch 发表于 2025-12-1 11:44 | 显示全部楼层
没看懂,为啥没看到对应 CH 的配置。比如CCRx。

停止输出应该先停止计数。比如CR1 清零,或者在RCC_APBRSTR1中复位TIM3。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

858

主题

1049

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部
0