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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 16:00
主频72MHz:最大计时59.65s0 j! h5 z/ \$ G+ M' e

- B( n, i" N) E6 h& [( W- a
b6241eaf4d78470d80fd0e3798321cc3.png + r( c( [! P3 p8 G$ A0 Q9 H
8 w/ `4 j7 a& ^" z
& f: w3 G4 _+ y: H
基本定时器:
+ Y+ I& d2 e. s* ?7 w8 l9 g
/ z- e( g4 |, q/ \9 Y% L+ G2 ?. w2 h基准时钟 预分频器 计数器 计数器与自动重装载寄存器进行比较 相等时计时时间到 进行中断相应! \$ e) l; N: O3 r6 \) j

2 R/ J& @8 K" n7 K0 F8 b3 @* K主模式触发DAC 硬件自动化
- D1 r4 b1 f0 a/ {$ e/ j% E, S4 s
* m: F% F, e; `( ~  w/ v通用定时器:
5 ?% U9 J% u4 N3 g: X# x0 H6 q$ Q3 u2 \
c07844004e234b34ac06fa0e8c9745a7.png 4 r7 z) Q! H- t3 [

% |# _" W3 v: V2 A
计数模式不只一种:
- D8 o+ \* f% F向上计数:计数器累加到自动重装载模式的值后进行中断相应
: M) T! L$ k$ d* m0 z向下计数:自动重装载模式中的值向下减到0后进入中断5 U* g; ]$ G5 Y2 E$ f- C
中央对齐: 向上计数到自动重装载值中断产生向下自减到0后进行中断的产生
- `( Q4 H7 w5 C- x7 }* Z4 I- F% Q4 S1 a% Y% c9 N
1cd051f0c9514f1eac39f944da83b767.png / |% q/ L% Z2 y5 W- L
& j1 u0 ^6 r8 E& o
定时器级联:初始化TIM3(使用主模式)把更新事件映射到TRGO上 选择TIM2 对应的就是TIM3的TRGO   选择外部时钟1
" U$ s$ [& i3 c
4 }$ I/ W, a3 R4 p0 c
定时器的使用: ETR引脚,CH1、2、3、4 边沿  其他定时器
% m# t- m: l7 x/ e: P

, d; y9 D6 s6 D3 p输出控制可以产生PWM波形 ,左边的输入捕获可以捕获输入的频率
# O9 K* t2 n7 ^" z+ F
5 ]1 r7 A: `; ?* k
2ef24777045a49b0822575d52a29f220.png
. N- Z# Q: C# m
: K. r; Q! O6 k7 N
初始化定时器
& h/ ~* w/ n7 u& {+ w0 _" g  w开启定时器的时钟线RCC, 选择时钟(内部时钟可以不调用),定义时基单元,配置时基单元(定义时基单元结构体,)初始化时基结构体,更新中断到NVIC,配置NVIC 的分组  ,定义NVIC结构体 , 配置NVIC结构体 , 初始化NVIC结构体,启动定时器
5 \2 v6 y3 G/ J4 H
定时器中断函数:判断标志位,清除标志位
0 p. E4 O2 c1 `/ P( C  e
/ p, ~( f+ c0 j. T8 L8 L* O
NVIC结构体:中断通道,使能  抢占优先,相应优先级) |; K6 X2 D$ w$ D' b
/ C' C  z5 f0 |" \
时基单元结构体;: 指定时钟分频,计数模式,时钟周期,预分频,高级定时器配置给0# e9 r3 @- f3 R7 o9 E: p  y) c5 B% ]
9 W" _# R9 V! {6 w: a! O3 v
预分频是将前面的整数弄掉,时钟周期是自己想设置的定时长度 可以这么理解 时钟周期+上预分频一共有6个0  以定时一秒为例:
9 _" W: R( C  E- h1 |* n( F0 M5 ], o7 V$ g5 c8 C2 n* T0 e
预分频:  7200-1  时钟周期: 10000    定时的长度=72000000/ 预分频 /  时钟周期/ Y8 ~$ W, d1 H

) w: M- d! g( ~3 `
找到TIM的定时器库函数:
3 `) a$ O1 J2 p
+ I, ]: h+ F: Y, Z/ n" p
3a5f28024d5c4b2290dc5cb28720d4f6.png
8 l" j) o- C' C9 J( r( U: Y6 {# G* C7 O- I+ J! N  [1 c: |* |& e! `
( P' ~$ \$ m" r. |5 I8 [, t. |
第一个:清空配置: t3 ]3 f2 Z9 a1 ^

2 r# e* r: B: v7 o- N' }& H 第二个:时机单元初始化- n( M! l9 p+ t. k# J8 }

: A; V0 {2 J  S1 E% a6 w) H9 S Timebasestruct  附一个默认值
7 ?0 Q) F1 {% t/ r4 S# u  n! L5 y; e
TIM_cmd  使能定时器* E5 P9 f1 ^! T

2 ?  q3 U; c: y* n9 t2 |+ k
f68281e4d512408f8347cda171414d30.png 7 Y4 o# W# c2 i" F9 b+ C, \

, |, r, A) ~5 L: \; j TIM——ITconfig  使能中断. _$ F# Y* m& p" r  J. n& P4 k, W

1 _  j9 x8 @  Y: W
77458f799cbc4bafa5c17582b98b0af1.png
$ X1 A6 w+ w$ K# X% F" d
7 \. A  H: m, p1 A' q选择时钟2 o- Y, f2 d& O: a) t# u7 W
/ H9 U( o3 ]4 }$ t
  具体步骤:$ `& }8 B1 C! _+ h7 [+ u- }

( X6 b: k1 _# L" t$ i3 H& E0 P
d6a42cf6bf754376a46501b9fda8dff8.png 2 w8 v. g5 b" w& U* ~* n
9 ^( H) Y+ m. x* J% M
这里的分频和自动重装值需要理解一下  M, ]1 d* d( A  h2 z" e

- u7 F* m2 U$ j% v
c296f3fb1810406f999f06e9dec26e60.png
2 P% D# ~3 t' Q0 h

7 `, E3 \: z2 f! T$ W 72M/分频/计数个数:4 ]& G5 g  d0 h* w
& M$ J% f+ g' s+ I
72M分频7200为10kHZ 然后计数10000,得到的时间就是为1s
8 V- ?; b, s0 \9 p% ^4 o: M
4 }7 n" K  }: C
76c656a4d2914480b2d264f022905074.png   [# ]2 {& F* B: J

) z% {- o( `1 m8 C4 O. C 打开定时器时清除中断的标志位
' ^5 C7 g& c# s
, X) z  ^5 [8 D: n
37bea5bb89a64a1b8d17ed82cb47f444.png ) j; n& X4 f, y. c* N3 Z

: W9 c6 R3 ]% Y  n 判断中断标志位然后进行相关的操作
& s* d6 e7 O+ @& D, [, C$ I, l* L. ~! Y* c3 R
外部定时中断: 通过外设的变化让定时器的计数值进行加减,然后进入中断
$ V! D3 W! F$ |- {' q. ?4 c- z7 f- k3 y+ k, a
使用的外部时钟,需要用到GPIO
. I: H( T$ ^& |2 d2 E. z8 M0 P! l% M) V# m+ A: A
配置外部时钟; 配置外部触发的时钟
# `/ Q3 S+ H7 f( i+ T( X6 z$ s  S: x# N: S3 C
bbb7d542ae65412ebd9cbc88229e51cd.png 4 V8 |; C6 J# w  O

2 y* I4 n; W# U  h  u) C 复用的是PA-0口3 u/ h, _2 y$ r8 F

* \& _9 @% U6 r$ C- N' l- y: i, B
2be0a931addb43299f21f80c46205425.png
0 P/ w; V( H; L1 I% T  J- O# [7 {1 R- `+ j) D
48f0205c6243422cafaaa3c9e2616264.png
6 G2 V, @; `9 v3 k7 c% I  d) Q
4 `" N& x/ w! U! d8 l$ r/ y' ? 外部重装值:外部产生一个信号号重装值+1,当加到9时进入中断,9 n; H6 D. Y; ^; `1 d

- }6 Y% _& H2 A. V预分频:外部产生多个信号重装值+1;没有预分频,外部产生一次中断重装值+1
1 v$ F0 N& k' i' B0 e$ ]- K. E( k; O+ G9 s6 `
定时器中断代码总结:
. l/ d% K/ y& x
' j" g$ g" e& x打开定时器的相关时钟,选择定时器的时基单元,配置时基单元结构体,
5 x9 u/ P. h: L* N) a& t$ ?/ s4 e  N& k0 {
打开中断定时通道进入NVIC. Z4 G' D/ P# k: Y

0 r( L! |8 h: z1 X( ~2 d配置NVIC中断优先级,打开计数器. O! `" P; _% [4 E

" r; h7 \, u, L5 z. Q外部中断时钟触发定时器,需要用到相关的GPIO口来进行定时器的触发
6 }8 R: p. D. T, n: V! s' k. ^8 P1 w8 t  s# D
不用预分频 就直接用周期来进行判断进入中断
; B' Z- c% J6 q4 Z————————————————, [9 U) U- s$ a( d
版权声明:小聪不想秃头
, Y/ d- s8 U+ W" @  s6 A% Z如有侵权请联系删除
& b6 }9 i  u2 _9 K4 g8 D9 k
, P- N0 @0 Y: I
( g1 s' Z  ~' j  Z4 p7 b  M# Y
( [4 h$ Z' @4 `" @0 m
收藏 评论0 发布时间:2023-5-1 16:00

举报

0个回答

所属标签

相似技术帖

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