stm32实现PWM单次脉冲输出

        当前有个项目用到输出特定时间有效电平的功能,最先想到的是定时器的单脉冲模式。但查看用户手册,单脉冲模式只能使用定时器的通道1和通道2,且其中一个通道作为触发输入,另一个通道作为比较输出,与想象中的并不一样,因此只能另想办法。

        可以通过使用PWM输出的中断模式,在触发输出比较的中断回调函数HAL_TIM_PWM_PulseFinishedCallback中停止PWM输出。下面以定时器2通道1为例:

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  if(htim->Instance==TIM2)
  {
    if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
    {
		HAL_TIM_PWM_Stop_IT(htim, TIM_CHANNEL_1);
		motor1_stop = 0;
	}
  }
}

测试过程中,每次设置的PWM输出的时间都是上次设置的时间,通过查看用户手册,定时器每个通道的输出比较寄存器TIMx_CCRx可以预装载。虽然默认不使能预装载,查看HAL库源代码发现,调用HAL_TIM_PWM_ConfigChannel时,会使能预装载。因此需要再调用HAL_TIM_PWM_ConfigChannel之后,需要调用__HAL_TIM_DISABLE_OCxPRELOAD(&htim2, TIM_CHANNEL_1);失能预装载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值