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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
% d8 Y% D2 I8 H' I" y1 @某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。
* [6 d! f2 V- k5 a. M; E9 u! E) b: E6 G: i+ d9 L+ m- u
02调研
8 a$ \* r! L3 d. X6 W5 ~6 [1 o& y客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:3 K; y2 g; [0 b; |0 y( Z$ K
8 V3 A/ T1 |: C0 ~+ Y! d* }% t' `
; O  {) i9 f: h- O) e
微信图片_20231126151428.jpg
图1.启动定时器
' u5 K8 R1 c4 G- @- F9 j! D& g
微信图片_20231126151419.jpg
图2.定时器中断回调
8 ^% P% @' {; k! E* j
客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):: @2 a' c5 w5 n  b0 [) y

* X  ^3 X4 M, g$ d3 v. s

$ h/ S+ |7 x4 F0 c7 R3 `& v
微信图片_20231126151415.jpg
图3.实测结果

* f& L: f* p$ }0 R; N03分析
) N# F3 @0 o2 g0 v1 b$ ]1 D0 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:
- A/ n* B4 i6 _1 `" ~) P1 d/ n$ c3 D) G5 q7 Q8 P
0 I$ X9 o5 X7 t( A
微信图片_20231126151411.jpg
图4.问题产生时序描述

: R8 i' F4 s- q8 Z& W( M3 F. Y
微信图片_20231126151406.jpg
图5.定时器启动代码
2 Y' y( w; r' h! k/ b' O
2 K& k! s( a" O' s
04处理3 [/ k5 ^6 l1 {$ k% T" |( d
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;/ f$ \$ T; q$ q3 M

( I' f! o& K, a: r$ {

. Y7 `3 M* \, }8 e, X; Q5 d
微信图片_20231126151403.jpg
图6.问题修正代码

1 W! J8 P, g1 q7 w1 N
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
1 X- A2 j7 B. B4 q
6 T! ~" m  O5 g+ I) K' d
8 D7 {" C5 t; y
0 f; S' ~, y# I. J! ]3 z
# D( f/ N- t" f2 P, P/ A+ \
05小结# I/ M9 ?6 h6 k: G
在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。
2 t0 g( U! E2 n8 r# ~
' Q1 ]! c. T5 {2 i/ C) U
% Z$ i( I+ x2 p! Q4 d  l1 s) P- \+ \9 S
转载自: STM32单片机" @- V$ }/ b9 b# p# n! k- V) c
如有侵权请联系删除
2 A4 X6 Z& ~1 u9 O
- Y% i/ x. B% E# A* k& p5 s0 j0 |
  v) S! k" Y+ w+ D- L

' m1 i5 y  l' A# k6 N! h% M& m0 p
收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版