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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s( B  W9 f( G- w: K9 Z
) b9 h" l$ ?7 q. t& J0 E5 R
b6241eaf4d78470d80fd0e3798321cc3.png 4 J# {8 k. z& a5 I+ X  U

# W& H" G  Y$ G* B

! F8 N7 x% r7 h: o5 @8 V1 o基本定时器:% h$ g/ F* o4 J, E/ ^& s9 e
2 V" r' L% a7 e/ B6 F
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应/ J6 @5 i8 w" f5 v

/ f, l+ I. F5 I. C2 R! L9 V- E主模式触发DAC 硬件自动化# U) ~% x* ?3 \2 w! `$ A

9 B$ I! I9 N6 X% F% w3 |- Y通用定时器:
, V$ q, F( I8 z9 a9 o, Q& }1 w; Z2 R& K8 s
c07844004e234b34ac06fa0e8c9745a7.png
' M5 G) N# p. X4 t. h
$ ^4 E- }. V% ?, N
计数模式不只一种:' E  c) F+ p! u5 d% A0 [! ]
向上计数:计数器累加到自动重装载模式的值后进行中断相应
8 t- n7 S6 B& g/ Q; s* e向下计数:自动重装载模式中的值向下减到0后进入中断
/ m! {4 m  d( A中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
: N  A- n% @0 U: ]2 I- q5 M. |
( @- E9 n4 v+ l
1cd051f0c9514f1eac39f944da83b767.png : H* h% p/ S+ o5 r& b, n1 E4 ?

/ c7 r" m; }/ O; _$ M定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1/ `: Q* v& G+ u7 \% s# x
4 V' U1 A8 w7 ?( ]8 g1 g" S6 f8 u
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
7 A# ^7 S; q$ r' W% Y9 \
; t. Z- ^# y' v+ L0 s5 K1 A) N. w
输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率2 \; h# X8 u' v

1 [' K! J4 p9 {$ }$ S4 f& f5 D# U
2ef24777045a49b0822575d52a29f220.png
, {; |" \3 }/ T! J2 F- n8 ~9 A( v3 A! u* B  w9 N
初始化定时器
* R0 E7 I, q- |% ~开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
# W& v! Z$ c) n( ?) Y
定时器中断函数:判断标志位,清除标志位/ d& p: Y* o* {: _  e
* l+ A' w6 s8 j6 Z2 I
NVIC结构体:中断通道,使能  抢占优先,相应优先级1 J8 Q" i2 x5 S' Y( I+ V- x1 C
: y5 @4 b& F( u2 g
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0: l+ }1 j! p- ^3 W  x+ C

" \. ?( i4 f: s. b  Y* v8 P+ J
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
( X5 v' H* t+ r3 i! f9 P- J+ f8 L1 Y* l4 y# ?
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期+ d' u' v# ?0 x
6 ~: }; L  X# l8 u4 ~) e' r
找到TIM的定时器库函数:: h0 y  h# L5 D+ ^

% _9 z  H4 |, E1 b& t
3a5f28024d5c4b2290dc5cb28720d4f6.png $ W6 p' e/ M2 I) T

% @5 J' E0 h2 y0 H, d/ w0 v. c) c
( m8 I) s0 @1 ?  w* ^! n
第一个:清空配置
$ t) F1 U: {2 m% u* b4 j! l4 ]" G; @& Q9 U# I
第二个:时机单元初始化
- [9 x, M2 K8 Z
7 U8 C$ z2 A4 H/ y& L9 G. D
Timebasestruct  附一个默认值  U# n5 ]; [4 q; V% y; ^
" f/ F% l! V% ~6 U2 P! l; B
TIM_cmd  使能定时器
( q3 X5 I9 n: b9 \. ]- x! O" P
3 u3 z/ b, O0 H2 X: ~# {2 d
f68281e4d512408f8347cda171414d30.png 5 {# C* j# S, O" p  Z2 B! A; g

6 x5 t" S# U1 S TIM——ITconfig  使能中断7 Z$ x* B8 z8 f$ x& P7 c6 K% {6 Y

# c- F2 P" D" l0 d" Z
77458f799cbc4bafa5c17582b98b0af1.png
* c2 M; v3 j# n- s' X1 ?; a% f; W$ {& _. S1 x; a, e# \# A! I
选择时钟8 t1 ?- Q5 o- i
% Z0 r# A. k6 r- i  T7 d0 i
  具体步骤:
- O; b2 I9 w0 U" e
9 Z- [0 Q' m7 u- k: R2 ]6 Z
d6a42cf6bf754376a46501b9fda8dff8.png 9 T0 O  d$ z6 J; X5 L
. C8 y  ^4 R- m, T9 D2 o
这里的分频和自动重装值需要理解一下
/ ?0 u1 P! b. {" N7 X5 U$ A+ M  H. F0 W( K2 x. o8 Z4 f  A$ F* [, q
c296f3fb1810406f999f06e9dec26e60.png
* I$ o3 n4 B& L
/ l2 E) B$ B2 m+ _6 e4 F; Q: N0 g
72M/分频/计数个数:
# _) ?6 ]$ y, y& k! O3 A! H1 ^, E* T# u7 F
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s' Y( _8 `) R" N3 \5 Z9 E! \

' i+ T4 x) O& T, Y- L1 o
76c656a4d2914480b2d264f022905074.png
0 M6 u7 d/ b1 d$ V* {" w0 t* j
) `. q& M* ]2 S. L( B  n 打开定时器时清除中断的标志位
, L7 u) }9 R$ M3 H6 L* n6 V6 T' i1 q5 L4 \7 I7 ~! v+ b" f6 H" J
37bea5bb89a64a1b8d17ed82cb47f444.png
' k8 Z& k& X% P- P8 H" c# k% U' B3 ^! l6 z7 k, |
判断中断标志位然后进行相关的操作
- p% k! I' V8 J8 B8 C* z# C5 r! x% Y/ l8 g
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
" E  w5 W6 D* g' E  n3 H; c0 n: X2 j+ [4 _
使用的外部时钟,需要用到GPIO
* c6 K  Q" w" q/ J( ]1 {
6 X# x5 K/ T* N1 o+ F' G配置外部时钟; 配置外部触发的时钟
+ b; i4 j. z3 V* T# Q2 Y
& L5 }3 ~5 s- G2 ?$ B
bbb7d542ae65412ebd9cbc88229e51cd.png 3 y4 X7 y) U: W/ o; T

5 L, r2 {: X5 V/ y/ `7 R; u 复用的是PA-0口
! p% @- ?& H9 ~' Z; Z
9 _# M4 _6 R$ }" }+ ~. d
2be0a931addb43299f21f80c46205425.png . H9 J& `2 T0 o: j( ~, \! k
* Y# m& f* S: e$ b- O1 d
48f0205c6243422cafaaa3c9e2616264.png - S/ a1 x# R* w' V% q$ E1 D, B( ^

. Q+ L3 k% D7 \  y( y 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
* Z* N2 B) R! z/ E
7 u7 g. G( t: M5 Z+ b! V4 |预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+19 `' }# Z% A% j- V+ a

2 i$ ]( i- h  U8 _5 D定时器中断代码总结:
# H( @! \. L' H' [5 E; O/ O9 y
+ b; o+ t3 Y0 p打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
$ Y/ o. q; H# Y; y5 m1 k6 z- e$ H( H9 M
打开中断定时通道进入NVIC
1 T4 H) Z: a  t7 I' k, t& k9 @* r! ^. J' q' `. p
配置NVIC中断优先级,打开计数器
9 u- b! Z0 O4 A

* ^* M* X. [. y1 f+ L3 N外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
, x1 d' C' I5 z+ i& Q8 ]: S+ o# b: L  w8 K- C' `+ F; `
不用预分频 就直接用周期来进行判断进入中断
+ \7 C  v, [2 c6 j6 W————————————————
. T' m. {0 k+ O8 x$ u* y版权声明:小聪不想秃头
) K" a; d+ B! ^% R如有侵权请联系删除; C* A+ K1 d9 n' {3 d, i6 Q- b

7 X* _% l( P7 x% m, I# q. d7 M2 C( Z( X5 v
8 [2 x! Z! c. ?' @( }" q# l4 }
赞 收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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