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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
0 K, V: R& ^+ l: f4 Z/ j某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。5 y$ ~3 [: p! @7 m
" E+ n( g8 d1 w6 F3 U; Q
02调研
7 G) M; H% J2 ?6 V7 Y+ C客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
9 X0 ^6 t4 C0 E4 N" T0 O
1 K2 L  y1 x" Z$ a/ L
" M* o6 ]) |  b  N2 ]
微信图片_20231126151428.jpg
图1.启动定时器
; C, c  \. y* J7 O; J' I
微信图片_20231126151419.jpg
图2.定时器中断回调

2 J, }+ x& E# o* c客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):
  Y' ]$ s- I, ]& F7 E/ @/ d9 q0 Q) b8 p

; m+ E7 G% \: j
微信图片_20231126151415.jpg
图3.实测结果

. W& |0 b. o  H% w( y2 R03分析
3 _" L& c# L0 @! a8 f应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:/ M5 p: S7 r% q' {% u* U

0 P3 c, \) x. S/ ]5 S5 W
* G! d1 k5 D0 `  W# U
微信图片_20231126151411.jpg
图4.问题产生时序描述
0 j( _8 @0 {* I$ [
微信图片_20231126151406.jpg
图5.定时器启动代码
7 V* e: j! Q' _& x
* k- @+ C& |/ T* n% b  M9 p
04处理6 ]/ r4 f' W# C; ~5 g2 G
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;+ S8 U. P1 v- d
' q" g  S# U0 Y! u

4 D1 i2 F; A* ]- G
微信图片_20231126151403.jpg
图6.问题修正代码

1 f" l7 A, E6 h% d2 J
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果

8 s& i8 q- y! a. p) C' T
+ g. E3 [9 ^3 y6 ?" b
8 s' s0 J. l" u* t- E+ m. S
1 R# E0 [8 F( O. ~9 E0 y( v8 j

7 |1 Z4 S5 P! o- U5 ]$ s05小结
, X& R; U  m0 |' ]  V+ ]在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
$ l) V& x+ y$ R6 m/ K( |8 ]! ~
9 S2 m; v% s: v. q8 [* C; P. q
3 k  \" D, o* {- {4 k2 e/ W2 a2 q
转载自: STM32单片机
! J* Q% r8 \: s/ {  l+ |如有侵权请联系删除
; Q; F9 Q( u  X. H/ O6 n+ o- c+ w1 T

" i1 O9 A8 ^* R+ v' g7 x' I

2 g) N2 n$ ?6 |6 M% i4 K9 L7 f+ w( p, E; _9 M! F) ?' L2 i$ U
收藏 评论0 发布时间:2023-11-26 15:24

举报

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