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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s
( I$ b" `+ p1 B! s3 ^+ ]  X0 Q, u* i( i3 l, `' u
b6241eaf4d78470d80fd0e3798321cc3.png
) \2 j9 o" \; `0 \
. C! E& [9 q& z6 S
9 N  g* N: j9 E6 n: ]
基本定时器:5 R/ ^! N# b4 R( f, `3 a
6 q% Y. }. C4 h8 x9 g% K! s+ _
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
( R! H. ~4 l( F) d+ s( V
3 n6 q& G9 M) }) e: t+ V; q
主模式触发DAC 硬件自动化
+ I# [( {/ f. I; c4 J& }" V5 u' V4 e4 T
通用定时器:2 s1 P8 O3 @' w; J' \$ G

6 N2 y: A: z) R) B( `
c07844004e234b34ac06fa0e8c9745a7.png & W( b7 {- s# [4 z0 o

* c. W; O: I2 n+ r
计数模式不只一种:
4 I8 j8 \3 X5 h% J: y% Z3 }. C; V向上计数:计数器累加到自动重装载模式的值后进行中断相应% ~3 A( v1 y+ d1 {+ x. V7 f
向下计数:自动重装载模式中的值向下减到0后进入中断) l  d3 V$ `2 l* n2 A
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
7 b& o0 g. N$ j0 X3 s4 ]  d( \+ T4 m% p5 N
1cd051f0c9514f1eac39f944da83b767.png
- f( S: W* ^( j+ Y- E* ?
3 |. m! D% f7 g! b: E4 A
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1% ?3 m6 ~) F5 [, i8 T$ C/ D
) ^9 Z3 F! `4 p  E% ?
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
; {$ t3 Z& q' a. N
3 v. \% G4 G3 {* C6 g
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
( R/ D  G6 f0 Q) o( J/ D. `$ ?9 `! |+ e, k/ U$ i+ l% f+ s' p
2ef24777045a49b0822575d52a29f220.png
# N6 T' v% P4 S' C* R
! A3 ^. _2 [8 g6 z: f# [
初始化定时器
, H. g% R3 W! [  m+ H, D. E开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
# C+ x6 s. c) G" S0 t0 v$ |
定时器中断函数:判断标志位,清除标志位) K: y4 F$ l( A; {
0 P! p/ `5 \8 y- l
NVIC结构体:中断通道,使能  抢占优先,相应优先级  S  y6 J6 O) K  l6 U2 q! L

3 b2 B: |' b# g8 m9 Q: u
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
2 q- s0 o8 k# D( @% a- y3 e
6 u! b9 n* X1 S$ ~' h
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:) g/ L; B8 V5 I( c: V
$ _5 y' A0 w" i" N' G9 u9 ^
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期5 y% @, y3 Q. x) n* l

4 i$ A, G6 I! v& Z+ _& d6 ~! [5 O
找到TIM的定时器库函数:
* F: e- M# b. m( `2 o5 o
: Q/ \9 ]6 e; }
3a5f28024d5c4b2290dc5cb28720d4f6.png 3 E3 V, h- [3 @9 x; k$ E

; d# A( b" b/ o+ }! y6 R3 d9 g0 E  Q
  H7 y8 q; `/ V' ~' y
第一个:清空配置
1 f9 U" R4 v5 z& [) }% |7 F2 ^/ }+ X/ _/ F
第二个:时机单元初始化
: P, W  B. e: b) A
0 y8 R: H4 d" g  U
Timebasestruct  附一个默认值
" V, \( [: Q* t1 J( w( O
  v6 I3 {+ M7 ]2 d% BTIM_cmd  使能定时器
9 l, n6 i' d8 _; m! m, j8 T! @% Q% ^8 ]/ U: n# y3 l
f68281e4d512408f8347cda171414d30.png 6 s1 J9 n$ z8 X9 [2 D! X

8 |! m* x7 K6 u) y4 u TIM——ITconfig  使能中断
' i3 t& T3 B4 y+ I8 j7 F) c4 C4 N8 W+ W1 U
77458f799cbc4bafa5c17582b98b0af1.png
: Z8 C7 A) n5 x% C: C
# {2 ~) L. V1 k; i9 k. F选择时钟- F$ S& o2 v8 u8 e( R$ V# v
4 ^1 e4 \$ B$ N+ ~
  具体步骤:: h4 }# H  _& |) M1 R- C% I8 ^

, @; j" a5 M0 [
d6a42cf6bf754376a46501b9fda8dff8.png 8 B0 f- ]4 L! K1 U' t8 T. k
3 ]1 a: U. H5 K% x
这里的分频和自动重装值需要理解一下  j: L  b& w& Q' g) G# D

! @6 B) o: Q8 d& g. P, ~" u1 F9 Z% H
c296f3fb1810406f999f06e9dec26e60.png 3 s7 Z8 L, A( _3 B$ y

1 E: s7 V8 O( l; a3 K  |6 a 72M/分频/计数个数:+ H7 H5 c# V' D# L

- @# V# x% c2 n0 ~4 e. C/ ?" V/ J72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s7 E: Y, z+ U% ]- j

5 H. N. {. Z9 C
76c656a4d2914480b2d264f022905074.png
$ u# ~; s3 m6 {. d8 z6 f8 A- b# z3 _. Z4 o/ d, a# @% v
打开定时器时清除中断的标志位
5 L$ K8 E  _6 K7 t1 _' r9 c+ I: ]$ O* Z7 [' n2 g& M
37bea5bb89a64a1b8d17ed82cb47f444.png " o9 w4 X2 e0 N$ E3 U  F# a- l

7 t0 d/ P7 ~$ S/ s0 e 判断中断标志位然后进行相关的操作. F  z( H  v* j2 t3 B$ ]

3 T# G: x6 o& Y" Y4 B/ x外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
1 M3 C! v6 d7 S; l9 A2 n+ t9 O' U. p- _% q$ V
使用的外部时钟,需要用到GPIO& H  v  X  O& T& @8 ^" E5 \6 ~

7 d# `$ i1 M; z& I3 [, u/ w配置外部时钟; 配置外部触发的时钟
! k& q7 W4 |1 J& A  j: M7 j. Q5 h% K- E) ]& y- [0 ?! k2 A5 z2 v$ I
bbb7d542ae65412ebd9cbc88229e51cd.png 6 Q; @8 r' F5 X* b/ E1 H( A4 x
6 H3 x7 ~, j/ q1 G2 [" h# O, F
复用的是PA-0口
# K+ {% c5 q$ z' C; I. |0 y" r+ v
2be0a931addb43299f21f80c46205425.png
3 L  x* i6 h) k  ?! z, ^8 R& R
) U; L. |2 k. F
48f0205c6243422cafaaa3c9e2616264.png 0 I6 r. \. U  y& d/ w" T! \& V, B

# Z2 w; L' W& P8 t; c  z# f5 j. i 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,& H* [4 z1 f4 \" X; s% {
( {, J/ ^, {+ _
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
* u0 Z. U( d6 `1 d; d5 c5 S. V0 X5 [& F; l
定时器中断代码总结:+ B6 Y$ q# r+ I  a5 {$ B
1 ^) I9 w9 [2 S) i. V
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,7 X1 c. D9 b: f, Z4 @4 S# N4 \% P# p

+ `# h& l4 m! {9 _打开中断定时通道进入NVIC
' ]5 j5 B: ~+ R2 g; c/ j
& ^: \; {" \6 O: N9 G% v! j配置NVIC中断优先级,打开计数器
5 U! v4 |3 w! t3 k* Q

$ g, ]1 h) U) ]1 x0 Z1 p# z2 d外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
) ]+ T9 r5 @3 U( d6 N& b, A( \4 G
+ ^& t" v9 Y( J0 K不用预分频 就直接用周期来进行判断进入中断
; I6 V' w9 E" R" R————————————————
% R5 z/ |2 W) ?9 q3 l版权声明:小聪不想秃头
! i; [( y6 R& D! E% R7 x如有侵权请联系删除9 e# J- a  e; I( Q* c7 V  s9 [
/ Y$ s5 s) q& U9 q* |9 R" g- i
  Y% C7 p4 ~( y1 {2 w+ j( Z' h
/ G/ U8 z+ M2 T" v* c
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版