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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
& g( l6 X" C% g+ e, l0 f4 S0 c某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。& s: l5 b& n9 G0 o" |3 l3 o
$ ]1 v& F, e" U& J
02调研5 Z1 j4 U' l! o3 n0 y
客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:+ x3 i( j+ _" N8 q5 m3 C. `

  Y& o& \. r" R- [/ d7 D

3 p9 \# N" q& X' b$ }2 b5 C
微信图片_20231126151428.jpg
图1.启动定时器

% D% W* c2 P+ U" [: t6 s& f
微信图片_20231126151419.jpg
图2.定时器中断回调

5 X# R) q: U0 \, }; _+ J客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):2 ]4 Z% }7 p. ?2 b. r) ~
5 H9 B  E: P0 U, z( r
9 J9 a# ?1 k* u: E
微信图片_20231126151415.jpg
图3.实测结果
4 I" G* _; E% M" s# f# @' v# h7 t
03分析
, m2 |; _( g$ ^  U$ W应用代码在初始化定时器时会调用 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 p! K# N' Y+ N! a8 q0 n' W

! ~" Q& b: T# S
8 z* v( G: ~8 d. u
微信图片_20231126151411.jpg
图4.问题产生时序描述

% I( z& a! T6 [. c7 c2 a% w% U
微信图片_20231126151406.jpg
图5.定时器启动代码
5 {  t  p3 I6 l9 m, e: K( q
; z0 }8 `) q0 i: e0 p# k1 Q# _
04处理0 g2 Y! G/ c4 L/ @1 h
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;
& W  b" j: ?2 c
* C; L, N4 g# N0 r' b0 c6 h9 j, g
# A) r! x2 x4 G. b2 U3 j
微信图片_20231126151403.jpg
图6.问题修正代码

9 c- ~- \+ [  M- L
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
' v! P6 m2 J* F' e# N4 p1 J8 i5 m

' X; Y9 ^. O; ]- V& l2 P; |4 Y

9 C1 W" [5 L6 T6 Z! \' b) A/ u4 a; M# r4 e
, `# Q6 L) G1 G  a5 o+ @
05小结
, H* |! S) W6 h* r" n7 v在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
; D8 {8 a9 }0 d# ]( s, G0 c% y  W5 Q0 D$ [

. h' a* W$ W7 B7 `! h* F转载自: STM32单片机
4 U5 W, z3 W% K0 r: u7 F( z如有侵权请联系删除$ o5 f) k5 u4 g/ U# u8 M; j
4 T( \! s% ~$ r7 @, m
/ F- z/ g* G5 X6 z6 l/ U/ @

+ J; J( t0 S% M! S: o6 z# {; X0 A3 d: N4 o2 u* F# V
赞 收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版