打印
[STM32F1]

STM32定时器初始化后马上进入中断

[复制链接]
477|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiahy|  楼主 | 2022-1-1 19:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32定时器初始化后马上立即就会进入中断,按网上的方法如果加一句TIM_ClearITPendingBit(TIM3, TIM_IT_Update); 其实还是进入了中断函数内部,只是不执行用户的有效语句.  应该在TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);这句前加TIM3->CR1=TIM_CR1_URS; 这样中断的条件就不满足了,程序就不会进入定时器的中断函数内部了.

使用特权

评论回复
沙发
renyaq| | 2022-1-1 19:48 | 只看该作者
嗯, 支持一下,  把遇到的问题的解决办法分享给大家,  是个好做法

使用特权

评论回复
板凳
chenjunt| | 2022-1-1 19:51 | 只看该作者
其实,那样清除也够了,在使能定时器更新中断前 执行这句TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  是不会发生一使能定时器中断就进中断服务程序的。

使用特权

评论回复
地板
hanwe| | 2022-1-1 19:56 | 只看该作者
如果按你那样操作,那就意味着只有定时器的溢出事件【上溢或下溢】才能触发更新中断。

使用特权

评论回复
5
renyaq| | 2022-1-1 20:00 | 只看该作者
但有些场合,比如希望软件方式触发 或从模式复位事件触发更新中断,如果此时将URS位清零就没法

使用特权

评论回复
6
renyaq| | 2022-1-1 20:02 | 只看该作者
产生相应中断了。

使用特权

评论回复
7
liliang9554| | 2022-1-1 20:06 | 只看该作者
应该是只需要清除标志位就可以了的

使用特权

评论回复
8
jiahy|  楼主 | 2022-1-1 20:09 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

862

主题

9861

帖子

4

粉丝