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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
3 x9 ~# z6 y6 t5 C, q2 c' i某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。
/ v0 _) J6 C& G  L1 s! X4 L* Y
, h" k9 o! D' U3 g02调研
3 \) ~  |. p2 ^) e( C9 q客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
+ n* ^9 _! R% d1 b" A, b. O6 ~! {! E. u% }! K  L. R7 J
; p, E5 N' x9 E, L3 W( Z
微信图片_20231126151428.jpg
图1.启动定时器

$ N' @# p. G" p0 z, H# `8 R
微信图片_20231126151419.jpg
图2.定时器中断回调
; n6 d# L$ ~- T' b
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):
) ^% P" p; h, l. e2 T8 U3 u
/ f& \4 q" z" o* E+ ]2 k

: i6 A$ P% a/ ?: r+ n: c/ m
微信图片_20231126151415.jpg
图3.实测结果
9 D0 _! A8 m) Q) X
03分析3 R$ a- I* K5 p% I% C* a' x. K
应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:6 U+ k4 s/ \4 [# d4 c
4 s! K0 d: r5 V- x. e, m
! |7 {; T& v6 o2 f
微信图片_20231126151411.jpg
图4.问题产生时序描述
8 X. o4 ?* Z, r7 `1 t% ]& L
微信图片_20231126151406.jpg
图5.定时器启动代码
3 ]  P1 h3 A2 T' Y* N1 B

! o; ?4 ^  M' C6 s8 ^$ g) r  o7 Q04处理; |; |4 K- @* R1 k' {
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;& @. q% A0 u  V' a7 s9 E* a

2 L% E/ h7 Q& g, z
8 B# ^# d& `* L  m1 D  N; \' Z
微信图片_20231126151403.jpg
图6.问题修正代码
3 g- a( k" f* d; R; k
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
1 j% h& `9 ?9 f& W7 u, S
+ _1 t( d4 O9 A& ]

* S- q0 g# i% U6 H' e: C( j4 w4 P) K0 n

& G9 G# a( B  P6 T8 q05小结
% T" @) g; O. [0 _% Z: @) |$ @在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
  l! q" v/ M! m4 \8 ]6 u3 R$ j
+ c. ~9 ]+ n7 ^' w; b+ u

6 X  h$ \  v+ }& p# ]0 B- M* U转载自: STM32单片机' _/ ~. `. u+ L. ^
如有侵权请联系删除
, M1 D7 M, {$ U4 z3 i1 f
. ~  o! Q- J6 w! a/ q, E0 y. h4 ^+ b+ P1 i/ h
. h( t; s0 _. }' v: `6 }8 L2 y
0 p( ]! Z# K9 A* f/ L; j& N: w
收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版