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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s& F9 @) u+ O" R& G+ |' B
+ `  ?0 ?2 I7 l" b$ w4 G
b6241eaf4d78470d80fd0e3798321cc3.png
4 i% u, o/ [9 s; b' h7 w
+ ]6 f% r5 Q* }) O. B; Z
+ h6 o) b/ c6 K9 s0 F4 b- x
基本定时器:6 u1 a& d& @$ t8 M, ?3 k

+ l7 ~$ v: E' a+ [# ?3 \基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应& Q# C4 ]! F8 u& t

5 t# d7 c7 b0 Y% n6 V7 Y3 I" m主模式触发DAC 硬件自动化
; u# Y" n* O: p+ ~3 m6 }1 }
/ u" b% ~: K  i  K通用定时器:
8 @' d7 X$ G" i. Y! v4 Z; s" c; v: @- |% `: b2 t* K* o
c07844004e234b34ac06fa0e8c9745a7.png
) [* u0 U( r& D  E: Z  a' B2 B1 y7 t8 I7 f% w# a" ~
计数模式不只一种:* ~) J/ H/ i) \9 J/ j9 A
向上计数:计数器累加到自动重装载模式的值后进行中断相应7 i% \' W1 b2 y& U
向下计数:自动重装载模式中的值向下减到0后进入中断
  r. ~, y3 x# N6 N2 b- L9 e中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生; v/ W* y7 P" A1 y1 v; S! m; p

5 g5 d, \: r4 d, j3 W4 m
1cd051f0c9514f1eac39f944da83b767.png
& y: U+ [9 q8 U. C# u
9 K  [  ?9 t. ^
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1  {# V9 N9 U2 M  Q1 X

( V$ y+ ~& t& \5 v 定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
5 `6 u# \9 A  K

$ a7 g* S3 x* U, ]! I: [输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
3 b2 N! ^3 Z% U$ A
0 }$ s( O4 L# K/ i9 J* c' @' Q1 x0 O
2ef24777045a49b0822575d52a29f220.png + j1 j7 K' b$ Y" r: e) l: b: Q1 V  }) L

* O+ C" I/ R2 G4 {3 v0 f# f5 m- ]
初始化定时器
" w/ U% {- N) q- H2 Z5 P3 V开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器! ^+ p% C! J5 A# Q
定时器中断函数:判断标志位,清除标志位- d' u8 w& w! x; p+ {' Y, Y/ ^

. P. P, C% A. F0 W$ e
NVIC结构体:中断通道,使能  抢占优先,相应优先级/ Z: g3 y! |) W5 |8 z5 Q

' M2 h& x; q/ Z2 o0 m/ ?
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0
/ E& V* k0 v6 _  I% p+ P7 Q& Z- q4 n" }
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
6 }7 Z/ R* {0 N' ^" k7 t8 H
8 H) ^# _6 C( d4 G( o* u5 [
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期( n% Y& p, d7 g* e. ?

" o& g# v: Q7 X. J; r1 T' l
找到TIM的定时器库函数:7 `# I  M9 v+ v" j* D" P6 W

: M* n! ~4 A. n6 c
3a5f28024d5c4b2290dc5cb28720d4f6.png 9 y2 l8 Z! F# q3 T5 \9 @
. s! t" t" F# D% ~4 ]& P# K4 Q
; ^  G3 s' l( e4 I. b0 y- `
第一个:清空配置0 Q2 ?/ j+ T8 e8 L8 N

9 u, o" J+ x, c/ I: e5 Z 第二个:时机单元初始化
+ R; V3 F  x$ w' o5 [% I8 g6 e

- D& K" s. v: u7 C Timebasestruct  附一个默认值
. a2 x8 z! w  M/ g) k) {4 S
& z7 [$ w7 e: ?% P- L4 a; STIM_cmd  使能定时器, D$ a5 A% ^2 |0 \' b
  x3 h  P  c- {" K) X) H* Y
f68281e4d512408f8347cda171414d30.png
9 i! `5 u% y" p2 D5 N. u" {

8 O- J" ]& r, B) J% n TIM——ITconfig  使能中断- P9 M" P" e9 V: s; @! p/ M* W, O
5 ?% G' Z- B- [8 \7 x8 F5 A, {
77458f799cbc4bafa5c17582b98b0af1.png
4 E  v! L& }* j6 m: F+ S& v
8 ^. n) W7 u9 X选择时钟
; g' V3 j! K: `" H2 E7 L( j. ]5 B% B4 R' V2 @) ^8 R' B
  具体步骤:
- j1 l! ^* {1 n4 ^7 k9 Z; _+ l: `( e# f6 D. z, z$ h
d6a42cf6bf754376a46501b9fda8dff8.png $ e2 y9 \: R1 B9 }" |
9 m8 m- ~1 j) ]2 ~: `* u
这里的分频和自动重装值需要理解一下
0 d4 y% A3 K; a8 r
3 ^0 i, ~0 d! @/ ?% r5 H
c296f3fb1810406f999f06e9dec26e60.png ' C5 C; C" B& S- B; W- \. S

) e8 `/ U  H6 a1 G5 D5 a+ q 72M/分频/计数个数:
) O; @! O, m  \- {) A
$ Z' A% C# x/ M3 X. G* S- H" f72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s" v8 e$ P: \2 y: ]7 E2 n
& J+ D; a+ u5 ]1 S* C, I4 U5 t/ p
76c656a4d2914480b2d264f022905074.png
0 I9 |. i/ `' q0 `. c) p/ \! ?
- Y4 u- S) a) r( Q: p 打开定时器时清除中断的标志位
9 m8 \5 z9 r. Q" J' h0 f7 u* {6 P/ g0 Y6 x$ n
37bea5bb89a64a1b8d17ed82cb47f444.png + n1 ?$ {1 F5 u

4 B. [% H0 d. [ 判断中断标志位然后进行相关的操作' S/ M, ~# ^1 V# v3 R/ E% H

+ e) w5 C( E+ @, X外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
9 b% g/ R$ e- E
7 Q( W9 d& t  Q/ O3 ^使用的外部时钟,需要用到GPIO4 q# @8 I4 u4 ~( {( m4 W
& a) z$ B) m( W* V
配置外部时钟; 配置外部触发的时钟
  s2 b# B. S( `1 [/ H2 a* i6 i: r2 p/ h$ H) t2 T
bbb7d542ae65412ebd9cbc88229e51cd.png * h. v) F, Y& W+ {% i8 Z

" _" u7 R( Q5 X+ p: s% z% h 复用的是PA-0口
' f2 s/ H0 K$ J# n) l
; ]( Y8 g1 m( M. c& P
2be0a931addb43299f21f80c46205425.png 8 N8 H# S) M  ~( I
) C2 J* [! ]2 ?. ^  t. J/ b
48f0205c6243422cafaaa3c9e2616264.png - e, g: N' Z6 ~& q: p  q9 p

# m, E9 f" l" O5 c9 s2 N 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
2 s& @6 O& f* l  \- y/ [
0 i% L3 p9 o) x0 l8 G/ E# `2 ^预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
3 Z* K) W, U+ e. A# N' ?0 K  [" G; r2 H$ \, ], B) i
定时器中断代码总结:' o1 f0 u/ ]+ v; x
1 F& n* B6 G5 n* @* ?- ~
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,+ W8 {8 P7 n7 k: l: l
, C% q8 N! g: V8 g; |$ F1 C
打开中断定时通道进入NVIC( J! e, o0 d% }2 m; u: ~
! ]: e. X$ L1 P. U0 p; p$ Y+ L
配置NVIC中断优先级,打开计数器
9 p6 m# W: r' ~
" K4 P0 U! T7 l* s5 w7 O
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
( S" m3 q1 d' K% ~7 m4 F8 n" V4 a, l  V2 ~8 q+ x
不用预分频 就直接用周期来进行判断进入中断
. Y3 w/ F, M% p1 P4 j, W————————————————( ], B9 F6 P5 T) ^1 \
版权声明:小聪不想秃头
0 M7 e8 ~, I2 n: ~如有侵权请联系删除2 B4 E4 d+ m7 g) S2 p$ N. T

9 Q4 A) \6 W) J# K; Y5 z7 l5 i) y, w3 H0 C

& h5 R" A9 o- T7 e/ o3 l
收藏 评论0 发布时间:2023-5-1 16:00

举报

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