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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
9 ]2 J4 _* y- x3 }+ g1 E4 l+ f某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。0 p- M2 \: {& r$ \
# d. S  a- ?1 g: I
02调研! Q& {8 f7 E" [* W2 r7 M' V
客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:- T5 t0 L6 i+ D" ]7 |+ \. {3 b

) w% V0 E+ E9 \* _8 Z
5 j: j) y) X4 x! _7 Q
微信图片_20231126151428.jpg
图1.启动定时器
( t- T8 G6 [) f3 w; W( G# M
微信图片_20231126151419.jpg
图2.定时器中断回调
% ?, X% \7 q2 h" K: Z
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):3 t; d7 k6 N6 A$ P( a. h
& A9 I- ^7 _8 X7 ^9 V

& D1 K5 c! o% n0 r  Y
微信图片_20231126151415.jpg
图3.实测结果
9 z& t0 H, O/ r5 W% s; ^' E2 @
03分析. J8 ]3 `; |& i& D7 p) g
应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:3 h0 M# H4 f  e5 H# C3 Q* l

9 o- `7 g0 a0 d) [8 t7 F6 Q& N

) P" X9 a( H  E$ F
微信图片_20231126151411.jpg
图4.问题产生时序描述

( _  L( U; g$ L. `9 p
微信图片_20231126151406.jpg
图5.定时器启动代码

. q% ]0 s% T3 f$ f9 h# l
" u0 W5 h2 x- x7 c( w: Z
04处理0 A0 G, V$ `$ _3 o6 W+ f
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;- R" ~0 X- }5 Z' S0 K# s5 n7 b

" C% d5 M% V2 E: G) c# ~% B+ m
; `) Q2 F+ y! X/ K
微信图片_20231126151403.jpg
图6.问题修正代码
; w9 K( n) h/ s6 v3 i0 p
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果

3 e7 ~8 S8 D* ^# q/ U$ {
7 I; B7 q4 k+ y4 r" |

2 [, p! J5 |* u/ f( V! {/ T
7 F7 y1 ]/ n5 ?5 O* ^" L
& |% K5 g' C# D9 m
05小结
5 x. W7 K3 n( N" m! K- ]在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
. u- v* ]" [6 p, H  s* p$ H! {& h6 L) @" u" p& C/ c- g( u% F
  z$ Q: Q3 ]# t' \4 `: z& O4 Z; i
转载自: STM32单片机
# m# t+ n+ ~+ L- z如有侵权请联系删除% s* R9 X/ F/ P- Q& o' @
3 `$ |! A4 }! l1 t# V; {" g

5 [. L; R( Z. o) _' R, Y

3 ], I; t8 b. t$ K2 E1 n3 r0 r6 s1 Y2 C7 _0 P
赞 收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答

所属标签

相似技术帖

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