stm32 定制PWM脉冲个数

https://blog.csdn.net/sudaroot/article/details/107366428

 

STM32 HAL库有两个PWM中断回调函数

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) ; PWM脉冲在非阻塞模式下完成回调

void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);PWM脉冲在非阻塞模式下半完成回调

理论上用以上任一回调函数都能达到控制及统计PWM产生个数。

 

但是void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);这个回调函数中断并不执行。

故只能用HAL_TIM_PWM_PulseFinishedCallback这个函数统计及控制PWM产生个数了。

 

 

 

STM32CubeIDE:

芯片:STM32F103C8;时钟72MHz;

配置TIM3 产生 2KHz频率的PWM波。

stm32  定制PWM脉冲个数

打开TIM3的全局中断。

stm32  定制PWM脉冲个数

生成代码。

 

测试:

目标效果:产生5个PWM个数后停止PWM。

  1.   uint32_t pwm_count = 0;
  2.    
  3.   void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
  4.   {
  5.   if(htim->Instance == TIM3)
  6.   {
  7.   if((++pwm_count) >= 5)
  8.   {
  9.   HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_1);
  10.   }
  11.   }
  12.   }
  13.    
  14.    
  15.   int main(void)
  16.   {
  17.   HAL_Init();
  18.   SystemClock_Config();
  19.   MX_GPIO_Init();
  20.   MX_TIM3_Init();
  21.   /* USER CODE BEGIN 2 */
  22.   printf("Sudaroot\r\n");
  23.   HAL_Delay(1000);
  24.   HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);
  25.   /* USER CODE END 2 */
  26.    
  27.   while (1)
  28.   {
  29.   HAL_Delay(3000);
  30.   }
  31.   }

 

现象:

stm32  定制PWM脉冲个数

 

全篇完。

上一篇:Go题库10_字符个数统计


下一篇:红外通讯之红外遥控器让你的舵机转圈圈