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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言2 H& Y2 S  P$ X% w. X. E$ c
某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。! N8 |- x" {3 l+ X
0 g9 d7 H  P9 A* r  s
02调研
8 ?, A1 D! h2 o7 p) X6 `7 W2 h客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
* P& u8 n, T, k1 b
6 O/ J/ q( ?! V' r7 m% Y- g
4 i  J' a1 x0 M+ X1 u8 G3 ~! C
微信图片_20231126151428.jpg
图1.启动定时器
% x5 v" Q  R5 ]' `8 i
微信图片_20231126151419.jpg
图2.定时器中断回调
4 `- s6 P: W6 B2 c$ X( T
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):
: W* R  M, ~1 l+ f; [. w/ ~& j: |
( N8 N  \' Q9 {* E$ {% D
' w1 }& ^2 Y; b( ^+ N/ Z
微信图片_20231126151415.jpg
图3.实测结果
; M6 ]! [0 C, ^/ \; E9 W
03分析
* D, N5 u4 M4 Y/ ^+ r应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:
% K6 E. P+ C  f5 L6 ]9 k5 w/ F% o) Z; R% Y$ r% Y* E* `
- j0 u1 X/ h; [, a5 V5 u* t
微信图片_20231126151411.jpg
图4.问题产生时序描述
) @( K) z. e, \
微信图片_20231126151406.jpg
图5.定时器启动代码
2 H5 Q) Y  ^0 @

* Y% B: Y$ j* q# K( Q3 z8 g04处理$ J" `. S1 L. a6 w2 G: J% F
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;% B- u/ I  K- H' y6 \
6 V  ~& v* a% [  H" L
- b) u- w8 |- e6 c: P
微信图片_20231126151403.jpg
图6.问题修正代码

, V; K& i1 K; R
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果

0 J5 |6 T/ W! K$ z& t( }1 ~$ l* i

& t9 s1 X' m0 w- E* B
9 a6 X9 o* V% B! O* e2 H! m

, H  D& H; o  ?6 s, G8 f' {+ K
: \" u& w& Q* B, m
05小结) ?( X, O# h! Z4 c
在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
- n# F1 k  [) J3 v
2 `7 `+ @4 n8 |" d! f1 J
. y% W# @; X9 S# s; x; z& y
转载自: STM32单片机
" [7 S# e  G* u6 f如有侵权请联系删除- ^; k% n2 Z& `* `
) I- b) u% J) Q4 C& e- t7 q
4 s/ r" B( J5 m
, w& s3 A5 y; e% |) I- e7 b
" u/ J. C( M' C0 t
收藏 评论0 发布时间:2023-11-26 15:24

举报

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