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);
}
}
现象:
全篇完。
本人是一个嵌入式未入门小白,博客仅仅代表我个人主观见解,记录成长笔记。
笔记是以最简单的方式,只展示最核心的原理。
若有与 大神大大 见解有歧义,我绝对坚信 大神大大 见解是对的,我的是错的。
若无积分等无法下载源码,可加入QQ群657407920下载交流经验。感谢~!