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

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

[复制链接]
攻城狮Melo 发布时间:2023-3-29 17:25
主频72MHz:最大计时59.65s
6 {- s! O4 w! v+ _4 e) @( }& l b6241eaf4d78470d80fd0e3798321cc3.png 0 F5 X- @7 j+ y/ A' [( y

, j/ k# W6 g% L6 h: f  V基本定时器:
( ^; F" @. Q. B4 Q) D
# [% |3 n* Y5 T+ _
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
, z( N3 n! W- W( Y' q" [
4 m, q7 w% p$ T- K" L7 u主模式触发DAC 硬件自动化
3 G: _1 j+ |; \/ {! s$ c$ \: @* X5 y0 [4 j+ `
通用定时器:) x+ T! f1 T- d. ^) r# v
+ }  l% M% _& A& F5 W2 ~' n* E
c07844004e234b34ac06fa0e8c9745a7.png - b# e" s  ]6 ^3 u

# N* W: j# U; Y2 X
- J4 \. {" ^9 |
计数模式不只一种:; e, [; P: z' n
向上计数:计数器累加到自动重装载模式的值后进行中断相应
6 d$ @. x, T6 `向下计数:自动重装载模式中的值向下减到0后进入中断
2 S9 D6 x3 k5 n9 k; d. d4 T) P, s中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生  r/ ?* x5 D: Z4 K( c

* ^& k. B6 ]' q6 A/ }
1cd051f0c9514f1eac39f944da83b767.png / K/ g3 P" z" A) W
5 t+ x6 K9 o7 A7 O# E0 \% Q7 o
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1 - p! J+ ?' _! X* h/ b0 f8 L
! F& c% m+ F. m' o) f: l
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器& e7 i. J5 |$ d* i
6 q8 g0 D7 e; S& A, K
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
+ m9 S; I1 w; D& c* D& w% r
3 V, q- l" n: B$ f& x3 o
2ef24777045a49b0822575d52a29f220.png , }7 X. E0 n' I4 `! X
; w: C( k+ b( a  N! \- R% ~7 s: W
初始化定时器7 M( T$ V+ P6 r3 ~  Q+ t
开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
( x$ n& `- y6 Q7 V
# i' ^, u: @& x0 o! e0 U4 }
定时器中断函数:判断标志位,清除标志位
6 s( V9 i3 i3 o% H) V0 R$ c3 k, N4 B
NVIC结构体:中断通道,使能  抢占优先,相应优先级
2 X5 G' S5 i; ?( Q$ h* o% B$ P0 Z$ g) t5 K8 v- g" E
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
4 u; C- U$ h+ B% L/ V+ Y8 V9 ^, _+ e, H/ ]. g
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
$ h5 `9 ?2 [6 l& N
% w4 P) v) [9 {3 l. R
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
9 z- E) x) ~2 v& X, S; y. b  p1 U* m2 l, O1 D# s: |3 b
找到TIM的定时器库函数:- Q: ]5 h) v1 C- n7 H& N  y- f
% @0 u* }* }; i2 W
3a5f28024d5c4b2290dc5cb28720d4f6.png
5 o2 _0 ]( d& @, x- [( t/ Z; z% o6 j, m/ i, Q& C" a
第一个:清空配置
) y9 P" }5 {0 X2 R5 p6 ?第二个:时机单元初始化+ U, ^: c6 p9 [1 h* ^
Timebasestruct  附一个默认值8 K+ ~, z1 `0 Z! P: x+ d0 g
TIM_cmd  使能定时器, Z; o. v/ K1 t0 Q- L& N4 B# |! i

$ s  j3 Y+ F: p8 m5 y- I
f68281e4d512408f8347cda171414d30.png
8 I  [7 X- i& {7 x  R
5 S# `% V0 Y/ A- a  T* }0 \6 y
TIM——ITconfig  使能中断/ y$ P0 L6 w& Z) g! {. r+ R

( q+ i1 P% h6 a' L& A* X
77458f799cbc4bafa5c17582b98b0af1.png
+ m, f: Z. V0 o! ^' Z/ E! R6 U' M( e1 l
选择时钟
- ~" Y9 g0 m7 z$ F+ A7 ]: e& q0 f. \; ^3 D3 j, y0 K) ~7 _
具体步骤:
( ~- d' L+ v: Z0 s0 \- m
& ?3 y( f+ i2 b1 L- \" i; Q- G! b% \% i
d6a42cf6bf754376a46501b9fda8dff8.png
7 |- w  ~- Z# h2 p9 E# R! W1 U/ V3 S* l) K1 G
这里的分频和自动重装值需要理解一下9 V. u  ~3 r1 n
2 o0 P# X: |7 l" ?
c296f3fb1810406f999f06e9dec26e60.png
& h' B9 |/ r% T2 z  F; F& e
! j0 u7 `/ y8 G 72M/分频/计数个数:) t8 M/ m' u$ H2 F5 D
1 F- B% N7 A) i# O
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s2 [5 V1 ], q0 h& F

6 [; `: P; q& B7 E
76c656a4d2914480b2d264f022905074.png 0 j; L1 `( x! g# h+ V0 I' y5 ]( F

4 U, X+ h% @1 @1 f3 [9 z 打开定时器时清除中断的标志位
* I! t( l2 |  ]% F# {9 ^

; r; a" X4 \! v) }" ?: b7 [  C 37bea5bb89a64a1b8d17ed82cb47f444.png 2 W9 M1 {; L6 L  Y- G4 n4 ^

7 P& o7 F- c. _: p* T3 ^! W7 ~4 J 判断中断标志位然后进行相关的操作# f9 z+ [7 K5 o" L; s7 D

; u6 Z7 a: t/ I! d. n外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
  k- t2 s; d& _  S8 F/ a. }/ l; |) d% ~( G8 n5 G6 m
使用的外部时钟,需要用到GPIO; q3 u1 O" a; T$ d7 K% h/ j7 r- l

  g* p' }2 }1 W% P+ J& r& `, u配置外部时钟; 配置外部触发的时钟/ e( V# N4 r( B% r  @4 M* J/ J
! s+ [! P1 I2 {7 {. ?  u2 Z" Q
bbb7d542ae65412ebd9cbc88229e51cd.png 9 W) c' X* u& Z0 G- E* x+ g
7 J5 Z  _0 e8 J8 g% Y$ c* T. y
复用的是PA-0口
3 y! r* |0 b8 x, ~1 j4 r  V" E, Z6 e" N
2be0a931addb43299f21f80c46205425.png 6 H! G- X( Q2 r. k) C2 L/ J1 s

5 d( }, n4 [- j; ~
48f0205c6243422cafaaa3c9e2616264.png ( F6 H; l* U& x

; a4 c3 a* [+ [/ r/ ?. t2 j 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,  t7 q6 a1 F! V0 d- E+ G
! V) v6 k$ t3 l  \
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+14 `3 l: w& C/ K/ I8 v2 v; ~

: e1 P5 N3 y1 j定时器中断代码总结:
+ i- R3 u$ Q  ~
7 N9 M) I+ b0 N/ U1 X% Y
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,( r" g. [+ ]6 T' w' m5 B) T* n; w
6 C% v) N8 P$ U% a$ h
打开中断定时通道进入NVIC
9 r9 F! V" o) b0 Q$ f

+ _% L* {) M* g+ u/ S. S8 {% b; D. s配置NVIC中断优先级,打开计数器/ N! Z8 c0 @4 n* t. X0 L; y
4 l9 ~& Q8 H# l/ u8 q' w6 {
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
6 `8 w8 L* V& Y5 e) r
( N! T: p' o$ Z
不用预分频 就直接用周期来进行判断进入中断
* M. L- D+ D1 f# }2 T————————————————
, V+ m" ~" l% k' M) N版权声明:小聪不想秃头' F( Q' ^9 X& \2 W. `; B' C
如有侵权请联系删除; K2 Y4 n- J0 i7 o
2 ~# y5 h8 o$ m  T( C' _) P4 b& j

, a. @/ d; t" n' @" V
$ _' \  u9 Z/ q1 H3 r& F3 b" `
赞 收藏 评论0 发布时间:2023-3-29 17:25

举报

0个回答

所属标签

相似技术帖

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