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。
-
uint32_t pwm_count = 0;
-
-
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
-
{
-
if(htim->Instance == TIM3)
-
{
-
if((++pwm_count) >= 5)
-
{
-
HAL_TIM_PWM_Stop_IT(&htim3, TIM_CHANNEL_1);
-
}
-
}
-
}
-
-
-
int main(void)
-
{
-
HAL_Init();
-
SystemClock_Config();
-
MX_GPIO_Init();
-
MX_TIM3_Init();
-
/* USER CODE BEGIN 2 */
-
printf( "Sudaroot\r\n");
-
HAL_Delay( 1000);
-
HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1);
-
/* USER CODE END 2 */
-
-
while (1)
-
{
-
HAL_Delay( 3000);
-
}
-
}
現象:
全篇完。