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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s$ @* J8 F% x/ _% Y5 v7 f& ^7 }4 Z
- O/ H- _; [% Q
b6241eaf4d78470d80fd0e3798321cc3.png ) R3 H: o$ X+ o4 Z9 D5 S7 U9 P' r

. f7 W  R7 b- G

; V9 R: m% }, D' [7 u7 H) ^$ b( @基本定时器:' R2 v% _7 w7 N

$ Q- I, e+ y# Y/ P' _基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
1 N: L; u# \2 ]

' r2 k6 _4 `3 r9 ~主模式触发DAC 硬件自动化4 H( H* r' e+ c# H

" a# @3 J, L" f7 f; I, g通用定时器:4 V6 r" c' q( u6 [$ r
* n( j: a( n) I% X; t( I, F
c07844004e234b34ac06fa0e8c9745a7.png
% O# N8 s3 R( u: x; {4 m2 X3 @- E
3 C! K+ u5 B7 s( a! Y1 x2 |3 s
计数模式不只一种:
- x6 H- y0 \/ r6 N3 D向上计数:计数器累加到自动重装载模式的值后进行中断相应
. C. R3 @6 m; _9 n4 Q; L; a: S; r6 w向下计数:自动重装载模式中的值向下减到0后进入中断' h' W! I0 ?% d0 m$ }! {" t! X! g
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生; k5 o- _4 y* j
( z+ K5 Z% \! G; n
1cd051f0c9514f1eac39f944da83b767.png
' F% K. B8 b1 E
# o" r- c. D3 u) F; J. r# C+ Y
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1# [$ H% S8 F* O/ q4 G: `" {
4 t5 x4 x1 T$ n
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器$ o% `* S5 s7 V- t
# M* g3 ]* N0 _4 _
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
2 i& M6 ?! R$ q9 u) N0 ~- {" c2 Q
2ef24777045a49b0822575d52a29f220.png , v5 L! a; i9 |8 s2 h# D, ?$ d; m

8 `* C% G" J. ]$ s" }8 G# p8 _
初始化定时器
% J) o3 i& b! B开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器+ s) |. v* [0 f" v* ^2 z
定时器中断函数:判断标志位,清除标志位. I  I* b. e1 @8 S8 J" Q8 y* ?3 L
; g# ^$ u8 o8 p* }2 r
NVIC结构体:中断通道,使能  抢占优先,相应优先级
/ S4 L7 K: K# i4 e  G! q$ I0 m' U9 g/ E6 B* J# D& G2 W' c
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0& e1 q$ G- v0 O% k5 _

: E1 f, U6 w% V5 {2 z7 V* G
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:% T! G( p) ]" b- e1 T+ v1 X' Z$ e

2 U4 k3 D' V: A/ Y+ s
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
) S; H& {0 N& k' a/ b! x. Z/ k/ p6 \9 R/ W6 m: m& Y& J/ _% |
找到TIM的定时器库函数:( a% R$ }4 L* v( X2 v3 }

# c% `3 [; L3 D
3a5f28024d5c4b2290dc5cb28720d4f6.png
0 M( g7 S1 r/ U7 I) X' x( f7 j6 E1 s! u/ q3 o4 M0 k9 A; W

6 n4 r! u3 M2 L, ~0 H+ |1 Y; E第一个:清空配置: ^, [9 n6 I* Z' T

# C* x% p. J/ I  }$ C: @/ a) h 第二个:时机单元初始化; z2 D7 N0 A7 c' k  z4 }: {  s

2 L& w' r2 _7 j1 V' s- E Timebasestruct  附一个默认值
" X( L, Y1 y$ P; A8 z' v7 b: e. @
TIM_cmd  使能定时器1 m  Z, Y: J2 P% ~. v% X' {  ^, S) B+ n

. X: ~% X2 \/ o7 W$ |) k2 s" G" H
f68281e4d512408f8347cda171414d30.png 7 P, y3 b( \% N! A7 D* S5 T( m

, C8 T9 n$ Y* f! H! s TIM——ITconfig  使能中断
7 V, m: y9 b+ x1 G/ o& N1 H. z' _! |
77458f799cbc4bafa5c17582b98b0af1.png
+ Z. q  v2 y, x) q+ j5 V7 p& S. x+ N7 j% e
选择时钟7 K# F  R/ U1 z/ s. a1 @

* |, w5 s( v2 R5 z. q, W: n6 Z% p  具体步骤:9 t! \& Z% i6 H7 }' g( s! M  T

1 M5 p1 o1 Y7 M- g9 z# r/ T, _( f
d6a42cf6bf754376a46501b9fda8dff8.png . i  ~1 g# a! }, U
1 I, N* X% A, Q3 e7 z
这里的分频和自动重装值需要理解一下
6 N. W* n2 e9 X6 X+ F  K  x7 Z  t! F" ~: ^* u! I( H) Y% `" {
c296f3fb1810406f999f06e9dec26e60.png : \6 V% L: N0 ^& g
+ h% o$ V  u9 q8 E4 g' z
72M/分频/计数个数:% X- p5 D" v0 ^/ n
4 J! A6 f$ k& B: ~/ H# s
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s/ V- p0 a0 ~: ^, ?$ b) p

" \/ d+ g4 }0 F. K1 m6 j- U5 \9 O+ F% h
76c656a4d2914480b2d264f022905074.png
% `8 W$ X8 Y: `& ?3 v1 e
7 w' e/ `5 |3 `- [9 p5 n 打开定时器时清除中断的标志位
$ S6 F& y1 `( U- \
5 Y8 e+ m  k9 q9 v, g0 a. A( r
37bea5bb89a64a1b8d17ed82cb47f444.png , U. v" X5 U; {$ J, s  b4 S, P

9 d3 x6 h+ b. {$ t! f 判断中断标志位然后进行相关的操作0 w4 o* y1 Z- n! `  E' N

" Y3 r9 T! @; ]6 S& W" h1 [外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断% {6 k/ R! c4 R; @% b
% ~( \/ b# R+ \8 s( ~2 e- r
使用的外部时钟,需要用到GPIO
. J, e9 c: {! H  K% Q4 @+ S% S7 @( ^/ J
配置外部时钟; 配置外部触发的时钟4 U1 o' J- G  L  X: t8 m
( a* i7 q0 Y  Q  ?# _5 Q
bbb7d542ae65412ebd9cbc88229e51cd.png
4 m- A1 U. l/ O7 D$ p5 b; e  z2 ^$ P
, q, j, G6 I$ _: O5 P2 O
复用的是PA-0口2 W$ \' [/ a( c
2 S' D0 D8 Z) d. S$ Z+ Q
2be0a931addb43299f21f80c46205425.png
- v/ h1 @. u# U/ T" L9 N* M% w- E1 W6 i
48f0205c6243422cafaaa3c9e2616264.png ' o% |2 u0 A, S/ a$ i! U/ C4 `
' J7 ^! Q, g8 S6 ]0 g
外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,8 w1 a5 r: ]2 a$ |; g

4 _; [3 ]% J3 J- e) i预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
, v# l: B  Z) k8 z4 t8 n. R% ^" |
% N2 K' d. I" g1 x% `9 F4 k, s定时器中断代码总结:
; \! E8 w, d2 q( A
7 w* r8 ~! E( z) X; u. X# l, K) i打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,, q- s, D' J! C+ g2 D
- m) K" Q, R& j, w9 t- I
打开中断定时通道进入NVIC( l& f# [2 _9 n3 y2 A! `0 l

9 R' t% @6 `  n配置NVIC中断优先级,打开计数器" M; Q% H6 q* A% H0 v

  v% Z- A* @2 L& ?, Q# D5 V2 [2 X0 l% K外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
1 W9 a. W  S! k# a
5 t3 y& H5 l% \" J* M不用预分频 就直接用周期来进行判断进入中断- h& @6 I) {) i2 B$ P
————————————————
$ h( t2 x& ]1 z3 [% M版权声明:小聪不想秃头$ X( P  F/ f5 o3 n% N7 q, a
如有侵权请联系删除  P7 m% B  Z  _  C2 m& \& i# B

/ X, E8 y% J3 N" K. K8 \9 L
' e+ |4 V. L, v. O/ `8 e# l$ @% n& E) R5 e% y% ^  N8 i
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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