久芯网

同时使用PWM两个中断问题

avatar Glenxu 提问时间: 2023-07-08 19:17:55 / 未解决
感觉PWM中断用HAL_TIM_PWM_Start_IT(&htimx, TIM_CHANNEL_y);启动就可以了,
但事实上这个中断仅仅对应:void HAL_TIM_PWM_PulseFinishedCallback (TIM_HandleTypeDef *htim);
如果启用:void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)中断,
必须使用HAL_TIM_Base_Start_IT(&htimx );才能完成。

经3天反复试验,如果需要这两个中断,就必须同时启用:
HAL_TIM_Base_Start_IT(&htimx );
HAL_TIM_PWM_Start_IT(&htimx, TIM_CHANNEL_y);
这样下面的函数才能都有响应。
void HAL_TIM_PWM_PulseFinishedCallback (TIM_HandleTypeDef *htim)
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)
也就是说,这两个中断需要两个对应的启用函数。

1个回答
  • avatar xmshao
    回答时间: 2023-07-08 19:45:23

    你的理解没有问题,虽然两个TIMER API函数都带IT,但启动的中断是不相同的。 HAL_TIM_Base_Start_IT(&htimx );==》这个 函数启动的是基于更新事件的中断; HAL_TIM_PWM_Start_IT(&htimx, TIM_CHANNEL_y);==》这个函数启动的是基于比较事件的中断; 当然,库函数里给我们预备的回调函数也不一样。

会员中心 微信客服
客服
回到顶部