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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s9 n' h+ X2 _5 n3 c" B$ Y$ D
" ?" k3 u7 K( }, ?; H, Q, f2 l
b6241eaf4d78470d80fd0e3798321cc3.png
1 z* P# y0 _' e0 S) K/ Q5 N* [& \+ J/ Z+ L2 r, g5 k6 _; C& ~4 {3 I; f) d
& b+ z) n; x9 d
基本定时器:
5 A$ l+ }/ l( P, A# ^( ?1 B/ g0 L& B! x* c
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
* m$ e2 ~3 O# t! S4 |
" J9 z! H/ v! ]% u
主模式触发DAC 硬件自动化
9 a' }& Y4 I" T) o, D. N* S/ S" c' b% U
通用定时器:
4 y- S, V! U4 @8 g7 ^) m; P6 F7 _8 w3 V& j1 W  ^% }
c07844004e234b34ac06fa0e8c9745a7.png
; ?) w  D. n8 z9 v% R+ N. f; v  R& y6 y: q
计数模式不只一种:
* T1 h3 s/ \5 e$ T7 P向上计数:计数器累加到自动重装载模式的值后进行中断相应0 J  X- z8 g/ R1 p( [" m  v
向下计数:自动重装载模式中的值向下减到0后进入中断( k) N$ D# @4 L/ W# q$ v* c
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
; |" _5 y& L" X/ J& M$ A/ I8 G
) Y& z0 D; F) t% J
1cd051f0c9514f1eac39f944da83b767.png - O! `- G0 N. O0 k+ I
/ ?1 N" J' d$ T" I  E
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
$ A  p. j& E, _. L" Y% i

( y" ^6 d8 c8 w- A 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
" K6 u7 F% \. C

  }4 O* s7 y8 m& ~输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
3 r; P0 I+ P) e
) \0 l5 H2 c, ]/ b8 u9 j3 U
2ef24777045a49b0822575d52a29f220.png
- L" p6 ~! D" o* Q4 s$ d1 [& h, _2 _# v
初始化定时器
  n: R7 v  T) m+ [开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器" F& w  c3 \8 @: s" c* Z% c; G
定时器中断函数:判断标志位,清除标志位5 ?  Q+ G! G& L2 G, \1 {
' Z; u( y- A9 W1 x, a4 s" E9 [
NVIC结构体:中断通道,使能  抢占优先,相应优先级$ x  q) t  V, T( t  T# d

. \4 k% F5 C7 b, J; z" o
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0/ Q9 t1 u% \+ M* r6 l
' Y% o+ K$ m- ^, N. H& m* E: u- d
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:" Y( x$ k) G) S# b' u0 a: p* ~

8 R% \8 P  Z, d( _' p
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
& Q! @9 u  p4 P$ Y8 k- a8 e& l: i% _% J) {' n1 x
找到TIM的定时器库函数:
  R% T+ w  C8 H- r* ]4 r, ~; R$ Y8 u7 h. f
3a5f28024d5c4b2290dc5cb28720d4f6.png
: [8 @) w7 {/ J. ^1 f) n1 A5 h/ t3 M7 R5 S, g7 Q) f" Q; g
; M3 \) L+ A  `' Q+ g$ a: P! g- V
第一个:清空配置
/ h7 Y! O' P  p8 {9 ^1 [
7 K9 R, J, `, t0 J 第二个:时机单元初始化
/ p9 r7 t1 ~5 k) |! H7 ~2 f

' E6 L. ]/ S1 V* L Timebasestruct  附一个默认值7 L0 ~6 m1 m8 y" G# F" F) O
7 }% o) s$ \' E. `' F) q, P
TIM_cmd  使能定时器
5 C( G6 S$ R$ p! S  [. i8 N
/ S5 V% T  R0 i
f68281e4d512408f8347cda171414d30.png
2 d2 W  R( l- T) X5 m5 X

& y3 i) M+ ^! j$ F* `- k7 m TIM——ITconfig  使能中断$ ~' D* j& P9 p  I, k
( _; Z/ f3 ]* Y$ B( {+ `- P7 D5 K
77458f799cbc4bafa5c17582b98b0af1.png 7 z" D0 c: o- V1 M9 W) Q! @( N  k
6 @% y, v( w- l  x7 b) Z
选择时钟3 P5 w8 @) g* a2 g4 Z* `8 J

, h& L. h2 J. O2 r! V  具体步骤:
5 d1 P5 \8 H; s. c/ w' z
4 ], e( c! v  P' T1 R- M
d6a42cf6bf754376a46501b9fda8dff8.png
: h9 J+ k3 X' h& m, M
* [& o6 G0 c" X0 r
这里的分频和自动重装值需要理解一下: \5 s+ |! _/ K  j

* g* ?# _# z9 d/ h/ e
c296f3fb1810406f999f06e9dec26e60.png
  {" w. F* `( @1 {; ^9 z! b1 \% p
6 |/ P1 F0 S+ Z0 K; Z- O& q
72M/分频/计数个数:# l7 [- q8 f4 a

/ }- q; \5 {* g" O% o0 J4 K2 F. L6 ~- S72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
6 F4 k+ F9 l4 E% f; X: }0 F2 @
& \/ p2 i; {3 ]) L$ T, h
76c656a4d2914480b2d264f022905074.png % b0 N: f) G9 [+ [

& U$ \1 @. G! m  Q+ U 打开定时器时清除中断的标志位
- Q* k  h9 x1 c- u& a. u8 f% _# y; k* o- e2 H/ N
37bea5bb89a64a1b8d17ed82cb47f444.png 2 m- W6 U+ ]1 ]9 J( B+ A

: I  O5 L+ h' g% b4 C. f, T 判断中断标志位然后进行相关的操作
' t2 b' Y& r8 l5 w' h: L7 K; M0 s4 |  j+ {: Q: r4 c: Q, I* k
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断( Q; r/ t- L5 \* P5 @7 j
6 w5 W: d& e& c5 Z+ m3 _# r0 l  G1 N3 d
使用的外部时钟,需要用到GPIO
1 l- L' Y# b5 m9 h3 }& ?. p
+ R6 ?( p# ^& _; R配置外部时钟; 配置外部触发的时钟
; V. \5 U; |# @% R8 t7 L# v+ A/ M5 x4 V" ?; R' c
bbb7d542ae65412ebd9cbc88229e51cd.png
( o8 W, _0 Y6 k% L' U& H
* _/ N8 _7 V# I: h
复用的是PA-0口8 k# ~  e& I+ R  s% ]

5 r, {9 u8 @; W$ z
2be0a931addb43299f21f80c46205425.png
. ]8 m, e8 \! {6 ]6 u* z; B4 k. U2 Y& z0 k
48f0205c6243422cafaaa3c9e2616264.png ; M! S9 v5 B5 m6 n+ d' E' N7 F4 n

, `7 j- K/ O9 a 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,: g* E- F( P1 ?6 s; M  d/ W: G
8 C8 P5 f- |/ q2 ~0 ]. Q
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+10 J$ i' z5 y) e& C$ o. p8 }
- \* ]' b; \2 V1 J  u# z* M
定时器中断代码总结:
4 u* k7 c! Y$ o7 N" N. H2 p
) Y; z# _. O( f6 Q打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
( i3 t* ~' G3 V: A4 H  D
$ T  T4 H& A8 d+ X0 Z打开中断定时通道进入NVIC! N# }$ i7 p/ o" W

) w; n6 m* q. j配置NVIC中断优先级,打开计数器
& y) }- p* o/ V
2 ^- |3 s" N5 V: c8 T9 a1 L
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发& e+ B" j6 \$ A+ ^

/ R) H$ Y% \' _! ^9 V) n/ K. U不用预分频 就直接用周期来进行判断进入中断+ \, G0 L4 Y4 ?! L# b) V- Y
————————————————
8 [5 b2 _. P3 ?3 ?版权声明:小聪不想秃头
0 W% b/ E2 I, L& N% x如有侵权请联系删除$ N/ D* C& f" D1 L$ ~; n
7 l% C, z. S. J0 Z

) ^* |! S6 [( @) h7 A! ?# x7 C
/ ~! [$ A& L- |  E
赞 收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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