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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s- b5 Q( G! m& C  k/ }

* [7 c# a6 ~. _2 Q  ?5 ~
b6241eaf4d78470d80fd0e3798321cc3.png
0 w9 ~# Y# z! U2 {3 z% m8 W( M) s" }' q. B: H3 f. C6 T

4 [: }% B# k1 A基本定时器:# m5 P  n) c2 G+ [  }
" j# V# G" T, Q2 L: [8 c* J8 l5 n
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应# g# q: T8 b6 i. p

3 o- l2 g' P7 r$ W2 ~9 ~主模式触发DAC 硬件自动化
" l& Q" \4 S- i) H0 ^5 M: i. ^5 O  I! G6 m) G3 a2 p
通用定时器:# k* h, X+ @3 F% c
3 s7 z) r0 R6 g7 k
c07844004e234b34ac06fa0e8c9745a7.png
0 x$ p  O- n- P" f- ]2 H; ]" e" ?! @/ T2 t$ ?" y
计数模式不只一种:
( O, o, s& R  H! k" N向上计数:计数器累加到自动重装载模式的值后进行中断相应: A& x0 t& M, _3 f! @% E
向下计数:自动重装载模式中的值向下减到0后进入中断1 I$ I. Z- P1 V! G& `  Y( P& K
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生5 N. N6 D* J" h

( V/ z: R' |  p' ^
1cd051f0c9514f1eac39f944da83b767.png - z% k4 i& b1 H- P2 M

: X" c, ^& O5 x# W/ |' @定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
' O' V) z' m. K

1 T$ J& K7 o  H9 W* d 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
; u+ l  E* o+ d: k$ O$ N3 ]

: t6 V* P/ \: L- t4 Z2 s) `6 g7 V+ d输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
7 q+ A9 z+ ^1 j. d5 I( ?) j5 t# l5 x  e& j$ Y9 j
2ef24777045a49b0822575d52a29f220.png " S5 ?8 j6 @/ C

! ^3 F( q9 G5 D6 {6 A( \
初始化定时器" F8 v7 i# z% h% T( ~' l. F
开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
( Z7 R, R2 O/ S  h/ L% I' ?6 J2 Z% O
定时器中断函数:判断标志位,清除标志位
$ |0 M. s6 v% {! O5 E* K# @5 C, L! ]" \
NVIC结构体:中断通道,使能  抢占优先,相应优先级
' y' Z# Z% X' p/ _* Y. m5 C
1 d5 f2 o* R. m8 p) s  J! K. Q8 r6 v
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0' g1 a  y( U4 E: G% g+ l4 c) U4 b
* C7 e% q" T8 G* j
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
  o8 B; z( ?! e6 o, A7 e0 o& i: J( O
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期- `1 K0 I/ a2 B  U6 b$ d
3 a, u2 I. F! c4 |
找到TIM的定时器库函数:6 Q7 o! N' x. I% U

7 v. s1 W0 j, K1 j( M
3a5f28024d5c4b2290dc5cb28720d4f6.png 2 A9 Y( K) }2 g0 N' s& S
/ o- x- A1 n4 I2 ~- U1 z4 s
. V$ t- r+ q# w+ Q1 G+ q: Y1 T) z2 v
第一个:清空配置
. ?. C: `$ u8 I, N* a6 `6 n  p7 Y, ?
第二个:时机单元初始化
9 c( m3 x; j; `5 r

) d) A) K( V9 i7 r; W6 C, ] Timebasestruct  附一个默认值
) ~/ J2 n( x: r6 ?; {% _0 C) p0 _, R3 g* P
TIM_cmd  使能定时器: B: U2 p( c; R2 p1 y8 M' t9 m5 l

; ^. n4 O6 y) e& O" o) h
f68281e4d512408f8347cda171414d30.png # \. k: |8 F, E% }% W

! k7 m3 c3 d! J0 d# o$ p TIM——ITconfig  使能中断3 E% ~3 O4 f% C# Y/ ]7 P3 N

# ^. \6 q5 L4 L8 t; l* q8 o8 m
77458f799cbc4bafa5c17582b98b0af1.png
, a8 S: w6 i6 v! b
: [. k; B6 ]0 E# Q选择时钟
" J/ g4 `3 B3 g) o* Q; r4 S5 X  f  x6 y! S
  具体步骤:5 R  ?' t* D: b: p
$ ^: ?1 {2 n% D# Z+ j
d6a42cf6bf754376a46501b9fda8dff8.png
' V/ _. {5 @# \$ m6 Z

* g. N- ~, P) u) Z# g这里的分频和自动重装值需要理解一下
0 y) Y9 A6 O3 }8 i
. g$ F2 i1 O; S, }- R0 W# J$ f
c296f3fb1810406f999f06e9dec26e60.png
! C4 k$ x$ d* L; Q2 d
: H$ r4 v1 B8 t8 w* w5 ~) N4 k# I
72M/分频/计数个数:% \( M2 }' L: K
8 j1 R) S. \6 d/ n8 ?4 b" V
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
' r9 q9 V$ |6 H& J
3 y) k, a( S# f1 c
76c656a4d2914480b2d264f022905074.png 6 W8 t" q7 n1 j6 U. h

6 q$ @# ^) J) h% j% A! @  p 打开定时器时清除中断的标志位
4 R* A! @9 ]* o4 M' V; j
, k4 A. r7 ~1 V  a" B5 h
37bea5bb89a64a1b8d17ed82cb47f444.png ) ?# _! k1 }$ h

3 w. m# d# @& P' k: \% z 判断中断标志位然后进行相关的操作
0 l& A6 T, w8 Z; E; C! f( D5 A  P% d$ M. `  U8 ~
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
' d6 E$ G( D' p1 `% y% F1 h: J+ ^) `  S" X% H2 C
使用的外部时钟,需要用到GPIO
  w: a. ]7 v+ l# T2 |* Q/ h
8 H' x7 S9 E& Q  @: G! v# u+ T配置外部时钟; 配置外部触发的时钟! A' f" R# k2 f4 ]" s0 e* j

) ?4 v6 [3 [) g" L/ j: J. a/ v
bbb7d542ae65412ebd9cbc88229e51cd.png , C7 O$ \5 g. G& V" |

5 v4 K7 L4 \! C2 r; {( N: X. P/ U& U 复用的是PA-0口( q, x- R0 w' Q2 u

  s! k0 V; ?$ n  m& e4 u
2be0a931addb43299f21f80c46205425.png
1 u# x5 y+ y' f
  m: Q2 o  }3 J' Z% G, f
48f0205c6243422cafaaa3c9e2616264.png $ N4 O" v2 i( A0 W
( B2 p; V1 U, ^6 q
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
( x# X% T: D2 b& [( Z) h
6 q: ~) R7 Y; h8 X预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
9 S8 u7 r7 j; r0 ~5 _% g, S3 D7 f% j3 g1 t; [' ?
定时器中断代码总结:
1 Q5 k. E: d, m# E0 X
9 h" I9 ~1 s* N9 Q6 }+ H! a打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
! `/ |8 N6 |( w* ?0 t. H
6 B0 d0 D. g, ?打开中断定时通道进入NVIC" O& V. r6 r3 q1 j8 n* ]: B

0 m' k/ \: }2 j3 e2 l配置NVIC中断优先级,打开计数器
# L7 N/ Q* l5 N2 H
/ R" v& V7 N( Y+ H/ [+ T2 a
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
4 \4 f4 s8 h0 {& ]0 }8 R# K! j( D# R; l8 `: e
不用预分频 就直接用周期来进行判断进入中断& P/ O$ |; G$ T1 n" j
————————————————5 ?  S* ~1 @5 @. D
版权声明:小聪不想秃头2 z: [5 ^1 }4 C9 L: P! X$ u
如有侵权请联系删除
& H# ~+ C6 i' o  b( ]5 Y. m# C5 `
$ q5 ~, |+ A7 m( k; P- @# J' [5 O  A7 p- M+ k7 I& T

- m8 O5 m2 u/ f' ?$ E( H
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版