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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s
+ _: D2 ^1 {) S( _$ N! x. N( x8 @1 I9 Z
) {% T% j7 p7 j& U! O
b6241eaf4d78470d80fd0e3798321cc3.png - |& L% A! D/ y9 ^; W' [7 b
0 }9 v/ E3 C: j; {' i, h: \
  h: k, `% u' M) }) j- y
基本定时器:
+ r% }( {. [4 u: \
) Z* m' k& @0 `& t! g* N基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应3 w; ^; q) b6 D5 W- ~# z% f
0 x/ b" r1 G5 A# ?
主模式触发DAC 硬件自动化
; B( x8 O4 n- K0 {3 N4 G0 Y7 ?/ \
" m0 N% N4 k3 l# T; ~0 Z通用定时器:
2 ~& i5 e1 J9 A, z- z
: y6 h! V' ^8 R
c07844004e234b34ac06fa0e8c9745a7.png
/ i  n4 S3 `% c  r3 a* G6 m6 B, F5 i" w+ J1 v- Z" v
计数模式不只一种:
9 q$ u; Z5 L6 x向上计数:计数器累加到自动重装载模式的值后进行中断相应, B$ O1 I/ |6 Q$ E* L  Z
向下计数:自动重装载模式中的值向下减到0后进入中断
  `; u* b% |, M* ?5 j4 o中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
  J3 `  \7 E& s( ~/ }4 C1 u2 Q7 {; c2 B$ L" V$ c% K
1cd051f0c9514f1eac39f944da83b767.png 0 ~& U; S& H: ?7 }

4 N/ O& e+ P) P$ ^  m定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
% }3 r8 F1 X/ l1 r
# @. z5 J3 q1 p7 K2 Y
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器& G$ g; j4 q, x6 D6 M

4 p. H7 s/ N& B& d* x/ g输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
) R7 j+ |0 S' I" r+ w: b
, H# m. M% I8 ^. E# W
2ef24777045a49b0822575d52a29f220.png 7 R. Y: `) l* e9 C% b" c5 n& u( I
( p) Q  q: d, o% B
初始化定时器
' y1 x0 [9 U# ]5 ^* M/ M. C开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器) [- ]+ @, U: M* k! M% `
定时器中断函数:判断标志位,清除标志位
; D4 e+ Q& K" \5 Q  z6 M) o
: N  k6 E4 ]2 A- C
NVIC结构体:中断通道,使能  抢占优先,相应优先级. k5 W$ n+ Z; ^5 Z

, v/ z; e% J4 a/ Z
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给03 A5 m' B& |6 A; q4 h$ |# @- B

9 z! `$ H+ S; v0 D' g
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
1 }+ @* O: L4 m7 X1 m3 W, b+ N6 @9 z! k2 A" }0 M" L
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期! d4 D" d; j( |

/ M1 ?$ A. S( M7 n
找到TIM的定时器库函数:
$ N' x  M3 `0 w* d0 H# u7 V
% R0 m5 q% S- S  b2 i* m/ ~  x) @7 R
3a5f28024d5c4b2290dc5cb28720d4f6.png & J% r4 J/ T% y5 K1 W

: j! d/ d- Z/ y$ S8 i" H6 a

0 ?! [. F1 J; h7 S第一个:清空配置
) R8 e% e2 o4 C. N, c- B3 j
# k: u( C4 [3 \3 |5 |2 o; A9 P! a 第二个:时机单元初始化! n1 o1 n: |9 j

7 G7 L  S( t0 [' a2 @9 } Timebasestruct  附一个默认值
7 r/ j- @$ V8 {' H6 Y( f& V% y( B( p9 K$ [
TIM_cmd  使能定时器4 l6 G& v  A+ M+ y9 S
- R. ?" B8 S+ F7 C/ v9 E5 |. Z
f68281e4d512408f8347cda171414d30.png ! }& y3 P9 q# ]
7 I9 `2 m, Z+ Z# X
TIM——ITconfig  使能中断0 d6 [- Z7 \0 B( {
% [2 j5 Z2 |9 ?3 k- |
77458f799cbc4bafa5c17582b98b0af1.png
( H! h/ K2 U) K0 C+ d0 G6 @
$ k5 o6 j8 |; P& F" s# e% u选择时钟
& S& K7 o4 T6 N/ l$ f; m& [! T! w# c4 h5 ^' Z2 i9 T! N9 G2 W
  具体步骤:3 v0 L, x2 w) K
4 [4 Y: w' v* j
d6a42cf6bf754376a46501b9fda8dff8.png
& I, A9 q6 ^" Z7 k* K8 |/ H

- e( {( x/ J; Q: _+ q8 P这里的分频和自动重装值需要理解一下7 @. n0 ~6 A! b4 S

, O' Z2 ?6 }8 k5 v7 s
c296f3fb1810406f999f06e9dec26e60.png
. z+ R5 |, H: D) b* b6 e. }
+ S3 d6 O3 \6 I5 Q. x+ F2 q' S
72M/分频/计数个数:5 M. \* G: X* ^

9 {5 ^) v& F! d% e8 L8 f72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
9 P' V  o* C1 s9 h; H1 w0 `5 O5 B" G  R0 p9 F
76c656a4d2914480b2d264f022905074.png
; W5 O, ?) `; E% ^- ]- G5 J5 Q! A  K) d" d6 ]' @) ?. ]
打开定时器时清除中断的标志位
1 \9 I' j% H& W2 G8 u  e+ _8 d& e* ?# }3 y- x$ z' N  b: s0 c
37bea5bb89a64a1b8d17ed82cb47f444.png - M$ W8 D: C5 H6 U8 \( ^6 q

0 _. [# Y+ {* C  A3 b5 u 判断中断标志位然后进行相关的操作- T4 K* e* `) O2 B
1 e9 X2 ~* f7 |
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
% o8 o- Y! b0 f* h* x$ ^- P7 V- @0 D7 C8 R4 l+ z* {
使用的外部时钟,需要用到GPIO
- w& b6 L6 P+ ]4 L* ?# T
9 [) S6 G) H/ e+ a! T6 ?+ W配置外部时钟; 配置外部触发的时钟8 ~" P: }: g6 K* ^6 H( ?4 R$ {( u$ `4 y2 \, A
- R/ m: _4 @5 e/ L6 b) z
bbb7d542ae65412ebd9cbc88229e51cd.png
) C+ s3 ^. s; W7 v1 E: _$ W! d
2 i8 }% N3 ]* v9 Z0 N
复用的是PA-0口  n8 s0 M, n# |' F- K- {

: s, M" W& ^$ |" ?. Z
2be0a931addb43299f21f80c46205425.png / X+ U" a: a# n2 N

; m- D- @) `* x6 a% S) e
48f0205c6243422cafaaa3c9e2616264.png
& x, q4 L# O: j
: ~# a1 s& t, H 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
7 k+ {1 x0 a6 g! D% `& b" c5 m7 P, {- E( R& g! |  l
预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
" o" u. O; M8 c% @+ w% z, I3 Q  P( }6 @* U- n1 D; ?2 \2 U
定时器中断代码总结:: a  y2 ^! M3 l

- ?1 ]+ U6 y7 R打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
9 J# }: q7 ?& `" B% V( I
7 r6 b( T: |1 B9 d" @: h/ H打开中断定时通道进入NVIC. T# E3 ~' x0 `; r) ~3 S7 a) B

! P" j% `1 L* W0 ~! ~配置NVIC中断优先级,打开计数器; I6 m8 |0 Q" M/ T* D/ L2 u7 d6 f+ s) D
' U( n" G; E) S* B* {/ r
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发5 X) m) k/ C; X: L+ R
6 R6 o- y. `8 s8 |  M. A, H% O' |! R( i
不用预分频 就直接用周期来进行判断进入中断
# I: S# F/ P, f! ^; v8 W- m* ]————————————————
5 o& G& r2 p1 D4 S4 E版权声明:小聪不想秃头; q2 i2 u. }; N! j
如有侵权请联系删除" q4 w  c" O; z  T# U9 W2 p

# v% _( T( W' j/ \1 d' M( n. O0 ^* Y  k. t8 o3 ~1 ^9 G0 h

0 ?( X. k; R4 _" j) V% ^+ [
收藏 评论0 发布时间:2023-5-1 16:00

举报

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