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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s- \: y. A: y7 O0 a6 M& o
" p1 e( z- H+ g- `; _
b6241eaf4d78470d80fd0e3798321cc3.png / e7 S- O7 C8 x& L+ g

1 Z, W; e, f. F' l
% w( h; Q  b% s, R+ |  n6 z* ~
基本定时器:
7 T" ^" _5 r1 _) P/ q
8 f& b/ a/ }4 t2 C. R7 l" W: h基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应1 P# n  }4 }+ h/ k$ K% \+ D
8 y* h, ?% ^& a9 F+ j
主模式触发DAC 硬件自动化
4 C7 L4 o9 K, ~1 |7 L% S# `  u; w7 w6 B4 D2 m, `! o6 g4 [
通用定时器:
& F( G, v' n2 j" J2 q; r- E! d# N0 u- T0 A
c07844004e234b34ac06fa0e8c9745a7.png " P, T! E+ y5 a' f
6 b- j& y$ ?/ J2 J
计数模式不只一种:8 k1 I+ ~  N- T9 e6 t9 s
向上计数:计数器累加到自动重装载模式的值后进行中断相应
( w6 j' V4 I1 M' p% ?  q% L向下计数:自动重装载模式中的值向下减到0后进入中断
0 m! E) N" s# L# x中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生, ?) U" T% ^% @( d: \% r- w- B6 z
2 ^+ U7 D7 O7 L* C
1cd051f0c9514f1eac39f944da83b767.png
+ j$ E" V! }& J+ T$ n+ t

0 h5 b/ U8 x9 \$ X2 u定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
& J2 P; Z  C0 R' A
) @4 p& K( d* @) b: E
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
3 ^  B! ]! Q8 d- `+ y# z

$ r( e$ L8 |4 a+ D6 P输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
' x( p) s5 H$ _) K/ }: k* A5 T5 {( D/ Y
2ef24777045a49b0822575d52a29f220.png
+ a2 X' v4 F  s1 r2 y0 T4 s' a9 P
; G' j/ @7 t4 k1 ]
初始化定时器2 G- w: Y, D+ K
开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器7 q& Y' E2 W, }! n1 J/ c; ]
定时器中断函数:判断标志位,清除标志位( o: @9 v+ b) U7 _. T# m8 Z
0 a9 T& S6 P3 g6 k5 Y& i# u0 T
NVIC结构体:中断通道,使能  抢占优先,相应优先级- ~1 \1 e) G! X4 C& m* d, ^- m

/ n) E) f6 K4 J4 w" u1 ]+ {
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
% z) n" S1 V$ ^$ p- [+ @: t+ f* ~' M$ v% t
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:1 r9 F& a1 H1 c* s

1 `6 N& y6 \# [3 R) v3 {
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期9 F+ |) L; ], g- b. I2 {

0 i/ P! D' V" h4 o5 @1 n9 h
找到TIM的定时器库函数:
* k7 v& ?7 z' `  T  _( e! _3 B" z* i" |" X
3a5f28024d5c4b2290dc5cb28720d4f6.png 1 C. z4 o! N0 M, C: {7 ^( z/ y7 m

; }# E! [1 j+ b3 L

2 _3 j/ f+ s7 @$ e5 c第一个:清空配置
: I, J% }7 N0 [' X' Z5 d
) @& B( C$ p+ g  x8 ` 第二个:时机单元初始化
) x: J' }0 Z; O( F

3 }5 a. E- j7 T# {6 x Timebasestruct  附一个默认值
: ^' X% l- O% E: q7 G4 R* ~
$ a; |' r1 q# S% GTIM_cmd  使能定时器
0 c2 b/ _3 q7 Y6 ~( u
" U1 }4 s! p% b/ I% I2 T4 D( |
f68281e4d512408f8347cda171414d30.png ) T7 L, a2 T' X- F7 q) K

5 W  a: K" K7 v" ]( ~& I TIM——ITconfig  使能中断+ d% n6 \& ?( g" b/ O
4 U; q  ], Q" _$ j+ }3 R+ z
77458f799cbc4bafa5c17582b98b0af1.png
& J/ A+ q3 _" l3 c) |
# Q5 A2 D1 }$ C; L+ l选择时钟# ]/ i  ]& L. o; g' r
  Q/ X- n" Q1 `9 K% [- e& z. j* d: G
  具体步骤:
3 I( i7 Z8 A' @0 V7 D- t. R( m  h; K' k# f
d6a42cf6bf754376a46501b9fda8dff8.png
' h. P* X$ M1 e) K

) i& f$ ]: s2 }& F% {4 I9 G# q这里的分频和自动重装值需要理解一下0 ?; w/ ]1 ^1 G' n5 V

5 i/ v7 A$ \7 z
c296f3fb1810406f999f06e9dec26e60.png
$ V$ B" {6 ]5 d, p! y' Z0 `

( U" R3 B8 z! M, @' a; S9 F 72M/分频/计数个数:5 s+ g; C2 A# F0 N

/ B6 s; D. \* T: d# ]+ O) n: A7 a72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s, i" r3 |7 V$ ^! M0 |
! O8 [4 h' x9 o9 k1 g% h
76c656a4d2914480b2d264f022905074.png 8 C4 M, _2 o( m" b" ~8 v

& p+ m: S! `$ t( E4 O 打开定时器时清除中断的标志位6 ~; {1 @  {) U  S! ^" v
/ |2 N  c5 T$ n& R
37bea5bb89a64a1b8d17ed82cb47f444.png * g- ~0 i/ z. h8 C0 [! h0 z7 ]; r( r

' y, Y/ I' \% y) H- K: R 判断中断标志位然后进行相关的操作
. z) l( b) g; i
" m, U; i7 R& {) K* ^- d外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断- z! j; Y9 F8 ~; ~% f

' c8 Y7 U1 q) C9 \( B; n' K使用的外部时钟,需要用到GPIO' ?+ o. J, P! y, A! s/ r* \. O
$ u& V5 R8 F0 c) q( D/ ~; X2 d6 r
配置外部时钟; 配置外部触发的时钟0 `5 u) U, ~* D( t; l+ ^) R6 T. i

' E. \& Y! j3 Z% C1 T0 }
bbb7d542ae65412ebd9cbc88229e51cd.png 9 O3 Y# y* W' C$ Z6 n" ^, p. \
) A% a; D# P. h! u" {
复用的是PA-0口% F+ d( n; P' k# c1 ^
; t0 x8 G) J. a
2be0a931addb43299f21f80c46205425.png
% W+ }  P, J- \8 d9 `- g2 z# ]2 m: J5 D2 r
48f0205c6243422cafaaa3c9e2616264.png 6 Z! n; O' g+ ?8 c' m

6 Z- ~8 U  n3 W% z, E) u7 b5 ] 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,; w; i/ d% i: u$ K$ l( [5 P
  e2 ?: Z2 f5 g
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+13 G  d& s0 p/ _  _" F6 I  B
3 ^% N0 W0 ]% Q6 C# q' g
定时器中断代码总结:: }  T. v  `# X; m
3 f5 Z1 C" ^# N' [0 m
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
  \- o' S( f: N7 M+ S
& }4 ^, n' s# x5 J) j打开中断定时通道进入NVIC4 V/ I4 X9 }" j6 L: ]

5 E2 u4 Z2 k9 \6 P+ s; f0 v. P) D配置NVIC中断优先级,打开计数器# A1 r* o0 q  r+ X
, r  q2 T! K* k  ^, r( m2 N' e+ |
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
% K2 k  Z0 h" @$ n! \; G
# `% Y7 G7 P8 \# q' S' P不用预分频 就直接用周期来进行判断进入中断
8 u, q2 M( l& _————————————————* v$ c8 q9 D$ X  R
版权声明:小聪不想秃头7 A$ o, `/ K( k3 O
如有侵权请联系删除
. y8 b) W* r2 U9 y) E& f5 X( G* C' s* l- _
5 u- c$ \# I2 X# b. }& r
+ w! O! I0 Z1 r6 U
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版