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

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

[复制链接]
STMCU小助手 发布时间:2023-11-26 15:24
01引言
4 m+ z( t2 w0 [! `某客户设计需要启动定时器在 3ms 后产生中断,其后定时器不再运行,直至下一次软件要求再次启动定时器产生中断,实测代码后发现定时器启动后立即产生了超时中断。1 y% n, O* r8 d" k6 U2 d
9 l, V8 F& v% B
02调研
% h, c' t0 x* h6 O" q客户通过 STM32CubeMX 配置 TIM7 并生成工程,在主循环中添加定时器启动代码;在定时器中断处理函数处理 update event 回调时停止定时器,并翻转一个 I/O 脚指示定时器启停,代码如下:
, P- J2 Q% ]( M( ~4 @- J$ q1 R: H. ^  u" f0 g  O. a% Q  |
" H. S2 v' y( R  V0 j( ~" f$ b
微信图片_20231126151428.jpg
图1.启动定时器

, Z5 ?- }+ e# M/ K; w" F6 c4 q" \# [
微信图片_20231126151419.jpg
图2.定时器中断回调

: L1 _' ~* g) ~' T0 `& U# ?客户期待的结果是启动定时器时 I/O 拉高并保持 3ms,当 3ms 到达后产生中断拉低I/O,但实测时发现,定时器启动后立即产生了超时中断(高电平持续时间约 2us):0 V0 ~% f( U) D! u  h) s
% d& e4 d0 ^9 Y) U" ~
8 s5 Q" R8 h. m9 w5 I: D
微信图片_20231126151415.jpg
图3.实测结果

( w3 e* a+ k" [: m9 s03分析
; c3 R2 n; r; H/ h应用代码在初始化定时器时会调用 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( )时又会立即产生中断,循环往复,详细时序和具体代码如下:) z4 ^* H# F9 b( |4 @* G9 K
" K; z6 y; _, T, k' z& n8 S
# H5 f" p2 b5 z" Q
微信图片_20231126151411.jpg
图4.问题产生时序描述
! {$ y6 i& d7 W0 c& `
微信图片_20231126151406.jpg
图5.定时器启动代码
$ c; ^8 x: [8 v
" u4 K$ ^& F. D$ R6 [
04处理# S& q& K2 @! n, i; t
修改代码,在启动定时器前强制停止定时器计数、清除中断位、清除 NVIC 挂起的中断后,再启动定时器,详见下图红框内代码;" U3 L! w' q, a

/ R( g6 J5 z* x2 R1 G1 o" i9 r0 U! G
# c- P& ?/ W- g: ~3 i; Q4 c7 m7 B
微信图片_20231126151403.jpg
图6.问题修正代码
9 Y3 F. L0 @2 V) p1 @
微信图片_20231126151359.jpg
图7.修正 BUG 后的运行结果
  K0 ]  |  {4 J' A* x6 {
8 o) H1 I; r' g6 `4 W$ I
  z% M& U4 K; Q4 w1 @8 q

  H7 ?  R0 Y7 {  b  Z: |% O

/ Q: j( D4 T: Q05小结# ?3 H4 l) i9 F: q, b" z. s
在碰到这类定时器异常问题时,可以利用 I/O 口指示运行状态,结合代码分析找到原因并加以解决。2 i) U+ T" L6 [$ \) c

! }+ D( c9 x) w7 n+ _+ c
' P1 p/ O8 J' K% f
转载自: STM32单片机
. G/ j; L  c" S* Z9 N  Y+ H如有侵权请联系删除" Q5 N0 _8 D3 r+ E

  R: Y4 \& x! [, w- O0 l! i3 M% l' n3 D2 U; F! b" z

( W# c0 T) U7 ?/ Y
( U: c* ^, ^# N+ L
收藏 评论0 发布时间:2023-11-26 15:24

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版