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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s
. `$ U: _" I/ m) H# r9 H
/ L! i/ r  _* d$ d6 ~" U
b6241eaf4d78470d80fd0e3798321cc3.png
3 R. d5 t' s2 o9 F. L4 B
# W/ a, w4 W8 q$ G

8 p4 V  p5 T: F' `/ W+ D4 h基本定时器:
2 q; C+ m9 V0 X
6 X: K/ N7 V9 s0 C+ C3 ~6 B基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应
  \7 f. I, \3 \, p
! [: M0 h- h1 A5 `+ ^: S
主模式触发DAC 硬件自动化: ?8 }9 w, Q% g- w+ j" V5 S
5 j/ U( t8 M7 I* e: k  i
通用定时器:  g" D: T) @. d! O. b6 Q

- Q) f! X  O; l8 ?1 e, u1 ]7 s
c07844004e234b34ac06fa0e8c9745a7.png
  ^* d1 J. m! o/ C
" a1 P$ @! `7 {& W' ^
计数模式不只一种:# C  \: H3 v8 B) k) ~: \
向上计数:计数器累加到自动重装载模式的值后进行中断相应
" H% m( C# k6 _' ~) n向下计数:自动重装载模式中的值向下减到0后进入中断
9 k4 V4 g( V' B2 D4 f8 e中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生2 R% b1 ?' ?5 ?5 y! F/ Q4 a
& Y7 B# |2 [4 I$ S8 f! |
1cd051f0c9514f1eac39f944da83b767.png 6 `0 d9 \) Q1 q( W, }

) U& M* e+ y( |) I- p! w9 ]; E7 |定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1! q! k2 U. b* i8 {$ I
6 E9 N( m6 T7 F% i
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器( n4 K! {4 \8 N- L! x- T
9 D. m4 G  s9 y9 R
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
  G* w4 o! Z" C( T  h' a0 i. K1 c% ~0 E. W8 v# [. N
2ef24777045a49b0822575d52a29f220.png
$ y% B& h: m* V6 }5 F9 y* w+ i" V% b) S% a2 p6 z5 S
初始化定时器* P0 \, X0 q" K* J7 \" t8 k
开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器( h" Y3 k8 K6 o
定时器中断函数:判断标志位,清除标志位
% c$ k2 k. f5 {$ J. W, l- x7 U: I
3 `9 O+ e' {& e) T6 p
NVIC结构体:中断通道,使能  抢占优先,相应优先级( ^& S! R5 R$ S  F0 i( C1 Q. e

; Y2 }: b5 m; o: g& @# t; J1 S
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
+ ~$ p: B( O0 _$ }5 w8 v- K
: |" ^- s  B& M$ i4 u
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
+ B; F+ X5 u1 O9 R* t- D$ E, Q' B6 B+ k
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期; j: k$ N- ]: O. [: U, K
( G! t# f4 ]  b7 g3 _' Y3 R& K
找到TIM的定时器库函数:
7 Y2 }1 }) L+ v, c
8 n* l3 @% \7 p! S3 x
3a5f28024d5c4b2290dc5cb28720d4f6.png
4 q; ]6 y5 H+ c1 q/ I5 p
! n/ h) u' H  B8 m# M
  N0 m& h# b8 [5 v9 U
第一个:清空配置
+ ~& ~5 v4 b$ E
' ~* e7 [& f/ d 第二个:时机单元初始化
5 j; ]$ ^+ q+ [, p5 g3 {( F
8 |# K( j3 r( N( }* o, d: K
Timebasestruct  附一个默认值( H. P' x) R2 u* G; f
3 e. F% _; {; n" x' r
TIM_cmd  使能定时器
; Z( H3 S# b) Z: v& t6 F$ r9 k
" @+ O/ i( c* w- H
f68281e4d512408f8347cda171414d30.png 1 a0 Y4 p  }; n4 ^0 e  m

+ A  D7 N6 A6 ]& e0 f' b TIM——ITconfig  使能中断# Q. n5 P) q5 g: t* @6 T+ \% r: j

2 X; p/ }# j. O7 x9 k& F
77458f799cbc4bafa5c17582b98b0af1.png
, d8 j1 H9 A; l8 J0 f8 c& n/ q
! T$ C/ Q: s* P; `选择时钟
) @; {& M9 y. q2 F' O" Q7 O5 l8 k, P: `' A+ {! ?( l; N
  具体步骤:6 ]" h! r4 t: @# }. U% G# m
+ T1 r2 ?& }0 ?: A; ?
d6a42cf6bf754376a46501b9fda8dff8.png 3 W4 F9 w# P( W! E4 Z6 }! F( h

( X: f# `+ q7 R  M# `/ D这里的分频和自动重装值需要理解一下
- q0 T5 ^/ r; w- v5 e* W) U* ^# X5 K0 v
c296f3fb1810406f999f06e9dec26e60.png 6 E7 Y( @, [6 b4 T( Y! @

2 u3 J- E# i  \  L+ W 72M/分频/计数个数:- I  S& o. b/ j, _! f- y2 i

" p2 H* q  {, W( F" x" N: m72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s) t, C4 y7 S5 A5 u4 T6 Y, U
" Q1 o7 D6 ^5 X: x% {2 z" _
76c656a4d2914480b2d264f022905074.png
; V8 f# L0 r' I2 T1 o
4 h- ~1 R0 D7 B" I  F 打开定时器时清除中断的标志位! |( u. e. B- B$ x/ k( P8 o

9 v4 {6 f, b8 K- m3 D0 q
37bea5bb89a64a1b8d17ed82cb47f444.png
  g- x! ^9 C/ k! ?- D9 K* O) j/ R) Q# {$ j: e; A
判断中断标志位然后进行相关的操作4 {$ {. L( [6 j8 ^4 [; P- M1 w

4 G* z- J- D0 E5 q+ ?3 Q& _3 n外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断) u* H! ?2 E; O
( P; @- |4 Z2 t- X" j$ s
使用的外部时钟,需要用到GPIO
# n/ Q' v+ i/ }8 W$ {. i+ W; m% K+ N0 c1 r8 G! _8 W8 j
配置外部时钟; 配置外部触发的时钟
% h6 n2 B: X; m) V) s1 k
7 r* l: d' M5 J* w0 V1 u$ M9 C
bbb7d542ae65412ebd9cbc88229e51cd.png 7 d" Z- ^! j3 `8 l/ N

$ h- g  g* H; f( q" ?9 [& v& t 复用的是PA-0口* t, y5 k- M( P3 }+ f
# Y& g  X) P; Q% _
2be0a931addb43299f21f80c46205425.png
/ x. b) D; V" r1 ?0 c3 ]$ R; m1 _
* E3 t+ c# L4 @
48f0205c6243422cafaaa3c9e2616264.png ' k: ~- j+ h: x/ `+ n2 O  A& x

5 B  J0 Q4 B/ l! ]/ E 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,0 h7 R; d3 i6 V5 }5 p7 B& X

/ l, q( ?% W/ ?2 L: K- u预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1& k9 V6 W% r* b2 t; I  J

* B3 m3 ]7 P9 \/ ?' P# V定时器中断代码总结:( _5 A% z. c4 v- {" Z

. C( N' g- Z% ~( _1 A打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,5 E8 x( X0 p& n$ `

/ y0 m+ H* x# v+ ~6 E) S打开中断定时通道进入NVIC
5 ~2 H8 p1 p+ c; \9 Q5 c. @+ u6 f3 ?/ A. V( q  a
配置NVIC中断优先级,打开计数器
3 }& @1 `' ^! U5 d9 X. P" v% v

2 i. g6 _6 K% W5 a外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
+ m8 c& Y, h* G5 A, c2 u
! q2 J+ I" S$ v9 d不用预分频 就直接用周期来进行判断进入中断
2 e" z( k9 V4 T————————————————$ r8 q, Z  ]* h' Q2 \) F
版权声明:小聪不想秃头, a4 U' l4 l( ]" w6 |( }  u# m
如有侵权请联系删除
6 l8 X+ K0 U' f. z2 T: M" h& r+ l, e- B( v, B  R

* f$ @$ y/ {) W7 S8 D( {5 Q9 r0 k% |9 b6 B
赞 收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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