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

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

[复制链接]
攻城狮Melo 发布时间:2023-3-29 17:25
主频72MHz:最大计时59.65s
' W2 \3 _* a  i' B0 d  f, a5 C b6241eaf4d78470d80fd0e3798321cc3.png 7 B/ p1 C8 _7 a. y8 U8 n$ j: s+ q

: k$ Z3 M1 [. z( u! D( y1 G& M基本定时器:8 j* j' c' r( I9 ]* r  ?; ?# K* D$ f
/ I4 a' D: y9 b/ J* u. k$ ?9 p
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应6 U- ?  z/ `+ t
8 B9 [7 l) i! t& z8 F0 n
主模式触发DAC 硬件自动化# [/ _3 ^1 j$ }  t! }4 w
: o( a' d# _. K  ~
通用定时器:2 X& X, a5 ?8 M( R' A: @' s" Z2 O8 T

1 `0 \$ q6 @: r; N+ P- b+ U+ a
c07844004e234b34ac06fa0e8c9745a7.png
, M5 ?6 M! @2 j& [6 v
" L" P5 Z) m& w9 u4 ~9 V  M
0 l8 U* e! ]/ y% @; u4 r
计数模式不只一种:8 w, y9 T" u7 M9 e; o7 n7 R5 k
向上计数:计数器累加到自动重装载模式的值后进行中断相应
9 U  E; ], e6 |% y7 |  q) z向下计数:自动重装载模式中的值向下减到0后进入中断
% b( P7 |  f$ r' r中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生6 q% Z1 e7 @; a- A8 e
! [$ @/ V  p4 k# F# B0 N
1cd051f0c9514f1eac39f944da83b767.png
  G5 L4 ^, S+ r7 q
" U+ J. T" C- j" r0 E1 z+ N
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1 ( c* s, J  R: c- F
7 C$ V& J, h$ d; |1 f1 Q+ {  F2 E
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
  f0 |0 @# l  [( f& f# W' L% j
7 A; J  D" a8 o
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率: C+ {9 ~- r- u1 B0 j! G
, C( l2 d% R0 R2 m8 n
2ef24777045a49b0822575d52a29f220.png 6 S. i. V( h9 f7 I, C! I' u

  g# o4 u! X3 j& Y' h
初始化定时器
) e2 I$ m3 Y* q2 j9 d开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
, s5 C3 F! X1 z- d2 x* t  o7 J8 x2 r/ g
" ?/ h6 w' x1 y1 o: q8 q' ~9 R' ^# v
定时器中断函数:判断标志位,清除标志位& |: j; Y# @' Z9 l. \9 r# L$ e
" \6 u9 g+ U: O7 S3 u; P. ?( ^* `
NVIC结构体:中断通道,使能  抢占优先,相应优先级0 l7 G7 Z7 z; H* X1 G5 f

2 i2 y6 z8 o4 w7 {0 ^, c
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0/ X" V1 y; y( V/ L. m

! D- n- S' c& Q9 n( H/ }
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
6 D! T: r& D7 k9 q- c0 }$ J
0 a& Z' V/ _; G
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
# M. m' }$ C' I% H7 s/ W% c% K6 z$ E, t
找到TIM的定时器库函数:/ Y) `; ^- x2 ?% Y2 K7 U

% e& E9 U2 Y+ e! J" X% P  M0 Q
3a5f28024d5c4b2290dc5cb28720d4f6.png
2 Z5 y" k5 {8 K( v) d2 t9 ?* B
% ?6 K/ s+ G8 b  P: j# F- |1 U
第一个:清空配置% U1 F" y. X) r5 a
第二个:时机单元初始化9 d) G0 e+ ^1 [% _  m. z: @
Timebasestruct  附一个默认值" W* ?# |9 N" H8 D) [
TIM_cmd  使能定时器
7 J/ N- C) C+ k, S8 w; f: ?* _1 H0 z3 C
f68281e4d512408f8347cda171414d30.png 1 U" Y( Y7 @0 f4 }4 d
# L9 Z3 h" ]2 _, W. W7 ]2 @) t$ T
TIM——ITconfig  使能中断* S0 y7 w" _9 J1 W( F% @: |

  @7 `# w( k& x
77458f799cbc4bafa5c17582b98b0af1.png
7 k; S, [3 K* s+ i) H. q
4 p& ?/ f8 h6 W/ {4 \
选择时钟
/ U1 y* D; v7 V  o$ [5 H. U" \2 n
& d) m) [- _  C' g) J/ D/ V$ C6 @
具体步骤:0 _, x, Y2 n8 b9 @
+ H) m% ]7 [5 v3 I9 v
d6a42cf6bf754376a46501b9fda8dff8.png 7 i" M8 @( M! J
* }4 W; o. \/ c$ C
这里的分频和自动重装值需要理解一下( T& ?$ m* r) I# d! H( t0 Z

7 s' p' X7 x& ~9 j# P
c296f3fb1810406f999f06e9dec26e60.png
9 |, [" W$ H% p5 ?& I% V. X% w1 e% V
72M/分频/计数个数:
4 M: @1 R& f' p4 V& ~, y5 O: v" J% ?$ B  s. _+ M) v# K
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s8 |: M' J- y" j
2 g, c, `. D" [: \: L* m* }
76c656a4d2914480b2d264f022905074.png
! Z" Q  G; z9 @8 w

! L: e' y! N- L 打开定时器时清除中断的标志位
4 U; T# \% I: D/ Y5 u
5 |/ g9 d. ]; m
37bea5bb89a64a1b8d17ed82cb47f444.png
& O! n; b* ]& S$ T7 _, @8 r9 s( f9 W0 Y7 q; k: c, E& x/ I, g
判断中断标志位然后进行相关的操作  @2 k& n9 z$ P3 N# a
) X! S& N; Q- u
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
! s1 {  D/ O+ F) i, ]6 q8 Z9 i/ W) b/ A6 I( e
使用的外部时钟,需要用到GPIO
& c" ~/ M& F& ~% F- G; V
4 M4 I) \9 [8 a+ p: M
配置外部时钟; 配置外部触发的时钟
7 O$ e1 t0 J' R, Z6 h( V% U$ Z' u9 |2 }" @. H
bbb7d542ae65412ebd9cbc88229e51cd.png
  T4 N4 H+ s* f, k$ ]+ O+ C
" T3 E/ M; h8 y 复用的是PA-0口
& [# }2 {3 |( s9 _$ W& `( [$ {7 a
2be0a931addb43299f21f80c46205425.png
. ^9 @- w3 K4 g! [& E1 u( T/ x: ?5 H& Y+ y5 R
48f0205c6243422cafaaa3c9e2616264.png
* ^9 r* j( q+ {9 s9 l& N
6 m* y" T0 \; [% X 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,5 ~7 @1 ]% |4 c  l0 M1 G

+ G+ m  w$ i" H& Q; o( s预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1( `  J5 L" I9 e

  Z3 N  e8 Y. p定时器中断代码总结:+ p% G+ I# W1 s6 S' j/ N" o# ]
# M1 R. a' E7 d: j8 S
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
$ n2 N7 P# g( Q  e" A- X  H( j% i
  I8 q& a& u( T! G) c* y3 z  ^
打开中断定时通道进入NVIC
$ H* J' R: D& r4 W

% o, f- @5 B; E4 X/ P配置NVIC中断优先级,打开计数器( l6 ~6 U! I5 T/ G/ N8 D

& V: _3 R) K) ], x) s外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
* m, u' i% g, \/ z3 S* D5 C

6 r8 K9 k1 z2 h3 {不用预分频 就直接用周期来进行判断进入中断
) c" W/ s% s: h" s————————————————1 E9 ]. w* D: g  F: j
版权声明:小聪不想秃头
" ^/ k8 K# h! U如有侵权请联系删除  n* H1 A+ l1 v, J( c

" g' q  w. o! i+ O# h6 W/ b
; I- I1 {7 z/ l( @' y2 Y. h* R: u: G: k0 [5 V" k
赞 收藏 评论0 发布时间:2023-3-29 17:25

举报

0个回答

所属标签

相似技术帖

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