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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s
9 H6 H8 G- ?! ^6 U+ |( ~1 ~* V& L% K7 ?' C
b6241eaf4d78470d80fd0e3798321cc3.png
; L$ S% u2 K( v: M; N1 o
& E/ S. Q- B; t' w, b

1 M7 K5 R1 i. p3 x5 }基本定时器:  c; y+ Y, `5 _

* I) ^0 j( e3 B/ K( ?- G基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
/ G! D; W& p( I2 Y) ~
, R$ J1 a; {$ Q! P
主模式触发DAC 硬件自动化
6 Y9 O% V* \# |# @$ R/ u
: D. |/ R, i4 T  H. F( s通用定时器:: m" w9 _' }1 G

; v3 h: P; i: B7 U. H( S% V6 I
c07844004e234b34ac06fa0e8c9745a7.png ; e6 f& Q# V  }
3 |3 M, O0 U+ N1 Z5 @8 P# y
计数模式不只一种:
& k; l8 [( X/ o( v& j向上计数:计数器累加到自动重装载模式的值后进行中断相应  T& }. Q2 ?5 U6 F  |: T
向下计数:自动重装载模式中的值向下减到0后进入中断- N+ {( Q& g( w, N" u8 t5 g3 ~
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生. q7 p# |9 n9 k! n1 @7 T

$ v. j8 p( r9 X* Z7 ]6 P' H
1cd051f0c9514f1eac39f944da83b767.png
5 C5 D4 U8 n" C, L+ X3 Y( c8 w

6 F  a8 ^: R3 [" j$ B3 F定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
; @& W5 ^+ U* o4 k' c. G
" e( x/ ~  D% \' R" q* ]( \
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
: W0 F) `- B2 I' l" a, b5 b/ Y
8 ~: i: o. u1 m. E5 O
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
( j5 ?6 S: z/ B1 ]4 i* ^- r: w- j# }+ q+ p
2ef24777045a49b0822575d52a29f220.png
6 S! f4 |5 v$ x* D+ N5 u3 A
  [, v. H$ C4 Q# x
初始化定时器
% H" U7 j/ L9 ~4 Y2 s开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器" P& R" {6 _5 n$ i% R  P! K
定时器中断函数:判断标志位,清除标志位. Q% [' I; a* T  f0 P0 S7 N
0 z3 l; E4 I2 _# s! U
NVIC结构体:中断通道,使能  抢占优先,相应优先级$ t& p; @# V" J
+ Z+ I7 W4 u+ u8 J- k/ A: t5 Y
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
/ @+ w  _2 l/ p0 E7 P, t+ L- |" |  y* u+ m/ g& {8 F$ l
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:8 v; D/ B) B( d7 _& @8 d  _
" }0 x. |! x& }/ y$ X) l( I9 C
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期) E2 b  T4 g, v0 A( M3 Z
/ y4 o# L7 H# }0 d) i' h
找到TIM的定时器库函数:& }1 D5 s) M( b2 l) L+ ^; Y

4 \7 B4 X& ?& r* c/ \7 N5 V% o
3a5f28024d5c4b2290dc5cb28720d4f6.png
# k5 ]" @8 c+ C2 d) E" H
5 w- N7 ?) K6 Q" ?% K

6 c) t. h9 @* ~( k# |% l: B8 O5 ~第一个:清空配置. O) q5 G% B1 l; N0 Y4 }

, B' ?  b; `$ X. K0 L; b1 D 第二个:时机单元初始化
) r3 @, a8 C) r6 R
7 N0 k( a4 Q9 n8 M* J
Timebasestruct  附一个默认值( q. m4 b  O) h$ @0 u/ u

8 N1 k: Z  a( @TIM_cmd  使能定时器
+ s4 R% ^$ k2 \; v1 q: Q& n& z) O+ ^! r0 o* Z/ [, b1 D
f68281e4d512408f8347cda171414d30.png * Y. U) z% ], u
; ~4 n6 R3 D4 \. m' ^
TIM——ITconfig  使能中断: R+ {' W3 o8 U& v+ p/ Z6 o" N4 g

$ p$ y0 {1 J6 n; [/ T
77458f799cbc4bafa5c17582b98b0af1.png ; G4 L+ F; Y  @

% ?$ j5 a+ y6 V1 r4 q选择时钟) V& ~5 k3 v* C; B1 K) ~7 {1 ~
4 B2 x: Z" j$ ]7 q
  具体步骤:3 ^/ Q( Y' O, Y( f

5 }/ f; u/ {! v# ~( ~- w6 b4 {
d6a42cf6bf754376a46501b9fda8dff8.png
# e0 ^1 L! s$ W7 w  M, t
7 G+ p) h/ C  _: U/ e
这里的分频和自动重装值需要理解一下
6 m6 o% G# j* n
+ U0 F% o3 L  @) Q- m/ u& k4 v
c296f3fb1810406f999f06e9dec26e60.png " n' U* L7 k8 y5 p. V
# H( U! U2 S3 u( b9 Y
72M/分频/计数个数:
. ], A+ j9 Q! w* Q3 |. O* g+ D/ J5 U) q
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s7 @( Y4 l7 t6 a2 |% T$ u% T; w

; Y8 q5 I. v$ Y, h2 B* ^7 u0 M  w1 Q! x
76c656a4d2914480b2d264f022905074.png
, o3 X: {1 [' D0 g! L$ ~
3 r5 ]: ]$ d- l6 Z. R* ?/ t 打开定时器时清除中断的标志位
6 p0 J" g7 E5 n$ n: y
& A/ _$ a, B, ]1 M2 n$ f+ U; }! h* E3 w4 h
37bea5bb89a64a1b8d17ed82cb47f444.png
7 i& J" @8 O2 b. R% k7 L
5 |! C& R% G% T9 K1 z2 m 判断中断标志位然后进行相关的操作
' Y2 `& Z! K, Q( N
: `2 E3 J! p% V2 p外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
: n* b! f) ^' L' [: E8 M! Q
7 `( l- z- M4 p( T. s- ^; m使用的外部时钟,需要用到GPIO$ Y: x5 P$ y) _& D$ m
1 j7 S+ G- c& Q5 F/ b# o
配置外部时钟; 配置外部触发的时钟( q! J: p2 x  g/ D' Q* K

0 |0 K) s0 P+ t# o1 |; Q1 k
bbb7d542ae65412ebd9cbc88229e51cd.png
8 a' j+ Z7 b# D  }3 _( e* M, x  N

) C# V: M+ E5 q. D  q 复用的是PA-0口7 x& N/ U- P; k) O$ _

) C& ^+ l, Q1 \. B5 }- b
2be0a931addb43299f21f80c46205425.png : ~( i$ H. q5 S, i

5 S. r( m" U  ?* V: w6 Y9 F- F
48f0205c6243422cafaaa3c9e2616264.png ! }& V$ K0 h' j+ U2 q
9 j6 i; y* n8 D! T" {( {6 z5 [1 Q
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,  Q: Q7 i# L6 N. z) c' ?4 {% L
# K* }7 S  @) b# e
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
7 M9 k$ p. w: X9 H+ m7 T- r' B) M, ?" E8 T9 P8 @$ T
定时器中断代码总结:( J& {- [) X! W, R2 ?2 Y
( R* C* i3 l* r9 ^& o3 v( e
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,: b: W3 v! {  q' Z9 d& T

! w$ {% |" y* w  }7 Y打开中断定时通道进入NVIC# K, {2 S/ x" A0 F% O* B
. O% X6 @) ^- x' [, k2 q+ `/ k
配置NVIC中断优先级,打开计数器
* D3 T. y$ B7 `: U  A; n2 r! M2 }* s

$ ]  f( N% W$ i" {# g外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
( G7 j8 Y* v' t7 O4 y+ z* {( j* e+ c$ y. R0 T' r& W; C+ S
不用预分频 就直接用周期来进行判断进入中断
4 q) z& P3 ?+ v  S. z————————————————
3 b/ k+ Q! O3 j版权声明:小聪不想秃头
2 F2 K0 r+ \' [; Q如有侵权请联系删除
- x7 S  t% ~, k( c2 w' S6 B7 T4 `4 X/ e, J$ a( [/ u; Z6 D8 H

( |" l$ D) P3 o4 M; r
# J) S' G5 @# A) H
收藏 评论0 发布时间:2023-5-1 16:00

举报

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