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

STM32学习笔记04—SysTick时钟

[复制链接]
STMCU-管管 发布时间:2020-10-27 14:27
STM32学习笔记04—SysTick时钟

9 W! i( k' ^% y. v& G
* ?3 m& e, d, U0 a7 H) W
4.1 SysTick概述
2 J4 S* o0 l8 L) Z! k1 z       Cortex-M3内核的处理器,内部包含了一个SysTick定时器,SysTick是一个24位的倒计数定时器,当计数到0时,将从ReLoad寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
% s1 S# Q! J6 A6 F- c% J
1 @( \2 X- R  P1 N+ n7 P3 Z5 f! k

' f, x) p2 `" n( n       SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间对其处理都是相同的。7 s9 f6 f/ I2 @( ~. ]4 h
: n" B) X% G) `2 d, l; a
0 B, b( e9 S  y, f
       我们在程序中使用SysTick时钟来作为延时函数,这样就不会占用定时器资源,SysTick时钟是一个直接挂载在AHB总线上的一个定时器,输入的时钟频率直接就是AHB总线上的时钟频率,使用SysTick定时器进行延时,可以精确的设置延时时间,与之前51单片机的for循环累加的精度是完全不一样的。
! A5 I& S$ \# E2 s! @* O: J: ^; Y9 I

2 N- x  c' t" O4 B* P4.2 相关寄存器
: ~$ i  ]8 c2 K2 ]8 v' n4.2.1 控制及状态寄存器CTRL: e# c  R5 b% _4 K
1.png 6 G* v5 n, D+ X3 j8 I
Bit 16:计数状态(只读)8 i( b: Z8 C9 V( Z$ I3 h- }
       0:该位数据已经被读走
4 s% K( g/ G' Q  q  ]* l; E       1:上次读取到该位的数据后,计数值达到了0
! x6 G/ ~- w, v. \0 @( `Bit 2:时钟源选择4 v5 E6 [$ G+ w, H4 q/ v& Q2 d* P
       0:外部时钟源
! W' i8 U3 e) N  O0 p( H       1:内核时钟! h5 w- T! f4 A+ \, S: ?
Bit 1:中断标志位
4 B  Q- \2 ?& r0 e$ ^       0:计数到0不产生中断
4 N  n; ^  e* Q       1:计数到0产生SysTick中断
& f4 l! h9 H* ]Bit 0:定时器使能位6 l+ M: c% b" V+ c# a8 t9 o+ z
       0:关闭定时器
7 X2 [2 o& G8 w       1:开启定时器! v% u" y- k, B% _
( f! X9 I5 H, c3 k3 {6 @/ L7 H& z
4.2.2 重装载数值寄存器LOAD+ A# p8 r, I8 A) m% N. Z
2.png % u, i: |3 p& l" s4 |' k0 Q1 _1 L
ReLoad[23:0]:当计数到0后,该寄存器的数据自动更新到VAL中。8 V6 v; l; o0 k( v( \. |: k
4 p0 a; y; C4 c3 t: l
( h8 Y  }4 b9 P: e8 t0 H

5 [6 @% [) X  {5 W, v0 C4.2.3 当前数值寄存器VAL
" c6 z8 g& H1 N$ c! v 3.png
0 Y6 ?* d. Q7 U6 xVAL[23:0]:读取时返回当前倒计数的值,写它:清零,同时还会清除在SysTick控制及状态寄存器中的flag标志。" W9 g! i3 r7 x
9 U* f3 f3 [. Y1 q- [

6 Z& v" O; {7 L
: E+ k7 B2 ^! v4.2.4 校准值寄存器CALIB: e+ q+ Z# T4 G/ }# k( g

/ s: K3 Y* u+ a/ |4 f$ H" T

! C; o  U( Y# ~, t/ n/ HBit 31:外部参考时钟可用标志
- h2 K% e7 ^; w       0:外部参考时钟可用
. _6 |7 i/ e5 Y3 f& L* L4 W8 k       1:外部参考时钟不可用
" Y7 q" H" ]2 H1 o% V. W/ A$ B0 j$ z9 d0 B8 v- N

/ `* L8 Y3 H2 yBit 30:校准值10ms标志
  ~& O6 h! h7 ^% |       0:校准是准确的10ms* Q, o: L3 r! |. i$ o) s8 V3 v3 p
       1:校准不是准确的10ms
# u3 S- j3 F: ^+ a# [# |! @% }
" s  d' \6 |/ S& o

: ~! r% Z( _6 JBit 23~Bit 0:10ms的时间内倒计数的格数。若该值读回零,则表示无法使用校准功能" l" D5 o6 y% f+ c' |! }8 _4 ]
7 o& r+ e4 L! c( i2 N# K0 q$ g
9 X; s8 u' u0 v% [7 s: B
4.3 SysTick驱动函数
0 i3 T& l9 k% H. j2 n+ T8 u& V4.3.1 创建目录
& f# Z3 C  z$ Q/ u(1)在SYSTEM目录下创建delay文件夹,并创建delay.c和delay.h文件。如下图所示。
0 h# N( p( x; b& a# `3 H* I$ x 4.png
8 E0 O% a1 e1 K8 `2 R(2)将delay.c添加进工程,delay.h添加进程序。
4 d" m6 n! F5 [0 R: Z0 F7 U 5.png : U/ u! h/ J$ P3 f9 c
(3)在delay.h文件中输入如下内容。
* L% \2 U* E' v 6.png 5 @8 K% @  Z5 Z* F1 Z  z
(4)底层寄存器文件添加寄存器组9 a+ Q2 w  v$ j- v  H$ p
7.png ) L$ J) Z& X& H, ?* c
(5)底层寄存器文件添加基础地址
& ~/ h3 e- X8 |2 m  j( C 8.png 8 m4 p2 U+ w" ^$ `6 j) _6 r! D
4.3.2 初始化9 L4 f) E/ v# c$ z8 Y, N3 N

2 D9 u- z9 g) G: z    这里首先选择外部时钟源,由于系统时钟72MHz,并且SYSTICK时钟固定位系统时钟的1/8,所以1us的计数脉冲实际是72/8,也就是9个脉冲才是1us,这个1us的脉冲数就是基础时钟。3 b% H; Q8 h2 |
1 _0 b7 T6 ~& s

6 f, X: O1 B8 Q: T$ T8 y4.3.3 us级别延时函数; N' k8 S! v+ f* B. l/ g1 Q
9.png
6 H1 z* E) {" V. q  c7 Y% H, l- C; h* [
4.3.4 ms级别延时函数
4 q9 K( s6 I* T* e4 Y6 A 10.png
; o2 f. h0 k, r/ X) x; r上一篇:3 B& @" x, Y3 ]( `7 Q3 _' R0 O
STM32学习笔记03—中断架构1 v! n" j$ Y. M+ F2 D% g
1 i' s0 ?/ C  P# |1 Q8 H$ b" z
赞 1 收藏 评论0 发布时间:2020-10-27 14:27

举报

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