• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

定时器更新中断关闭问题

宫梓萱 2019-12-10 浏览量:731

例如TIM3的更新中断优先级比TIM2高,

在TIM2,TIM3中断同时来后,先会进入TIM3中断进行执行。我想在TIM3的中断服务函数里将TIM2中断关闭掉,也就是不要再响应TIM2的中断。

因为不关掉的话,当TIM3的中断执行完毕后接着会执行TIM2的中断函数的。

在TIM3里直接写入如下两句:

TIM2->CR1 &= (uint16_t)(~((uint16_t)TIM_CR1_CEN)); //关闭TIM2计数

 IM2->SR = (uint16_t)~TIM_IT_Update; //清除中断标志


这两句可以达到效果吗,即执行完TIM3后将忽视掉TIM2的中断响应


0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 这种只是要在定时器3与定时器2同时到来时才有作用,如果定时器2提前到了,在定时器2中处理程序时,定时器3中断到了,定时器3停止了定时器2,那么定时器2中的程序就无法再运行了,而且也无法释放之前入栈数据。所以,还要再添加标志位来确定两个定时器的状态
    • 发布于 2020-01-03
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 理论上没问题,实际还要测试一下,如果还是不行就在tim3中断里面把tim2中断也关闭试试看
    • 发布于2019-12-10
    • 举报
    • 评论 0
    • 0
    • 1

  • 不知道你的TIM2是干什么用的,但是你最好不是停止计数,而是关掉他的更新中断
    • 发布于2019-12-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 理论上可以这样做,但如果发生了中断抢占,这样做的后果就未知了
    • 发布于2019-12-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 最好是不要采用这种方式来处理,推荐你用更新中断标志来控制定时器的更新中断
    • 发布于2020-01-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 定时器的中断可以这样实现,但是注意这个中断时间不能太短
    • 发布于2020-01-16
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

定时器更新中断关闭问题