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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s( W; V4 \) [2 n9 R6 C4 P
$ D& C9 I" a) j- D% @! c, ?
b6241eaf4d78470d80fd0e3798321cc3.png / X9 S* \7 ]  P

& k" |4 H9 k8 _
, B4 y5 J8 Q# o. E# L2 n/ u3 O
基本定时器:
! A9 [% L& z1 E- A' b1 b# I. A( ^7 _- a6 ~* k) c
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应" y9 N6 }  O" U

  E4 W* O  q5 s9 v1 m主模式触发DAC 硬件自动化
$ a% A6 }- H/ o- `: [) S3 j1 D5 n! x$ D) ^) _; w  ?' ]
通用定时器:# C$ i+ t/ H! j# n6 t6 _% z

# L- e& S" o4 N+ E9 G
c07844004e234b34ac06fa0e8c9745a7.png
. V4 y0 w9 }2 ^2 s9 I
9 W  l2 w5 @; i8 e6 F
计数模式不只一种:
9 l- q  i' [/ Z1 C/ b向上计数:计数器累加到自动重装载模式的值后进行中断相应# r3 u8 I% Q- S3 ?
向下计数:自动重装载模式中的值向下减到0后进入中断
- a" W1 ^" M. Y* A, V中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
6 n. P! H$ X% _
8 k. ?& l, C8 e& E" R+ y
1cd051f0c9514f1eac39f944da83b767.png / N* N- D, Y* V  l/ D* D

" B/ W+ M/ X* I" w9 b4 b定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1* h/ i# v+ v7 K3 a+ O# }9 }

( W. W: I5 S7 b9 X% w 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器; r3 b8 x; z5 T; C2 b
0 N" P9 Z8 Q$ q" c* x- H) {* M0 }
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
" Y" M5 G! n5 X' f  n- e" P6 j/ J$ }. b0 T" j; L( v
2ef24777045a49b0822575d52a29f220.png . P) V! j8 ]8 M' p. q
* n! o* B+ f0 T- E, L9 W
初始化定时器' @5 r% c: \* H2 V; ?1 o/ M4 y
开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器( O/ v7 |2 v: P) M
定时器中断函数:判断标志位,清除标志位) J9 m( d$ M/ M! t- k

0 Q; P) u- h# r* ?! v
NVIC结构体:中断通道,使能  抢占优先,相应优先级
5 p6 W6 E: C4 O' I& }, {) L% q! r/ v& e9 h
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
/ Z3 _8 {' ~2 r
# s6 `8 G/ N& E7 f  E* Q( r/ d0 K
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
& A5 N3 p# Q/ n# r7 J2 v
0 t3 z* B2 b9 t6 P5 P* Q
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期
2 Y4 i4 x3 z& B* w" K$ ^! C, p% m
6 |- n9 ~4 Z  }! @( V# @4 h! k
找到TIM的定时器库函数:' ^" U- _1 n3 n! a( E

; V. y1 A  L2 x5 e7 s
3a5f28024d5c4b2290dc5cb28720d4f6.png " D7 g. r( t( g( U* F

: L  ]! t& h, \6 @- O

/ h! Y  b3 b1 w/ f" v3 K2 X) m' r$ }第一个:清空配置
/ g# W8 p; E( D. J& @( _
5 \. X8 c! u3 O; ^! B 第二个:时机单元初始化  d! Y( J, W7 G; Q6 D& ?
! W* k' \$ \7 E+ a3 H5 y
Timebasestruct  附一个默认值
- B$ D8 e6 w  F5 i4 @$ B: ^  H7 H  `' H8 k+ f! Q( ?* {
TIM_cmd  使能定时器
. Q( f7 w% L% W& l
7 p/ x( f' q) ^7 y. k% ^
f68281e4d512408f8347cda171414d30.png
+ P2 g0 Y& S% s  v( M2 o! w5 Y, d0 W
, Q. b2 v8 ~0 `
TIM——ITconfig  使能中断
( l! \( V) y2 x4 ~0 T' N7 T
' y  w; `$ @2 b, o
77458f799cbc4bafa5c17582b98b0af1.png * o* I+ j# W" u2 |
- L0 P0 k9 A" ]0 o$ I7 b1 Q5 y  v! R
选择时钟) r8 M$ {# J3 ]1 P
( Y% Y0 k( n6 h* ~
  具体步骤:
$ I" Y% M9 S4 o9 H6 O: I! V. [7 E* g9 @  a
d6a42cf6bf754376a46501b9fda8dff8.png , |: V$ D# w% v% l

0 ?3 g8 u+ l, H0 G8 M这里的分频和自动重装值需要理解一下# I$ ], W- F1 t1 o* x

1 p& |7 O7 f( c, F$ ~, d
c296f3fb1810406f999f06e9dec26e60.png " |$ n1 y1 e- N% J" X1 T0 r3 L
6 p$ f0 \$ @6 @3 C
72M/分频/计数个数:0 c5 @1 K  ]$ @
" r4 f+ U5 f( g2 J
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s* X. I& A7 {3 W. O8 x$ {# b  b
- A. p, D" `6 _0 Z; e6 K- T/ s
76c656a4d2914480b2d264f022905074.png
* r2 M$ g3 T; ^" t" ?: k! q: `0 ]# [8 Z/ l1 B3 `
打开定时器时清除中断的标志位& e( [! s; u- f% @5 @" e) r
; s8 d: r& J8 ~/ R
37bea5bb89a64a1b8d17ed82cb47f444.png
7 Q/ A2 [$ K$ m/ w9 S# U$ j# ]- H. r. Q( W& v) C2 r  s& ?* K
判断中断标志位然后进行相关的操作
' d2 ~2 Y9 I3 @% V7 \8 f; ^8 ~" ]: L4 ~; |# C7 U+ L
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
0 Y1 C: z( [; Z, w7 L; _
" R* U, w6 x  Y! b( f8 A使用的外部时钟,需要用到GPIO
& `3 e1 `/ u* c' D+ S: I5 T' p: A# _7 `  x
配置外部时钟; 配置外部触发的时钟- j3 t9 @! H6 B6 i  I) i8 _: t
' F; j7 M  [% k
bbb7d542ae65412ebd9cbc88229e51cd.png
* U% Y3 G4 ^. B: Q% A( A

7 b6 k% A, A% R' P4 a 复用的是PA-0口
; X+ V3 N- S% R
1 V/ I: _$ n3 j0 _
2be0a931addb43299f21f80c46205425.png , E* u5 c2 J% c

1 m+ r; I4 c# ?+ t$ @& j
48f0205c6243422cafaaa3c9e2616264.png / R3 i# |7 x2 X) m4 O& W

& C! k0 B' a1 x 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,! ~: ~. m. N1 Z8 z

5 l3 r1 i7 w+ C2 O预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1/ H7 s8 w- Y  \. T+ x

' ?: X% B0 s- L, F- k7 \  }& K7 C定时器中断代码总结:
- U8 a7 v& X7 ]' c# _# o1 O
. i$ }, h8 `6 B打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,2 y1 d% R  M( y' ]; [0 M

; G9 y+ |/ T9 k0 s打开中断定时通道进入NVIC
4 c% l6 k, ]1 E; J
, {5 U3 U9 ?& t! w, o配置NVIC中断优先级,打开计数器! Y" q3 B- G3 _- D9 U% G' K

. {' e, ^6 F5 }: x: ]$ I外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发" c4 i. k* T3 i# ~

% U6 g" C6 e& K* q7 ~" S5 s不用预分频 就直接用周期来进行判断进入中断5 s1 Y  U  q% @; I) G3 c
————————————————
! B5 z  b7 |4 e4 Q1 n9 g版权声明:小聪不想秃头2 x+ ]- [6 t0 f- X) w) L
如有侵权请联系删除
: s, P9 J$ P3 @% w3 c9 q4 H5 j
7 Z; H( H! j3 w, Y; d( H. g2 z/ h* ]) n+ k
% X  K; J& g# V  v8 f  f- D
收藏 评论0 发布时间:2023-5-1 16:00

举报

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