输出固定个数的PWM

问题遇到的现象和发生背景

希望周期性输出固定个数PWM波。

问题相关代码,请勿粘贴截图

//不知道逻辑上哪里有问题。只有输出,未达到理想的效果
void main_loop(void)
{
if(state_cur==stat1)//激励状态
{
HAL_GPIO_WritePin(GPIOA, IO1_Pin, GPIO_PIN_RESET);
HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
__HAL_TIM_SET_PRESCALER(&htim4,6400-1); //PWM TIME
__HAL_TIM_SET_AUTORELOAD(&htim4,4); //PWM TIME
HAL_TIM_Base_Start_IT(&htim4);
while(pwm_time!=1);
pwm_time=0;
state_cur=stat2;
}
if(state_cur==stat2)
{
HAL_TIM_Base_Start_IT(&htim3);
while(samp_en!=2);
samp_en=0;
state_cur=stat1;
}
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim3)
{
samp_en=2;
HAL_TIM_Base_Stop_IT(&htim3);
}

else  if(htim==&htim4)
    { 
  //__HAL_TIM_CLEAR_FLAG(&htim4, TIM_FLAG_CC4);      //清除中断标志
  pwm_time=1;
        HAL_TIM_PWM_Stop(&htim1,TIM_CHANNEL_1);
  HAL_GPIO_WritePin(GPIOA, IO1_Pin, GPIO_PIN_SET);
  __HAL_TIM_DISABLE(&htim4);    
  //HAL_TIM_Base_Stop_IT(&htim4);         //关闭从定时器
   
   }

}

解决办法:1、从你的代码上看,控制输出的PWM方法,应该放到定时器的中断服务函数中;
2、在定时中断服务函数中,清理中断标志位,输出固定个数的PWM,之后再开启下一次的定时器,这样就可以实现周期输出固定个数的PWM波。

利用定时器的比较输出中断,每次电平翻转会进入CC中断,然后在中断里面进行计数,达到你设定的次数就停止输出。

img