请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s
1 [- k* h+ `& _+ X) ]1 q# G( G: e: S; S3 T7 ^& H
b6241eaf4d78470d80fd0e3798321cc3.png
) T$ [2 Z7 z/ `9 m! S: E5 u# l& _' w' [; J

' j( b6 D9 p$ Q5 m3 b基本定时器:! q9 |7 M" l" ?9 V  l* H
! g9 ?. O$ W+ q" W$ N$ v
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应0 Q( l* k0 ?' w2 Q. R/ b

+ u* |  s5 C$ R' F7 ^' m主模式触发DAC 硬件自动化
1 {3 E- m/ o- M+ S8 E! J; r
* X! {1 u& Y+ i: ^" O; ?  b' P( e通用定时器:- y) O5 }  W& g) V. Z$ R
, U& a# L; {# ^) ~# E7 I/ g' g
c07844004e234b34ac06fa0e8c9745a7.png
/ ~8 b2 x' C5 i4 l: R" v9 E6 v5 m* J6 i8 w: A$ I
计数模式不只一种:
! H9 {* ]3 B) O; q5 P向上计数:计数器累加到自动重装载模式的值后进行中断相应
& B( `0 H6 ~8 Z: b/ t/ U向下计数:自动重装载模式中的值向下减到0后进入中断  S2 I9 `3 ^- Z. a
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生( D! g, E4 h3 a9 K5 C. A
& z% W! A7 X7 V1 l' p, }
1cd051f0c9514f1eac39f944da83b767.png + z; C' D& ~* Y" _6 |
1 u3 k8 C( @: U" w
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
+ f! ]; N' l& r$ O: X$ J8 d

7 q# n( q- F6 V 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器/ c( ~$ b( ]6 J% n9 W

2 v& X& E* I/ a+ `6 h0 T% T9 U输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
! R: P+ Y# s" L
. o$ J5 q* t: q  _
2ef24777045a49b0822575d52a29f220.png
( l9 l6 ~+ e9 [1 a' y5 \; ?
& a* g) A1 T7 |) a2 ]" a8 Z0 }
初始化定时器
8 y$ M' W! j. ~+ l8 ?' z开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
0 o: W) |$ z% W4 {
定时器中断函数:判断标志位,清除标志位
; G# p1 |! G* Z9 l# a4 v; E# @8 D4 L' Z. z: A8 e
NVIC结构体:中断通道,使能  抢占优先,相应优先级
5 B  R2 J) m4 I) W. V- U4 _( }- y
4 D# j0 M' H& \3 A$ ]1 c. Z
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给09 J& E/ W) x+ a3 Y0 R1 J) V4 O
# p  H, i5 H7 Q7 |7 A
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
9 S4 o* p  ]* I' }: @0 ~. n4 l) N9 F  j3 |
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期2 U  F& ^) _) b3 K+ k( |! S
. y1 K/ e. ~4 r% n4 c
找到TIM的定时器库函数:9 U& P% e2 T0 s8 m  Y' w

% x4 W' f' a0 e1 U( d! n
3a5f28024d5c4b2290dc5cb28720d4f6.png & L4 f2 f5 Q/ n9 m2 n! ?
3 l7 h- L) m  B7 [2 y
! @4 [3 U( [. J: c4 A4 _3 M  d
第一个:清空配置
" a: N3 h/ ~" }1 ]* M; U/ b5 V! j' ]6 E
第二个:时机单元初始化6 c, \% P/ y( \6 ^) F4 ?- E

  x) M  O0 I. l* r: L Timebasestruct  附一个默认值
! E* F( A' O2 M, A0 k, |' z6 A- s% L. z$ {& i* N: {2 `$ r
TIM_cmd  使能定时器) c/ h7 j+ ~2 o6 }/ c5 h

; z" w, G) q* `% {
f68281e4d512408f8347cda171414d30.png ) Z. W0 b/ Z, D

1 c9 R" B  D6 j! f2 v+ m6 r TIM——ITconfig  使能中断
" x! X! J, v5 d4 V5 N7 N, V- Y. K! r- V& H- ^  n
77458f799cbc4bafa5c17582b98b0af1.png
. S+ p" v% |$ f% ~0 ^% H7 \9 w! d$ z# ^& K
选择时钟& c2 O  I% i! p/ @: _: ~. r
1 [% E$ _) C+ A6 A; [5 P
  具体步骤:
; ]3 c3 x: x0 ]9 C: ?! e3 d  ~+ f9 l* t( h1 Q  \9 J  u" k) w% `! `
d6a42cf6bf754376a46501b9fda8dff8.png # l% {0 S7 o7 A( l2 H, m8 l

1 d0 P# W% i) u7 R! j+ y这里的分频和自动重装值需要理解一下
) C+ }( _3 p" r2 S6 |: D& c
4 x5 Q; W. \3 c
c296f3fb1810406f999f06e9dec26e60.png
) Y9 g- R. h5 k. M. E
( q! ]2 L3 g: x+ t- }% Z, I
72M/分频/计数个数:: \- i" C7 }: X
& O: {/ \- C; f- |4 J! F
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s) F: T% G* \% Y+ ]9 f6 W" z, g' r8 _

0 A, v( N( S6 v2 r# N0 {
76c656a4d2914480b2d264f022905074.png
( \. L* X; e+ w8 \8 o& V& Z
9 X6 d+ H& Y# V' Y/ d$ u# s 打开定时器时清除中断的标志位
. I: |+ H5 o( Y6 H! B' P0 D- f  j! S! l% [) Y3 U( @& g. Z; Z5 z
37bea5bb89a64a1b8d17ed82cb47f444.png " p+ D7 B, N( P

+ m( M, |* s+ e" A2 j) k 判断中断标志位然后进行相关的操作% D8 }( Z# `, h! L# u4 X9 _
% E7 p$ Z( i, M2 a
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
+ I3 S2 A2 v6 k: y0 B- C
' \& ~2 n/ t7 y8 Z/ A- K# V! K使用的外部时钟,需要用到GPIO
, D( r9 A( @; P
) s2 E4 S; }% ~% m6 d% p3 q& ^配置外部时钟; 配置外部触发的时钟
: h$ ^! u0 z1 d3 S
& \5 [# Z* J0 A
bbb7d542ae65412ebd9cbc88229e51cd.png $ ]# b* c2 l7 R/ F7 }( J

2 T5 P8 F- o! j0 c 复用的是PA-0口# Q9 ]8 ~# C9 {  \+ Z8 h

. l) X, Z4 \) l9 m0 i+ L( \& W/ ?. i8 K
2be0a931addb43299f21f80c46205425.png
* P# `- C0 |* X& C
& k2 W9 y* j$ y
48f0205c6243422cafaaa3c9e2616264.png 0 |1 m- C# l; |. \

5 b2 f- y# f+ n3 c5 s 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,; m( H7 y: ], w

" d2 x( R& Z  S  N+ K预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1% L6 d& P1 F& t+ }! M3 q7 i' W

0 W8 z) _6 A! `4 ?  m8 _定时器中断代码总结:) S* l) R5 `6 J) Q" m3 @
- h  c/ M2 n( z) u
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,0 w; y$ p6 L/ P/ W  t

+ W) s# ?- m( U& G( ]8 h4 I' G打开中断定时通道进入NVIC* z2 N/ |5 }" e
/ w4 l5 v% ?5 i
配置NVIC中断优先级,打开计数器
* ]) P+ V$ R( F! m
- Y8 K. f6 I5 c" }  v- b
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
. H% T1 m7 _' W  k" M$ S% x3 |5 [7 u& L) [: T' ]( i
不用预分频 就直接用周期来进行判断进入中断
3 N  G* D; f3 u, {7 G————————————————- Z7 F* }, P6 q4 r1 t4 a) y" I
版权声明:小聪不想秃头
/ Y/ a) Z: B2 U$ b" R: C4 d% _如有侵权请联系删除' A1 H, Q! N4 x

8 ?" [5 B, ^7 u" W: f4 j2 ^; ^3 y( h/ w, R  x; n! s! Q

: u& X7 \4 q8 P; M* j' @
收藏 评论0 发布时间:2023-5-1 16:00

举报

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