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

基于stm32定时器定时中断经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s! ]" ^7 S! V7 o

( S2 k- t/ l- x  l# F5 n$ w
b6241eaf4d78470d80fd0e3798321cc3.png ' ?( Z7 C! m/ E/ e. ^% D) y2 u

% z+ P# I$ v  R

5 [; E. G8 ~* j5 f! ?7 p, u基本定时器:
5 `- U0 d/ O  \6 B" ^+ H7 A" v
# A6 e+ r1 R4 h, u8 J: F6 i基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应# V3 O2 t2 j  E# u% f$ @

  h' w- |7 I3 ^主模式触发DAC 硬件自动化
) `5 P* X) v3 i1 V- E
+ W3 R8 Y5 z7 y) F& m5 F6 D. Y7 p6 |通用定时器:1 J. P! F! S0 B
; q% U  _- b1 @2 |" \
c07844004e234b34ac06fa0e8c9745a7.png 2 s1 Y) @. e- q( d

9 H( p) c3 Z  |
计数模式不只一种:# c- F3 Z. E& Q# N
向上计数:计数器累加到自动重装载模式的值后进行中断相应
$ F4 r" |- f" A# i$ G& h向下计数:自动重装载模式中的值向下减到0后进入中断/ O1 J$ N6 M( O' q* v0 H" w
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生& e2 \1 S0 I) Y0 F( K* f: x7 N

1 I) r" t& ], y! l/ s: C/ H, d
1cd051f0c9514f1eac39f944da83b767.png
) K7 E. U+ s( X) i
) u0 }; s1 `1 y
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟18 b/ E1 m% u+ @0 f' l* w
' ?" z3 }9 y  u
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
: J9 O% r) v! o" \. t
; `! w, E, F) d  d1 x2 @/ k* @6 s) F
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
; h, S" f0 Y% z* q
8 J% C$ H; n" S! ]: n' X; L$ H
2ef24777045a49b0822575d52a29f220.png
! a  x& P: H* ?/ ^
/ r. l6 t. h, m
初始化定时器
" G" |! ~. z" s1 m% i开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器! K* Q9 b- O# Q# X6 P; e
定时器中断函数:判断标志位,清除标志位
6 {4 K1 z/ G! J. B) X- S- m# x! R1 D
7 j+ _# g$ B/ {/ @0 b$ U
NVIC结构体:中断通道,使能  抢占优先,相应优先级
2 [. [2 V8 T) m4 M1 ^" H+ u% L8 w+ \
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0& L. Y, s3 u, b+ Y" B

* H( m% |4 l! a* V" G
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
' ~* W+ q5 i: L) P$ [! j/ f  ?& F, {( L6 f2 S
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期5 I- B2 Z: w+ P6 C& x. s& [

6 U. z1 w! |3 |, s" g8 x5 M: x- `
找到TIM的定时器库函数:3 @6 ?9 F2 L6 u; `4 Y
$ [0 a4 O: Y; y! o
3a5f28024d5c4b2290dc5cb28720d4f6.png
; o0 G2 T% @5 [: Z  V7 p* u# r6 u$ o- v9 `
' S0 B( D% `9 b3 S( K9 v
第一个:清空配置, O# F* ]$ G+ F+ u# x3 M6 D* ^* C

7 y# D1 u, x) g9 l* \ 第二个:时机单元初始化
6 F( w6 W) V6 J" V; a) I1 ~& X
1 w6 E) B1 J* S! {: @' ~
Timebasestruct  附一个默认值
# Q# s/ U# E: K- E) p
! C6 y& h. d" T1 p. P/ I: |+ R' \TIM_cmd  使能定时器
, n2 L, u: p4 Y2 O( C! X0 B& _
5 o4 z$ A$ k5 {5 `' o
f68281e4d512408f8347cda171414d30.png , B/ j$ M0 z- o9 u. P

. B% B; @* R# d/ i) ~# ?$ O4 K TIM——ITconfig  使能中断  [) M" N* U* s" n! V6 H  z- ~
- s4 @8 B/ O1 A: m( c9 L* @* e
77458f799cbc4bafa5c17582b98b0af1.png   K  v8 m) ?5 R

( N/ f/ x- Y0 q3 i! X+ P选择时钟" a3 M7 E1 B) d

* w: s* i! K+ P+ [1 _' `  具体步骤:, o+ q8 J8 g* d6 ~; u
% y- v7 d  m. {1 x, E/ M
d6a42cf6bf754376a46501b9fda8dff8.png
; P+ Q& v5 z0 a; }0 F0 F! S4 j" x

5 z! }/ [7 z* l: k这里的分频和自动重装值需要理解一下
! o8 B( q& W0 v/ B# Q, z/ a" T; H- W" t$ C( \0 ^; u8 T
c296f3fb1810406f999f06e9dec26e60.png
% H) Q  ~3 \, q3 ^; N" X8 E9 }+ j& M
6 e# _) J' K2 V+ X; D* B# u1 s" I
72M/分频/计数个数:
9 l2 z9 V% f; e4 w2 |3 ~' F$ V, G& f" C% a- s/ P0 Q+ Q" d
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
: f3 P6 a8 B# k' W5 W+ T4 y8 x& p4 Y. g
76c656a4d2914480b2d264f022905074.png
4 B- G4 q+ k; I: c' J# \" l6 `- ~- K' c1 }# g: F
打开定时器时清除中断的标志位
9 F1 {) |/ ?# Z8 [8 ]2 q8 ^' T$ e6 f& b; x% v9 @
37bea5bb89a64a1b8d17ed82cb47f444.png
9 g8 c0 r! _4 {, K
. j) K/ \' O" C6 k( x 判断中断标志位然后进行相关的操作
4 o; e7 O, x. x# @: \, c. V1 L, a, v. M+ @% ^: H. q) ~
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
; n$ p- v" b5 X) a+ N+ G0 M
5 W8 G, u, S4 p  U使用的外部时钟,需要用到GPIO4 I. C9 Z% }2 z+ B4 Q' B
6 B5 d9 j/ r& ]5 r
配置外部时钟; 配置外部触发的时钟6 i" G% X; T! y; \. y: e2 v5 P4 ~

1 a& u9 n0 F- b; I& q  b
bbb7d542ae65412ebd9cbc88229e51cd.png
: o1 S" O8 p5 G( T% j8 R) T# K
: Q; r. [8 j4 ^) B3 g' d: d1 [# x
复用的是PA-0口9 c5 B3 o4 z# b# ?3 T
. z) I' E' T3 f) s5 A# u& U
2be0a931addb43299f21f80c46205425.png : W  j5 T& `1 w5 P7 g4 A7 E

" E; H1 k0 ~( f3 K; _
48f0205c6243422cafaaa3c9e2616264.png
0 v- I- O7 |- D) I% x/ r* D/ M$ T+ L/ g* i% c- r' m3 e
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
" q, q9 f6 v" p- Q" ~5 f9 ^% [% u( a1 s9 r, P" X  Z
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1) T8 O0 K7 v- `2 e7 }& v9 o

! y* h1 H, r( c" p定时器中断代码总结:6 x8 {7 x4 o: z8 ~5 B

3 \* s7 J4 c4 {6 P打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
* V0 v8 M2 d9 M5 S  p" ]5 u" K  }9 s$ t* {) p, f
打开中断定时通道进入NVIC/ X5 H7 M: b; k7 A8 ^

+ Z% E  L; |- c$ H( h3 S- H$ A0 R配置NVIC中断优先级,打开计数器0 Y& v4 ]# J- w
* o* W- I% K4 {+ d$ Q# l3 X3 E: H+ \
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
) ]+ D" A0 B" J5 i4 F
; a0 m, P0 h+ {, v7 w# Q不用预分频 就直接用周期来进行判断进入中断0 ~4 `) R6 S' f6 E9 m1 Z
————————————————5 A+ }% U- x2 J
版权声明:小聪不想秃头) E( s- r1 G* E% O; _5 K4 P
如有侵权请联系删除
3 u4 n0 y- j+ A; {0 j. P" b' t. G$ E8 w/ K1 I

* q. S5 Z4 v' d5 ?' v* O$ d6 }- j3 P
赞 收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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