在做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了。
- void TIM8_TRG_COM_TIM14_IRQHandler(void)
- {
- /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 0 */
-
-
- /* USER CODE END TIM8_TRG_COM_TIM14_IRQn 0 */
- HAL_TIM_IRQHandler(&htim14);
- /* USER CODE BEGIN TIM8_TRG_COM_TIM14_IRQn 1 */
- if(HAL_TIM_PWM_GetState(&htim14) == HAL_TIM_STATE_READY)
- {
- if(dir)led0pwmval ++;
- else led0pwmval --;
- if(led0pwmval>500) dir = 0;
- if(led0pwmval == 0) dir = 1;
- __HAL_TIM_SetCompare(&htim14,TIM_CHANNEL_1,led0pwmval);//此处是个宏定义,在TIM文件中,作用就是设置占空比
- }
复制代码
一周热门 更多>