[STM32F4] 定时器打开的瞬间会立即产生一次中断

[复制链接]
1431|16
 楼主| motor666 发表于 2022-2-20 17:12 | 显示全部楼层 |阅读模式
我使用F407做的一个项目,其中一个功能是:当触发条件到来时,打开定时器,1秒到10秒(可设定)之后置一个管脚高电平,现在发现当定时器打开之后,立即会进入一次中断,之后就正常定时了,并不是打开定时器之后,经过1秒再进入中断。这样就会造成误动作,我已经在打开定时器的时候,清 SR,清CNT,都不能解决,不管在打开定时器前清除还是在打开定时器之后清除。麻烦大家看看怎么解决这个问题。
james03 发表于 2022-2-21 10:16 | 显示全部楼层
顺序应该是先清CNT,再清SR
呐咯密密 发表于 2022-2-21 10:34 | 显示全部楼层
先清标志位再使能定时器
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //清除更新中断请求位
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); //使能定时器1更新中断
TIM_Cmd(TIM1, ENABLE); //启动定时器
香水城 发表于 2022-2-21 10:48 | 显示全部楼层
使能定时器中断前先做个更新标志的清除,因为在库函数里做定时器参数初始化时做了个手动更新操作,进而使得更新标志被置位了。

所以使能定时器更新中断前 对更新标志清除下 即可。
sonicll 发表于 2022-2-21 13:34 | 显示全部楼层
重载值和分频值需要更新事件发生后才能生效,所以固件库里配置定时器参数的函数会做手动更新,这样更新标志会挂起,使能定时器后就会进中断,需要在使能定时器之前先做清除标志位的操作
 楼主| motor666 发表于 2022-2-21 14:36 | 显示全部楼层
非常感谢,我去试一下,使用的是HAL库,应该是一样的。
Belle1257 发表于 2022-2-23 13:06 | 显示全部楼层
这可以在初始化之后,再初始化变量,然后再进入到业务程序
Estelle1999 发表于 2022-2-23 13:14 | 显示全部楼层
你打开定时器的时候,变量是随机的吧
Betty996 发表于 2022-2-23 13:57 | 显示全部楼层
你先初始化变量,然后再初始化定时器,试试
Carmen7 发表于 2022-2-23 14:08 | 显示全部楼层
一般不都是用定时器,里面放个变量++么,到达一个数值进入到应用程序清除
Annie556 发表于 2022-2-23 14:35 | 显示全部楼层
这个不知道你的业务逻辑,不过加个变量可能就解决了吧
Charlene沙 发表于 2022-2-23 14:53 | 显示全部楼层
你用变量的方式就行了,把变量放入到定时器里++
Allison8859 发表于 2022-2-23 15:48 | 显示全部楼层
这个打开定时器瞬间产生中断的事儿,这个倒是没研究过
Betty1299 发表于 2022-2-23 15:56 | 显示全部楼层
问题不大,你用过变量作为中介就好了
Charlotte夏 发表于 2022-2-23 16:19 | 显示全部楼层
你不能控制定时器啊,你让定时器给你变量改变,就行了
 楼主| motor666 发表于 2022-2-23 16:31 | 显示全部楼层
谢谢大家的回复,这个问题我已经解决了,就是james03所说的,顺序清CNT,再清SR,打开定时器,就会按照ARR里的时间产生中断。
Alina艾 发表于 2022-2-23 16:54 | 显示全部楼层
使用外部触发么?你的触发条件是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

176

主题

426

帖子

1

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