在做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文件中,作用就是设置占空比
} |