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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s0 L5 I! b& r% Q) Z
. d+ K8 r0 A4 |" b: r5 e. G# A% E
b6241eaf4d78470d80fd0e3798321cc3.png
$ |  K$ G/ c( g% y6 ~
2 W) y+ N1 x9 ~- p
3 y& U+ o5 W  n9 D
基本定时器:
, z  c, k; J- P. D7 K' ^% _
" F: k& S5 L( p9 W6 r% V  p" h: z基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应$ [- v% S/ u5 s; i: Z

$ \7 D8 f; y8 e7 M主模式触发DAC 硬件自动化
+ X& K1 n2 b; [$ W6 x3 u, |0 P1 I$ F8 {" J& z0 ?$ g. C, J
通用定时器:
' O" R$ [" Q6 ~  r# d0 @$ w! L' h! r0 c
c07844004e234b34ac06fa0e8c9745a7.png
9 u* Q3 E3 I1 k; a) m* a  ]+ C2 c9 J. `9 f6 d0 T1 t
计数模式不只一种:- w% k! `6 |8 S$ c5 v1 |  O
向上计数:计数器累加到自动重装载模式的值后进行中断相应6 J; y* [: i* c* w; s% p" i
向下计数:自动重装载模式中的值向下减到0后进入中断' l' \3 E2 B  J
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
% P2 {  f" c8 D) P" N8 o. z& z3 O( \
1cd051f0c9514f1eac39f944da83b767.png
9 e; M) m. `9 P: T/ T* N

6 V) e; q8 x8 O" n( I0 e4 s- I定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟16 v+ z9 l& s7 ?+ h

# v. k$ z1 V4 y& H( d( ] 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器6 k7 T" h$ n& r

3 o; Z- e: J% X; t1 p9 q输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率# O2 @1 A( G9 e6 |, R) s
  y! }$ i# d# X4 Q( p+ Q
2ef24777045a49b0822575d52a29f220.png
0 Z4 I  K$ v3 |* C( R
) V2 r/ l. z0 p; ?! {# O9 p
初始化定时器
7 F7 B7 T/ f7 p  R+ ]# K" Y开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器+ u& U( w' E4 D0 U9 J1 J: v- i: t8 R
定时器中断函数:判断标志位,清除标志位9 A0 ^( U* b" ]" m+ l' a7 t

  O  I6 Q2 ], a7 I% B7 H% g4 x
NVIC结构体:中断通道,使能  抢占优先,相应优先级* v; M6 [$ \3 ~0 E2 K  a/ _1 K/ c

3 P0 |  c5 R+ P( p  n) y* ?
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0) t* l) Y: R  V# _( G. }

  h1 O) L& G7 S3 S! C: c
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:0 G; {$ U- z0 ]; G1 K% ]5 P" r

) T( u) r6 u( H6 t( L
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
/ y5 R+ E1 ]( O0 z( x6 w, r
8 T- R( f& f& \5 l% M
找到TIM的定时器库函数:' {8 V3 h8 p1 Y/ i& Y" }. f3 f

, m( Q2 R, a. n" u& }& |
3a5f28024d5c4b2290dc5cb28720d4f6.png ! V* S4 x# A( P7 N, W( t
+ _) B* u& w; w
; v8 t+ l  I5 V/ ~
第一个:清空配置& o& J: D  z  V# S4 Z
* R( t- _3 \- O
第二个:时机单元初始化
4 x- }  C( r- T, L
# ~& z7 T: O/ v
Timebasestruct  附一个默认值
2 K( V1 H! w: \% W" [$ e( t9 q$ g; V2 M
TIM_cmd  使能定时器
9 D2 e( f# o# l$ `" N! ~0 {  L- Y
/ Y7 @7 g, @4 W4 B
f68281e4d512408f8347cda171414d30.png 0 k/ |! O% F6 L3 N6 C" g0 }& ^
  h8 }' |6 O2 Y( x3 n$ ^7 d
TIM——ITconfig  使能中断
3 G  c% _7 P* h% H* v/ k
% ^( j3 D7 c/ Z
77458f799cbc4bafa5c17582b98b0af1.png * N1 Y5 k" F0 ~
# x. v( k8 H! f6 B
选择时钟, ~' C9 _! S' k) j+ ^+ G+ N. n
' Z6 h/ a* f. x. X, i- I
  具体步骤:
% R8 v2 G$ Y% a+ ^
& a$ c, n3 E7 H# c5 R
d6a42cf6bf754376a46501b9fda8dff8.png 0 V6 r, z  D+ Y- b$ t. o4 o' T

& l1 t" K, E3 ^6 v这里的分频和自动重装值需要理解一下0 k  r* N3 ]! W4 \- F9 D9 i$ W( ?
6 n/ N9 p# Y4 ^" M9 E
c296f3fb1810406f999f06e9dec26e60.png 9 ^4 o) |& y# [5 S
$ a* X# G" p; a% x/ A4 D  d
72M/分频/计数个数:
/ q4 U1 o. r2 F; \8 F
4 Z. Z: |8 j3 o8 [8 F9 J; y% k72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
8 a" y2 c% a, l9 z& q4 |! @7 z, z/ t! T7 U* r
76c656a4d2914480b2d264f022905074.png
1 i' q$ r6 j. M' _. v% w' G: U. [: t0 A7 n# g
打开定时器时清除中断的标志位" J0 r! L8 K* j5 Q% z
5 o: [6 q$ P( w
37bea5bb89a64a1b8d17ed82cb47f444.png
4 p9 _1 w; d. r: `+ Z& B, R" |. r" V% O% L+ \! U
判断中断标志位然后进行相关的操作) g$ \6 z. i7 G$ [' E9 L) {

7 ]. X  E6 q  d) C! F外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断- A' d: @7 X( H9 u
; B. G' Q8 }6 u- a5 c! I! p4 E
使用的外部时钟,需要用到GPIO9 d2 E% J; z! m4 E
' x1 c) l& o2 @! h) l
配置外部时钟; 配置外部触发的时钟
, F5 |" E6 P7 a; W1 @5 d4 y9 N! [* a% m3 `5 k1 p
bbb7d542ae65412ebd9cbc88229e51cd.png * w) U1 H: b: C+ i4 b
6 B. X9 d0 @& K4 E# g5 S+ H
复用的是PA-0口
6 y& G5 b, t0 d0 X  {9 U' f. C) [, S$ @( ~1 s0 T! I
2be0a931addb43299f21f80c46205425.png
/ h* _8 q* T5 ~; h$ z/ @; J/ {0 q: {8 y$ u6 B
48f0205c6243422cafaaa3c9e2616264.png
! |5 ^0 z' W6 K6 ], B9 D, x: |1 D7 Q: Z! z
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,) h/ Y+ @' h% m" `+ c7 r
+ o7 s1 ]: q( N
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
; `3 Y; n* X4 ?6 f! Y  ~. f5 x3 |; {
定时器中断代码总结:5 I6 J2 _  \0 b4 z" \) d
. H* W; }, S/ A4 G. x) e
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
. U5 {, M. r4 P- P9 q
9 V9 P; `# y- N" O3 d9 U打开中断定时通道进入NVIC( O( w2 b+ r, h! \

% g3 q( v6 p) {% _5 F' R2 N配置NVIC中断优先级,打开计数器
4 C- m. D, i0 X7 E2 e

  e% ]# s/ _1 a3 ?: ^外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发; E7 ~/ l5 k# c. I
3 D3 k5 z+ Q) b3 v$ u5 t  Y
不用预分频 就直接用周期来进行判断进入中断
" Q9 O8 [- n4 L- G————————————————: h5 H5 M; c8 ]3 h- ?
版权声明:小聪不想秃头) a/ d! t; ]. k) t3 x
如有侵权请联系删除
* |, A( {2 k; h
! v: j( I* N' @6 a' i( e4 b5 E. Z0 E* `# |+ D7 x: t( h: p0 l
. k) l( h9 ]) K3 O. y' k
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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