打印
[STM32F4]

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

[复制链接]
718|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 | 只看该作者
使能定时器中断前先做个更新标志的清除,因为在库函数里做定时器参数初始化时做了个手动更新操作,进而使得更新标志被置位了。

所以使能定时器更新中断前 对更新标志清除下 即可。

使用特权

评论回复
5
sonicll| | 2022-2-21 13:34 | 只看该作者
重载值和分频值需要更新事件发生后才能生效,所以固件库里配置定时器参数的函数会做手动更新,这样更新标志会挂起,使能定时器后就会进中断,需要在使能定时器之前先做清除标志位的操作

使用特权

评论回复
6
motor666|  楼主 | 2022-2-21 14:36 | 只看该作者
非常感谢,我去试一下,使用的是HAL库,应该是一样的。

使用特权

评论回复
7
Belle1257| | 2022-2-23 13:06 | 只看该作者
这可以在初始化之后,再初始化变量,然后再进入到业务程序

使用特权

评论回复
8
Estelle1999| | 2022-2-23 13:14 | 只看该作者
你打开定时器的时候,变量是随机的吧

使用特权

评论回复
9
Betty996| | 2022-2-23 13:57 | 只看该作者
你先初始化变量,然后再初始化定时器,试试

使用特权

评论回复
10
Carmen7| | 2022-2-23 14:08 | 只看该作者
一般不都是用定时器,里面放个变量++么,到达一个数值进入到应用程序清除

使用特权

评论回复
11
Annie556| | 2022-2-23 14:35 | 只看该作者
这个不知道你的业务逻辑,不过加个变量可能就解决了吧

使用特权

评论回复
12
Charlene沙| | 2022-2-23 14:53 | 只看该作者
你用变量的方式就行了,把变量放入到定时器里++

使用特权

评论回复
13
Allison8859| | 2022-2-23 15:48 | 只看该作者
这个打开定时器瞬间产生中断的事儿,这个倒是没研究过

使用特权

评论回复
14
Betty1299| | 2022-2-23 15:56 | 只看该作者
问题不大,你用过变量作为中介就好了

使用特权

评论回复
15
Charlotte夏| | 2022-2-23 16:19 | 只看该作者
你不能控制定时器啊,你让定时器给你变量改变,就行了

使用特权

评论回复
16
motor666|  楼主 | 2022-2-23 16:31 | 只看该作者
谢谢大家的回复,这个问题我已经解决了,就是james03所说的,顺序清CNT,再清SR,打开定时器,就会按照ARR里的时间产生中断。

使用特权

评论回复
17
Alina艾| | 2022-2-23 16:54 | 只看该作者
使用外部触发么?你的触发条件是什么?

使用特权

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

本版积分规则

173

主题

419

帖子

1

粉丝