[STM32F4] STM32F407定时器6中断有什么特殊的吗?

[复制链接]
758|19
Tom952331 发表于 2025-9-8 14:17 | 显示全部楼层 |阅读模式
我用STM32F407的定时器6和定时器7控制两个伺服电机。

可是用定时器6控制的电机转一会就不转了,而定时器7控制的电机一直转。
  1. void TIM6_DAC_IRQHandler(void)
  2. {
  3.   /* USER CODE BEGIN TIM6_DAC_IRQn 0 */
  4.         //xServo_Work();
  5.         __HAL_TIM_CLEAR_IT(&htim6, TIM_IT_UPDATE);
  6.         //HAL_TIM_IRQHandler(&htim6);

  7.         xServo_Work();
  8.        
  9.         //HAL_TIM_Base_Start_IT(&htim6);                        //我加的
  10.   /* USER CODE END TIM6_DAC_IRQn 0 */
  11.   /* USER CODE BEGIN TIM6_DAC_IRQn 1 */

  12.   /* USER CODE END TIM6_DAC_IRQn 1 */
  13. }
定时器6中断名有个DAC,是不是与别的定时器有什么不同啊?谢谢
duo点 发表于 2025-9-8 16:03 | 显示全部楼层
可能是由于 DAC 中断标志 未被清除,导致中断处理程序提前退出。
classroom 发表于 2025-9-8 17:04 | 显示全部楼层
TIM6 中断标志可能未正确清除。
cr315 发表于 2025-9-8 18:04 | 显示全部楼层
可能是 HAL 库的 HAL_TIM_IRQHandler() 被注释掉了,导致中断未正确处理。
duo点 发表于 2025-9-8 19:05 | 显示全部楼层
TIM7 没有共享中断,所以它的中断处理更稳定。
elephant00 发表于 2025-9-8 16:06 | 显示全部楼层
检查 DAC 是否启用中断。
flycamelaaa 发表于 2025-9-8 16:46 | 显示全部楼层
不要注释 HAL_TIM_IRQHandler(&htim6),除非你完全手动处理中断。
jcky001 发表于 2025-9-8 21:07 | 显示全部楼层
TIM6 中断优先级是否正确?
onlycook 发表于 2025-9-8 22:38 | 显示全部楼层
检查TIM6初始化是否有误。
powerantone 发表于 2025-9-8 22:09 | 显示全部楼层
检查 xServo_Work() 是否阻塞,如果 xServo_Work() 执行时间过长(如 HAL_Delay() 或 while 循环),可能会导致 TIM6 中断无法及时响应,最终看起来像是“停止”。
probedog 发表于 2025-9-8 20:39 | 显示全部楼层
TIM6_DAC_IRQHandler 需要同时处理 TIM6 和 DAC 中断。
stormwind123 发表于 2025-9-8 19:50 | 显示全部楼层
DAC 中断标志可能干扰 TIM6,即使你没有使用 DAC。
七毛钱 发表于 2025-9-8 17:30 | 显示全部楼层
如果不需要 DAC,可以禁用它的中断,避免干扰。
 楼主| Tom952331 发表于 2025-9-8 16:16 | 显示全部楼层
没启用
玄德 发表于 2025-9-8 17:11 | 显示全部楼层

timer6 和 DAC 两个外设共用一个中断号。
不管哪个发生中断,服务程序都在这里。



 楼主| Tom952331 发表于 2025-9-8 17:16 | 显示全部楼层
flycamelaaa 发表于 2025-9-8 16:46
不要注释 HAL_TIM_IRQHandler(&htim6),除非你完全手动处理中断。

不注释也没用
xch 发表于 2025-9-8 18:38 | 显示全部楼层
把xServo_Work(); 关掉,换成一个32位计数器

评论

xch
可能是忙得屁滚尿流,所以过一会儿就宕机了  发表于 2025-9-8 19:49
 楼主| Tom952331 发表于 2025-9-9 07:46 | 显示全部楼层
你才屁滚尿流呢
xch 发表于 2025-9-9 11:23 | 显示全部楼层

uint32_t tim6_irq_cnt =0;
void TIM6_DAC_IRQHandler(void)
{
        __HAL_TIM_CLEAR_IT(&htim6, TIM_IT_UPDATE);
//        xServo_Work();
       tim6_irq_cnt ;;
}

看看tim6_irq_cnt  会不会死翘翘。如果不会就是 xServo_Work 屁滚尿流了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

224

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部