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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
5 |" O: l* V+ N4 n4 J% b& `# E, A某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。
* P6 G% s) v% q. x# ]! i/ ]( B
/ L9 K9 _! N$ B: `/ ?02调研
# [! n2 g. _  y客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:( ]5 v: D6 a7 X0 w4 j

0 e! f" @# I1 j7 Z: J5 K2 h
0 {" j0 _; X( x
微信图片_20231126151428.jpg
图1.启动定时器
: o7 Y/ E2 D6 v; H( y* t
微信图片_20231126151419.jpg
图2.定时器中断回调
* f1 ?  D$ z3 r) `$ m
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):4 W* T! y% @+ I: N' s+ D

4 I3 I7 E4 @0 b! b% Y  t" N! Y

8 d3 F: s5 g* m
微信图片_20231126151415.jpg
图3.实测结果

4 }* U0 ?$ u4 K: j1 P. b+ Q/ y03分析
2 `& K0 W" [  i0 Q7 Y/ Y应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:
4 p; J: F) c$ M: V2 t4 M& j4 F! K* h
- o* e6 p% \, G

* M& e4 ]& Y7 c, p# P* x5 @: R' H
微信图片_20231126151411.jpg
图4.问题产生时序描述

! z" ~8 C( V9 g
微信图片_20231126151406.jpg
图5.定时器启动代码
) E; q0 D. c. r* G( o
1 S2 }) {2 p: ?/ k0 i7 t9 r
04处理
6 \9 E& S: S; S5 p" F2 z修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;
4 h/ i5 {" x$ v8 h0 l+ v+ W9 ]( o5 B' x' D
" i2 Y, K3 R' G! l' p/ U9 c; A! k  M
微信图片_20231126151403.jpg
图6.问题修正代码
9 [- b2 ~6 z1 Q, e4 j3 [
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
5 F& r* K( k+ E! |1 j7 q, `  u# b* w
; Z0 C5 r* K$ H* d

8 U2 H+ ~0 X! I: f& w6 o( H% Y% f2 n
* u  q3 S/ n+ P, h& w* g. U3 E
: d3 s' }  P  h) N
05小结
/ O2 B. ^( B6 b( K4 v* f5 |8 @在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
" [1 a; l5 U' ?8 j& `; h
- {0 N% M+ w- j. h# U; A, A

+ c" K4 e6 A6 k6 _转载自: STM32单片机, x8 _+ `% O# n
如有侵权请联系删除
' P- x6 n) a4 }' K; b6 E- r$ n8 Y* f# m6 }

8 o& T4 }" F, t! L
. J$ }$ z" O$ }' i

! ?  \' R9 C5 [  }8 d' s
收藏 评论0 发布时间:2023-11-26 15:24

举报

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