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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s& z5 I6 H1 p% ~; b
' l6 Y; U+ j" O' u. @# B
b6241eaf4d78470d80fd0e3798321cc3.png * b+ B- N8 {; u4 Z
: J8 G' j( K$ O( t
" Y/ [( m5 ^9 |+ I
基本定时器:
" D+ ~4 @, b' u' A, [+ u) N) J, ], ~4 W- P7 q
基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应) s- y  [2 r' J

1 s, H' U( o" m& G5 w3 E/ O9 B主模式触发DAC 硬件自动化7 ^: l# n& o% Y/ e
2 l+ I' a, U3 ?, P" S
通用定时器:
# }+ f; e9 b# D* Q' `  k4 W5 L! n7 I8 i+ L9 X5 U
c07844004e234b34ac06fa0e8c9745a7.png
+ O0 \9 [; V) b" V; w5 p. \2 r0 z! p' P+ j
计数模式不只一种:0 }* q' V; _$ D: @
向上计数:计数器累加到自动重装载模式的值后进行中断相应
3 v  G# u% O4 L/ b! n, c! M7 q9 R/ `向下计数:自动重装载模式中的值向下减到0后进入中断' j+ D" ^: h2 X7 c6 q" z- O0 c8 u
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生9 H+ z% L+ ]) I' L, A2 a4 H
9 F! @0 U' L8 F& n# @
1cd051f0c9514f1eac39f944da83b767.png ; q- U* S+ j# k0 q$ z

6 n$ }& Q! i" z, p$ C7 k. Y定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1: ?1 a+ n. F8 I
, w9 L4 |- \/ A  A
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
! \$ p  x0 w  p$ r

1 Y) w/ D- `) `# C" {输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
6 r5 r2 Y" ]' _" V- I1 P0 ]# Q! ?* y$ A" W# K0 A4 g
2ef24777045a49b0822575d52a29f220.png 6 G, a* w6 E! T1 |
0 ]: J* h; `9 N) K1 w( [6 Q9 ?
初始化定时器
9 F$ n$ k2 O( N" m- j开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器% R1 u- w; F. F
定时器中断函数:判断标志位,清除标志位) M9 s% S- n. O$ K# R/ H

: H* F- q8 P1 ~4 K! w2 e" V
NVIC结构体:中断通道,使能  抢占优先,相应优先级& j: ~: Z7 ~9 J0 Y
5 j# ^0 U! U7 P
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0- c% \/ Q- [) n3 T. o( P

( b- e  R  b, r6 e- y
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
& G5 G* H; O+ V) a; N; H# E' C# _6 v+ S: L- G
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期% l2 g) j/ V) e" O

7 q9 m$ D8 ~; i; O- I9 Y
找到TIM的定时器库函数:
. N5 s: n* {: o! i1 k: q. }  U$ @! f, u3 m- f: X" z  f8 v
3a5f28024d5c4b2290dc5cb28720d4f6.png
, p5 B3 o0 W4 L( U, G% S
( V+ s; V3 C8 A  ]
  Q9 L+ a6 v$ N3 q; m0 Q
第一个:清空配置
, P! H( a+ K, Q& z, U0 q0 @
  s; U! W- A* N" a2 r8 R2 F 第二个:时机单元初始化9 {* ]8 i/ c8 Z( D! s  W9 G3 k6 \

; u5 k  J, ^8 G* W4 i5 I/ U Timebasestruct  附一个默认值
) C& O# ~, l% f: g1 o$ `# K6 }4 F/ A5 }0 u% a( x
TIM_cmd  使能定时器
  g: w* o' ~  G/ p1 U9 u: J6 h' `5 Y; V9 m5 g) [
f68281e4d512408f8347cda171414d30.png 3 N2 [( g; Z1 f- s% x3 T4 F. A
/ p) J3 O/ f$ @" ]  z8 c
TIM——ITconfig  使能中断. W/ c; m2 p' t6 ~3 H8 _2 I* ?& v
9 d0 i1 i- i  [) _
77458f799cbc4bafa5c17582b98b0af1.png 5 h0 b( S" y. N- c
3 V' w- g+ {# `+ _& i! y; z$ P- |
选择时钟
* f! j) d# {# S* Z0 {3 `7 u5 n) x6 O' b* |# X5 X
  具体步骤:% m4 R5 V/ {# L) C) S3 r

$ R% {2 j! D7 O* F4 _! v
d6a42cf6bf754376a46501b9fda8dff8.png
% Y( ^9 H. D' K1 q9 ~$ h
- b( S- `. o- _5 r! s" {
这里的分频和自动重装值需要理解一下
6 W: ]( z; r1 L* x8 ]* b9 J! I, \+ h: D8 {
c296f3fb1810406f999f06e9dec26e60.png - I9 E% d9 L0 v, F0 o

# d  i' ?" A8 U* \' f 72M/分频/计数个数:7 q: a, p, d- o2 ^" |, x% R
# j8 |1 @7 V" g% \9 ^/ F3 Z! x
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
% Z( I. d7 a' [9 |2 M% T- t3 s2 `. b; T) k! J1 u  _' p( ]7 j
76c656a4d2914480b2d264f022905074.png 7 L  ~! k8 A  @% L* I% f3 X$ w
4 |" S, F$ \. V, E4 e
打开定时器时清除中断的标志位, |6 r/ `. @- {9 g1 X3 k" b6 E# L
" E- o4 a8 }6 \  W# s  T
37bea5bb89a64a1b8d17ed82cb47f444.png ) o/ j1 y# f5 n2 s6 b1 }. I

' d5 m' Z6 m; T8 j% ] 判断中断标志位然后进行相关的操作
* ]7 `8 e8 c$ _7 y  z6 V% R- ?& ]% M+ c+ N  z8 E  |1 D3 n
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断. w9 x$ u; |* w- D* ^

* S# `. X3 \) I. u! g! w使用的外部时钟,需要用到GPIO
* q% F7 j, j1 y* Z7 E6 ^/ F+ {& K/ O& l, F0 [9 H1 _
配置外部时钟; 配置外部触发的时钟, j; X, o+ v; H1 @* Q& U3 a9 D" a

- F# {) A7 p2 A$ ~9 d7 p
bbb7d542ae65412ebd9cbc88229e51cd.png
: }' @) n% e0 r! j1 T9 `: P# T/ u* \- ~( Q

. W. s+ u/ u) [7 N 复用的是PA-0口! S+ j3 ?- @; O. n0 D! g

/ Q4 {* J4 t7 {; u7 k! U; Z: ~
2be0a931addb43299f21f80c46205425.png $ M3 X# a9 K% G4 }7 L
/ e# m& D. o$ b1 U. d/ |
48f0205c6243422cafaaa3c9e2616264.png
* S& ~% R0 W3 g4 n
! O+ Q! u3 ^. \  ]7 u: W. |+ e 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,
3 I; @3 Y& l+ G- b' J! k( M" j0 W
" `2 m3 [9 w# J5 Y  F预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1& D) z5 |3 u! J6 g" g- n% @
3 W3 D# Q0 V- _% z5 s! V0 l
定时器中断代码总结:
( u; P: w( M( h: i5 l1 `, ^- D6 |4 F$ N. c% T
打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
$ v# v  i+ K, ]7 A9 N% g' ^# q. n5 }8 F
打开中断定时通道进入NVIC5 c5 N. o: T% g( p' @% D

3 u' f; l0 g8 q9 _) P8 o配置NVIC中断优先级,打开计数器
4 U( |; F9 R, [) `2 y6 o% N
& W2 E) |) C6 }: h
外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
" [+ Y; y6 H5 [5 _* D: P' [; ], h: J9 i2 O5 V7 a4 P# S/ T
不用预分频 就直接用周期来进行判断进入中断6 @; x( C# M9 k& C% u
————————————————& @! `3 V3 Z+ m* g: s
版权声明:小聪不想秃头. Z5 M: j% h6 Y& Z
如有侵权请联系删除
. d+ I+ Z7 s1 p, I$ f+ Q3 P: X
' X2 ~8 ^8 X* \7 l3 t
4 _1 \0 J- R5 b& I/ Q6 Q3 n2 |$ y- t5 R1 E- x
收藏 评论0 发布时间:2023-5-1 16:00

举报

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