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

STM32学习笔记04—SysTick时钟

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

, c7 H1 Y" j8 y$ w' M; U9 L

6 R8 G8 z& V; r9 a" {6 l4 r  G4.1 SysTick概述
! \* t: E1 i6 v% K7 x, t       Cortex-M3内核的处理器,内部包含了一个SysTick定时器,SysTick是一个24位的倒计数定时器,当计数到0时,将从ReLoad寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。9 s( m4 j3 r* M3 v3 l1 u

: k- N( Y  J5 ~: o# Q* l' ^. [5 n+ V
% O; O8 f9 w1 @$ o; f
       SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间对其处理都是相同的。
, s5 i2 D; C' z+ h$ ^  U! r( |1 I3 Z$ }  F. ^$ @5 |8 X
  W- z  v4 S) C$ A, G8 w- Q
       我们在程序中使用SysTick时钟来作为延时函数,这样就不会占用定时器资源,SysTick时钟是一个直接挂载在AHB总线上的一个定时器,输入的时钟频率直接就是AHB总线上的时钟频率,使用SysTick定时器进行延时,可以精确的设置延时时间,与之前51单片机的for循环累加的精度是完全不一样的。0 Q2 V$ Y; V: z: D" k
7 p2 l5 F) ]) o$ {" ~# E
- D7 j( V0 [$ i5 K( K, y# T- ?7 F
4.2 相关寄存器
) c9 z+ S+ J7 p( f4.2.1 控制及状态寄存器CTRL' B% ]4 s1 Q- l% Z; Z) K* ]+ F
1.png 3 R: {* D, [4 f0 Q, Y" b7 G5 Y$ ?
Bit 16:计数状态(只读)- S$ L, M1 y6 K( Z
       0:该位数据已经被读走7 W7 v5 C4 u9 M2 w, U! |
       1:上次读取到该位的数据后,计数值达到了0. m) z( N  [& V
Bit 2:时钟源选择' S. A; D  V& X( B
       0:外部时钟源& ^4 q( B6 o9 Z' W% A" `2 w
       1:内核时钟7 D. N. Y, D: A) `: r( F) h2 g
Bit 1:中断标志位
; \% i) |* A* F       0:计数到0不产生中断' m' ?4 k# T5 u
       1:计数到0产生SysTick中断3 _1 T' M4 y2 [+ }" v) ?3 `
Bit 0:定时器使能位
9 C) C( {8 w( _! J       0:关闭定时器6 \& A4 {9 i, U9 m
       1:开启定时器2 `+ P- n: t' ^- `2 M

% y8 i( o8 \& _0 C' t4.2.2 重装载数值寄存器LOAD
& ^# \1 F* v+ p/ U. n% v8 \* N 2.png . V, [: G8 e2 ?, b( y  H7 n6 Y
ReLoad[23:0]:当计数到0后,该寄存器的数据自动更新到VAL中。5 B6 z( Z8 s% J2 m
7 ^$ r( c/ T* q# U% F3 v, G) Z
& Y. H# X2 g) o( W) T' @" h
2 k4 g. u# C' D
4.2.3 当前数值寄存器VAL( O& Z# L9 x7 u# a0 O6 @5 o  u. F
3.png ) T# E! W" g+ {5 R( ^" t0 N# P7 }
VAL[23:0]:读取时返回当前倒计数的值,写它:清零,同时还会清除在SysTick控制及状态寄存器中的flag标志。
  i& G9 s! K4 W* |& O4 J% {6 d$ O# s

- A1 t* P: ~3 S5 x- r& n, L' `
* q3 k1 B4 B- E9 l0 |- ~* B4 V4 D4.2.4 校准值寄存器CALIB* b$ Z7 ?" o3 A; R. o
: T/ w' z6 g9 @0 J  j
9 z4 {$ `- c4 ]+ W  n' b2 ]5 J
Bit 31:外部参考时钟可用标志7 D8 w& X: R  T
       0:外部参考时钟可用
9 a0 J  y4 e4 j       1:外部参考时钟不可用
' m; j) c3 j( b4 |0 u  W5 p! h+ ?. c2 g. S

+ n/ N# P' b7 x! ~, S3 |0 k; |: `Bit 30:校准值10ms标志
% m: U9 }0 I5 n3 _       0:校准是准确的10ms% T4 l' q. U6 U9 r4 B
       1:校准不是准确的10ms
0 M7 u- V4 z+ v* d9 C- j7 L. c8 C8 ], _6 f2 J" ?  M
1 o6 K- M; w) h- a! B
Bit 23~Bit 0:10ms的时间内倒计数的格数。若该值读回零,则表示无法使用校准功能
! j0 V. h) Y# r# g
0 R, ?* H4 f1 \% K! _
1 T) Z3 @/ R& }% d) D, C! R
4.3 SysTick驱动函数7 T8 O, ~6 i; U6 g3 C3 V
4.3.1 创建目录" s- l. r* J" E: Q( W6 p" t* g
(1)在SYSTEM目录下创建delay文件夹,并创建delay.c和delay.h文件。如下图所示。* V( B! W* S& [1 D9 i
4.png " G6 _; h$ u. `1 w3 v) Q) E: E1 c
(2)将delay.c添加进工程,delay.h添加进程序。
" z+ G( S& o( {, V 5.png
) z+ m" _! v8 A8 X(3)在delay.h文件中输入如下内容。0 d0 \/ H# F- C) B. W/ ?- ~' F7 t
6.png
& W: S$ m3 [) W* C' a& q(4)底层寄存器文件添加寄存器组
' z: K# G9 K, X5 z+ H2 n8 I 7.png
. s. H& X$ X# Z, w8 p( D" ?7 B* y(5)底层寄存器文件添加基础地址
, n+ G9 v' I5 z$ g 8.png
/ I  _* i* |* c* l; E0 S4 n8 h4.3.2 初始化
! L+ y. c' {- w4 S
% N& L. X1 u+ G& ^! t    这里首先选择外部时钟源,由于系统时钟72MHz,并且SYSTICK时钟固定位系统时钟的1/8,所以1us的计数脉冲实际是72/8,也就是9个脉冲才是1us,这个1us的脉冲数就是基础时钟。2 G" R" O' B$ O& N$ K% f1 l# Q; n

* K3 [( B+ W# v: C9 V9 }

1 L% Y6 O" Z0 @; t' t4.3.3 us级别延时函数& d8 \7 k5 d; z1 z- D; V
9.png 7 X" u6 E# f4 F9 v( D
7 O& u. F, i% I8 t8 ]
4.3.4 ms级别延时函数7 M5 B9 _+ x8 t, K0 U
10.png
0 r  H4 T/ y0 G  m& s上一篇:8 R3 x2 Q0 Z* c' ~' L5 v+ p; _
STM32学习笔记03—中断架构
5 x% E: i) Q4 H( e+ f/ e1 z/ z4 d2 Q  W4 s$ \. v7 a! H6 ~
1 收藏 评论0 发布时间:2020-10-27 14:27

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版