你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32的定时器不按设定超时产生中断

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
+ J( K" I0 p" y- B) p1 c- D某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。2 Z7 q. o, T. P5 q9 Y
  u# R1 ^% P6 E: Q9 Z/ d0 |2 \, D
02调研
$ ?" U. Z( k2 @客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
- w! p  K% q4 z1 ~4 h" a7 G2 {
' X$ t) s4 f7 V* |5 p: \5 o

& t  Z7 n5 L3 u8 P
微信图片_20231126151428.jpg
图1.启动定时器

0 Y2 H8 @4 @; C5 m
微信图片_20231126151419.jpg
图2.定时器中断回调
* p/ |* Z+ h8 d: Z" P" P
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):
7 D$ v3 l7 V. y& l' K+ W
3 e/ R' V# h( [# d6 |
- U$ M! x8 \) m# d
微信图片_20231126151415.jpg
图3.实测结果

0 X" y. N* D2 o6 W( H8 H" R03分析
- ?  F8 h+ K. @$ P应用代码在初始化定时器时会调用 HAL_TIM_Base_Init( )接口,此接口会调用TIM_Base_SetConfig( ) 配置定时器,并产生更新事件(TIMx->EGR = TIM_EGR_UG)加载寄存器,此事件标志 UIF 会被置位,在调用 HAL_TIM_Base_Start_IT( ) 启动定时器,在此使能定时器中断时,由于 UIF 已经置位,所以会立即触发并进入中断处理函数,中断回调函数会停止定时器计数,并禁止定时器中断;但当从中断处理函数返回继续执行HAL_TIM_Base_Start_IT( )时,此接口会使能定时器开始计数,进而在下一次调用HAL_TIM_Base_Start_IT( )时又会立即产生中断,循环往复,详细时序和具体代码如下:5 Q2 U, i- F2 G1 `- h1 X" Y
/ C% d, {) }# j% V% z1 R, U
, w4 \! b5 o  S  A7 T5 Z% y$ {( B
微信图片_20231126151411.jpg
图4.问题产生时序描述

* i, J; E: J9 q6 H# }5 M  g
微信图片_20231126151406.jpg
图5.定时器启动代码
* T3 O+ W9 i- u8 C) \! D: ^

  V; C% V* W- ^* g04处理! u5 A, {5 f* s) Q
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;
1 s1 t; Y0 q' `: _# _+ o7 c, G. o. s" R' A" l

' C; T. f9 k1 R6 U
微信图片_20231126151403.jpg
图6.问题修正代码

/ p: g7 O: J) d
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
" Z/ t) \1 w: W; O! }

+ h3 k8 a/ j0 U# w4 z! [4 k

- F  R5 M' |7 N0 h9 t  ]" t& G% O6 l$ x+ F

" z! s9 ^( |8 x. I3 n/ E% |05小结
: p8 ?. @7 |" U, |$ T' b4 X# m在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。2 N& V: V% n6 C& s

8 m+ y( X0 z* ^& c' U, E) @( g5 F6 D
1 ]  E4 C" m: P
转载自: STM32单片机
1 N" Q+ }1 j% z& g% f/ m如有侵权请联系删除
. H! x8 W& x$ _! q5 H
- o7 Q7 j& d: f, I; ^% U; C' Z1 e9 P
; L1 T( i/ A3 t7 P- f5 P, A
" y& e9 A2 w+ \# c5 ~# T& V2 R& k
收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版