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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
1 N5 E% Y+ T: n& D8 m  r, ^. q, R某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。
' _- C% {3 a: L7 V+ ^. M
5 \" J; U6 E5 d; e  r. M9 [3 A( i02调研
4 `; ^: f/ n1 u; f9 N& i- k& c) C* S客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:& G# i6 E) T! p# L

) w( ?% B* ?* [+ P- n* E

  A' ^/ u  {; @4 p! u) s
微信图片_20231126151428.jpg
图1.启动定时器

+ z, D% ^1 x1 ^; \# }4 e8 z6 l
微信图片_20231126151419.jpg
图2.定时器中断回调
  |; V, h5 b. X  d- x8 ~
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):" ^  ^7 Y- j( `3 l! x' i

0 c) _9 J: n+ M, D( {% c' \
7 V! ]8 n# W$ b0 n+ _* z
微信图片_20231126151415.jpg
图3.实测结果
" D  _7 @0 ]  C5 `' m8 W- O+ e/ s
03分析
* i0 R( \; M2 p1 ~( `应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:
& Q  B+ V& S& G
7 ]8 ~/ F) i5 Z, }6 L/ S  X; v

' N- F4 n5 U$ B' ^
微信图片_20231126151411.jpg
图4.问题产生时序描述

0 f9 E9 H% {) U7 x# R
微信图片_20231126151406.jpg
图5.定时器启动代码
. m( E# i" z1 m* t. s( s! x" z

$ e- d8 f) F) C$ _3 Y2 M) n04处理
) G% Y- L* c, M, ?" Z修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;
5 h" n4 c. o" G' S6 i1 z& s* X5 l/ z; x5 H2 z6 @6 A- o' @0 R, f
/ z9 g- u" o2 o, L& B+ ~7 k
微信图片_20231126151403.jpg
图6.问题修正代码

- h9 ^2 x0 g# M  i7 O
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果

3 ]. `6 F2 Q* _- c+ V
' K: k4 J/ k4 \. ~! \) x! l

2 ]6 q3 [% _% R& s9 e4 o1 I; j! Z& V3 i3 f4 [4 q0 k* z+ U

  l/ e. }% M1 _$ Y; i" h# Z# ]4 c3 q05小结0 t' [8 r0 c. C4 r
在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。9 c" d  G* `/ T; g- y& w
8 P$ A- j% a+ K

4 S% |9 N9 [* Z6 L: _; `转载自: STM32单片机6 P+ a- \3 n: X0 n" n
如有侵权请联系删除
& t0 ^  e0 S7 \/ o# J- b
, e6 o; `8 Y. ~# g. h2 X& V% S: v% Q9 C% q2 n
5 |$ ]6 X* [6 Z: J' _
  }- q# H( M/ S0 J% x# r
收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答

所属标签

相似技术帖

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