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波。

打開TIM3的全局中斷。

生成代碼。

 

測試:

目標效果:產生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.  
    }

 

現象:

 

全篇完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM