使用中断方式实现PWM的占空比控制

2019-07-20 18:05发布

在做F429例程移植到F407的时候发现TIM_SetTIM3Compare4这个函数是自己写的不是HAL库函数,并且此函数还是直接使用寄存器,所以个人想是否存在着某种方式,可以用库函数来实现相同功能,然后想到前面USART的中断时一种形式,那这种形式是否是通用当然呢?然后查询TIM文件发现定时器开启中断的方式和USART一样,所以想到是否可用中断方式来实现PWM的占空比控制。然后发现其实可以,在使用CUBEMX生成代码后在MX_TIM14_Init加上开启中断的函数HAL_TIM_PWM_Start_IT(&htim14,TIM_CHANNEL_1);后就开启中断,在IT文件中完成TIM8_TRG_COM_TIM14_IRQHandler就可以实现用中断方式来控制PWM了。
  1. void TIM8_TRG_COM_TIM14_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 0 */
  4.   
  5.   
  6.   /* USER CODE END TIM8_TRG_COM_TIM14_IRQn 0 */
  7.   HAL_TIM_IRQHandler(&htim14);
  8.   /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 1 */
  9.   if(HAL_TIM_PWM_GetState(&htim14) == HAL_TIM_STATE_READY)
  10.   {
  11.     if(dir)led0pwmval ++;
  12.     else led0pwmval --;
  13.     if(led0pwmval>500) dir = 0;
  14.     if(led0pwmval == 0) dir = 1;
  15.     __HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,led0pwmval);//此处是个宏定义,在TIM文件中,作用就是设置占空比
  16.   }
复制代码

0条回答

一周热门 更多>