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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言2 q- f  S- R0 G. O8 A# ]# [
某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。
$ I* l3 [( t) e( Q6 m  v: Z. m7 ~5 r0 Y( N, ^3 ^- k
02调研
0 v' v% n6 F/ E$ m) U$ r客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
7 ]5 N0 U; A6 Q2 d. Y# J% s0 B8 S" w2 a! f

* S4 F7 q9 E" p" O; M
微信图片_20231126151428.jpg
图1.启动定时器
  f% e2 ^# O+ h2 h" A& d* ^% L
微信图片_20231126151419.jpg
图2.定时器中断回调

1 P/ ^- D6 S, r) Z3 t- q, u+ R客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):' R4 s4 d: I" H7 `; h- i# K/ s3 @

9 f5 k; }. U, v+ K
' g; {+ ^# h& r& y- F: `4 a8 P( X
微信图片_20231126151415.jpg
图3.实测结果
0 G7 K5 p0 i9 j. {
03分析0 M  X- K) \8 L
应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:
9 q5 S" Z( P( d$ C- S2 z  G! n( c- {4 u3 j9 E) B/ O

9 F% Q+ _3 o' M9 F; Z
微信图片_20231126151411.jpg
图4.问题产生时序描述

) M& _5 s0 X9 j" ?$ E" r& k3 `5 _  g
微信图片_20231126151406.jpg
图5.定时器启动代码
  B* ?1 F; k/ G% o2 h# y2 i6 |' ?, y

' z: I5 r1 W( V! b# ^5 q- h04处理
4 b* r: J9 @* {0 ~修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;
# j+ A% e1 k2 s2 s3 c' C1 w- q' A% L4 y- b- i
. v+ j, k3 w( m5 c$ A' }4 e  i
微信图片_20231126151403.jpg
图6.问题修正代码
2 Y6 c) d& Y8 B
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果

1 W+ z* w& ~* y/ U* m
: T9 |: q% B! Z* ~  f

3 O: a' j8 ?( R) m; s% N8 j# F1 I0 b# J1 [
+ N8 V7 u. l8 ^
05小结8 l9 b- Z+ r8 S( A2 b+ v& _2 ]
在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。& Z2 v" A/ ~& j5 {/ Z. u  \

5 V9 I! a& q& K% ?5 I2 h8 ^
" h! \3 @0 A) d3 X. k! @
转载自: STM32单片机
0 v* Y" ]% G' x2 h1 ^如有侵权请联系删除
' Q' G9 a, a- N8 U; j& l# ?; U) L, E. p* ^% k

, k9 r- Q$ }$ ~$ t9 _6 c

+ Y4 |0 \- F7 y0 U& \: y
( m$ F) b2 e4 D0 ]' J+ g0 M) N
赞 收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答

所属标签

相似技术帖

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