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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s. [* |6 b& O) z" h) ^
6 X- `1 U3 P$ K% ^$ G. B
b6241eaf4d78470d80fd0e3798321cc3.png
: U( L: k1 d) z
3 |) e/ a" H  h- u3 i' a3 y9 n: l
/ Y: T+ @$ K$ _
基本定时器:4 e3 U" B' [, }; N0 r: Q
$ I( Q8 }/ ^8 P  u5 L
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
7 l2 k4 M% u4 O# t' X7 h! j) X

: r9 u( X  ?& D  x" j& l* @主模式触发DAC 硬件自动化
6 Y& F% o+ f3 j% {% D' o9 u8 T! _8 Z( z" P* Y8 n
通用定时器:
4 {% E3 [! y8 g0 H+ j/ F
2 u" j# O6 `" @/ j% L; N2 ^
c07844004e234b34ac06fa0e8c9745a7.png
5 ~% Z5 i1 R4 ^; _1 C4 `# g- A
- F+ |- v0 _9 c5 G& w
计数模式不只一种:# d" U4 s* d- W
向上计数:计数器累加到自动重装载模式的值后进行中断相应
8 m9 v: K% k+ c& ~向下计数:自动重装载模式中的值向下减到0后进入中断! ~, ^* u* X9 {4 A6 S% E6 u
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
3 T; i8 H6 o, D# Q! r1 q5 g4 [. Y* C* c
1cd051f0c9514f1eac39f944da83b767.png
0 G" Y: {% Z' t! v9 ]2 u: ]

% X; I" y; g4 b. r) P定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
; U1 o# R  Z% V3 _9 Z
2 x/ A& P7 L% X! l
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器1 E2 C$ E4 G2 n$ r: j/ y

+ N& Q5 _3 X( D+ W( a$ j输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
8 M$ W8 |, d9 ^0 i6 J% \& f
+ B6 P/ Q# J4 x/ k
2ef24777045a49b0822575d52a29f220.png ! e4 o0 k' T7 Q  ]) c4 {/ t( u

7 H! L/ _& j# g! i5 l
初始化定时器
0 T$ Z9 G* a8 H- {开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
+ G) g9 D4 N: A7 e! P% m
定时器中断函数:判断标志位,清除标志位, t2 T  D3 t. U, u2 s

7 S/ j2 Z5 i, v9 Q
NVIC结构体:中断通道,使能  抢占优先,相应优先级9 t* E8 Y( |. d' P& p6 d( \
& H3 x) M; J: r/ x: [* ?$ i3 {. v3 c
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0' K/ D9 z! \/ x* j; W3 m" _
: a0 z! t9 }9 O
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
3 i# q1 Z* p5 N- n; B/ i$ T
& w3 Q" e8 W9 ?; S$ f: e; U8 u
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
5 l: x7 I# q* B. w* [6 j6 F7 c0 `3 r( S0 W  S
找到TIM的定时器库函数:& p# b) r1 \; O/ V% r
/ h: m+ ?+ @# ?  ?( v+ c
3a5f28024d5c4b2290dc5cb28720d4f6.png
: t1 w# S' y2 e5 i9 Y" p" P" o& ~% j- j" Y

  ^) D: m! R; D& P8 B$ L第一个:清空配置
6 Q9 P4 W1 T; `' ]: {& M# ^& J3 P) b
8 ^5 m, C% `0 L* _ 第二个:时机单元初始化3 J; _" s) z, u' L- [
, P' N' h+ f/ B* v
Timebasestruct  附一个默认值" V, H# f' G6 \4 k
; j3 E$ E8 u5 S  \+ r* P3 U
TIM_cmd  使能定时器
% q4 j+ ]3 n6 i1 Z3 V: E( G
0 G6 G1 X  o0 |4 Y$ g) R( \6 {% q
f68281e4d512408f8347cda171414d30.png & D/ x8 B8 x6 e$ _6 j6 s
0 i& x8 h5 m+ @
TIM——ITconfig  使能中断9 T3 q. n# O( l4 A9 u. r% `# T- d

) C- @8 H9 o: Y( h' X: }
77458f799cbc4bafa5c17582b98b0af1.png
; A) X$ Q, B; Q$ U$ D' d$ r" x+ w0 R2 S+ h% H, o
选择时钟
5 v' x. c5 L6 y$ t# f  b( v3 K  y4 ~, y4 v- Y
  具体步骤:, [9 |% v- B  Y1 C% U% ~

% S8 W2 |* o8 }* [: D( j
d6a42cf6bf754376a46501b9fda8dff8.png 7 o+ ^) Z* ?8 G
4 f" i; X9 D; |8 Y3 E
这里的分频和自动重装值需要理解一下
8 l& R/ [: g6 Y! Y2 i  o1 ~" k! R
* d; d6 g& A: T- f- ]
c296f3fb1810406f999f06e9dec26e60.png
+ M2 x- a$ ~; t' M; k+ e
/ B* ^0 K$ ]5 D6 L
72M/分频/计数个数:
& b; P: P6 u# N& J) G
5 `* |0 q3 m" o' |72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
* {0 S3 S1 U& i7 p- p  t% ~: W$ S9 t0 x( G' q+ }3 P, Z2 `
76c656a4d2914480b2d264f022905074.png
2 Z6 b  N8 e0 Y1 i2 r
3 K! H, c/ A# X- e 打开定时器时清除中断的标志位
* {9 m! C1 \- `! j$ f7 s/ @: P. c9 s' @" {3 d. d( k3 c
37bea5bb89a64a1b8d17ed82cb47f444.png
. }3 F  q+ ?8 }" n0 s& t1 s% a" G! M# m. q# {5 A7 w, I
判断中断标志位然后进行相关的操作2 u+ G% `$ O- e' g
( @, `3 s0 W: p: |2 i8 x
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
0 D( ?# y! l# h- |1 B* o( D! _# D) O9 l8 {/ ]6 o
使用的外部时钟,需要用到GPIO6 b6 m" q* z/ g5 @1 F8 B  S
; M, o3 {+ t+ u, f% N+ U1 b5 c
配置外部时钟; 配置外部触发的时钟
' j# l/ \6 i; S' i% B" V( P( n0 {
( \; [$ V! h- B
bbb7d542ae65412ebd9cbc88229e51cd.png
* q# ]( D& r0 q+ Q8 }# R* D- d
- O. }1 m4 \9 F, z& _! U/ z
复用的是PA-0口
3 w) Y# W* d. w+ p, I* f6 g7 `+ G  ~7 q4 E- E# X* @
2be0a931addb43299f21f80c46205425.png
3 ?. ~( ?( ~9 j" ~0 x; Z) r4 f
( m" L# [+ u4 P; q* G- q
48f0205c6243422cafaaa3c9e2616264.png % ~/ J) E. T/ a, @/ i

, m0 ^0 \  o/ m* ^5 ? 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
, G& O- I1 o% J3 s7 N- y: g" Y$ g# Z: q0 x( j, o( e$ d$ ~
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1. x: P# Q  I0 ^, G( C! T
* Q$ T: [4 }$ \7 Y! B
定时器中断代码总结:1 r, }+ ~# O1 q9 k: `2 I

$ Y  ]3 R# o. ?打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
2 w3 q, V- M4 b2 q
9 O9 d0 {4 k- c" Y4 E6 A  a打开中断定时通道进入NVIC
  A3 |8 ]* T; w& Z7 P
) E7 }7 }( N9 h/ Z- J  W3 l配置NVIC中断优先级,打开计数器
- z& O( n8 u* n2 U& @% j4 m

9 c' D3 Y4 z) ~/ p0 a4 @外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
' t/ s; U2 @/ G! c3 D
* m  S- w0 v0 N! o' J' w2 T不用预分频 就直接用周期来进行判断进入中断3 U% J6 |8 a9 {. i; c% P
————————————————
3 Z5 H5 n" _2 U& `8 z7 W: f版权声明:小聪不想秃头) r# i* q1 x, ?. k' ~
如有侵权请联系删除
) |* R! W) D, s  {2 L- g+ I& k: D
5 @  c8 d5 w, y+ l2 Z! X  {5 k

- \1 O2 u% y# |. H$ Y* Y
收藏 评论0 发布时间:2023-5-1 16:00

举报

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