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

STM32学习笔记04—SysTick时钟

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

, S) |, ]& x( K; I: N
0 Q3 K6 ?3 c* `% c, E1 g
4.1 SysTick概述& B; X# P4 b( n' H$ p
       Cortex-M3内核的处理器,内部包含了一个SysTick定时器,SysTick是一个24位的倒计数定时器,当计数到0时,将从ReLoad寄存器中自动重装载定时初值,开始新一轮计数。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。3 n4 J' t. m, J5 m% P; @

8 }& ]' H' W& c$ u& C

) n* @8 b' d+ k  h       SysTick定时器能产生中断,CM3为它专门开出一个异常类型,并且在向量表中有它的一席之地。它使操作系统和其它系统软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间对其处理都是相同的。
$ P+ D  N# E' |6 F& t& j) O
+ @+ f2 j' j( j8 f3 G

0 [$ J$ o8 J2 j. N7 \3 ?+ m# A       我们在程序中使用SysTick时钟来作为延时函数,这样就不会占用定时器资源,SysTick时钟是一个直接挂载在AHB总线上的一个定时器,输入的时钟频率直接就是AHB总线上的时钟频率,使用SysTick定时器进行延时,可以精确的设置延时时间,与之前51单片机的for循环累加的精度是完全不一样的。
1 u$ D7 s: a+ |6 s" v! v5 L' w, y& n6 N( q- e/ Z9 F1 A' y
7 I7 V& ^+ {- u! R* f. P2 o9 a. z
4.2 相关寄存器: P7 f6 ~+ u* u
4.2.1 控制及状态寄存器CTRL7 g+ ^! G" E# j0 l  K  J
1.png   U' p) g5 |* p/ W1 B2 q# d
Bit 16:计数状态(只读): L  r5 [( @' w6 k% z2 R* d
       0:该位数据已经被读走: z7 W* @% I8 r; x7 `1 a
       1:上次读取到该位的数据后,计数值达到了05 n9 m2 [% k3 t0 c# ~* N* F, z3 c+ {  t
Bit 2:时钟源选择
6 i% c( A1 q2 p  D# t$ d' P5 R) S1 l       0:外部时钟源
( q; r6 ^0 t( P; u5 x$ _       1:内核时钟- q2 x3 `0 c6 D# G3 C
Bit 1:中断标志位
! ]& o0 Y$ ?, w& |& V6 o       0:计数到0不产生中断
% g8 S+ ]' E. \$ Y: q       1:计数到0产生SysTick中断* V. O/ b& H: ]/ M
Bit 0:定时器使能位- S6 [. V0 m' e
       0:关闭定时器
1 Y" c( K6 b% g0 p; o: ?       1:开启定时器: U. c$ }* v/ s" x  g- C
3 y+ A9 ^0 T$ `3 [1 ?9 {
4.2.2 重装载数值寄存器LOAD
8 f3 ]4 b. ^* S" G" | 2.png ! D7 z  q7 w5 Y* {
ReLoad[23:0]:当计数到0后,该寄存器的数据自动更新到VAL中。. [! B( V/ {) ?

  ], c% A/ B9 M# i# ^' |# @
- I7 j- k- j+ K' K9 k! g

8 q* h$ N1 T+ s. g, P  [5 F4.2.3 当前数值寄存器VAL
4 |* m: c0 {7 T$ h 3.png 6 a3 L- S7 ?; C( C3 z
VAL[23:0]:读取时返回当前倒计数的值,写它:清零,同时还会清除在SysTick控制及状态寄存器中的flag标志。1 c' n) e% i& v5 K+ x

8 ], z& e8 `; C) p; z; [

# b8 x+ S& K6 r8 n
( a; x1 E; ]- N9 g' o* T4.2.4 校准值寄存器CALIB
: ~; L! p+ x* F
8 g2 N+ v: r& X4 m0 ?' J( }. M

  u- s* C- }: b- r  a* f0 Z( sBit 31:外部参考时钟可用标志: O3 Y, ]7 t% u" N) v
       0:外部参考时钟可用
) w$ B3 Y& N# u" p! h8 |       1:外部参考时钟不可用4 S' A0 K$ B3 {

$ q* R" j: ?1 S
+ d5 ]* l) l) ]& s
Bit 30:校准值10ms标志
2 Z& x) H2 k0 y$ J& \       0:校准是准确的10ms
: ]* E/ ^2 Z- g       1:校准不是准确的10ms# S% ^( U$ l2 u+ R6 C- H

8 U( K5 u& K4 E
) ?6 e. M3 H6 _( b( ~
Bit 23~Bit 0:10ms的时间内倒计数的格数。若该值读回零,则表示无法使用校准功能
1 \: g1 |- b5 P( n" t% S5 k& v9 I/ M% T; D8 ~. \2 a2 C4 p
. l" l4 P+ M4 J6 l3 A, N+ e5 F
4.3 SysTick驱动函数
7 G8 w$ m9 S$ v8 f/ d4.3.1 创建目录
' \8 R5 C) `- s! \; w* {5 n6 ?(1)在SYSTEM目录下创建delay文件夹,并创建delay.c和delay.h文件。如下图所示。
8 F+ w; W% B$ s9 v: n2 T5 V/ X 4.png 3 j* a# z% _% G
(2)将delay.c添加进工程,delay.h添加进程序。1 o' l, f) D2 h
5.png
/ d' q2 N' S1 a8 a, k(3)在delay.h文件中输入如下内容。
1 z; A- v; [6 a' W: a, c; | 6.png # H* t/ u$ @+ l, l0 r! q; W6 s
(4)底层寄存器文件添加寄存器组
0 R" m3 Q; B( @; e5 e) k% q 7.png 1 P- x/ z* j. C2 [' y6 `
(5)底层寄存器文件添加基础地址
) q" \% O  i$ S& e5 @ 8.png
# V4 R# p" j+ g  u4.3.2 初始化; x6 x: g  L5 ?: X4 B4 m7 F! o; L/ u+ z

/ l- v) u# h$ B4 i    这里首先选择外部时钟源,由于系统时钟72MHz,并且SYSTICK时钟固定位系统时钟的1/8,所以1us的计数脉冲实际是72/8,也就是9个脉冲才是1us,这个1us的脉冲数就是基础时钟。% s! l' z3 U2 N0 Q6 m. i! v

  j5 M/ w3 {, K' ^1 [

/ G/ c# ^$ n, _7 f* X4.3.3 us级别延时函数) T2 C4 U2 X7 ^& ?. f  B( `8 m
9.png ) y4 n# Z( y  X8 T  s) C  s
$ p. Y- R% F0 E, e- x
4.3.4 ms级别延时函数
. e6 G% X" A8 T# {6 k 10.png 0 Z  V# q# k) p5 \, U2 ~3 M8 @% i/ x
上一篇:- J  c+ @7 i7 U5 m  m9 W
STM32学习笔记03—中断架构
9 ~: s- w! F6 f$ E1 r' j/ t4 q" y
1 收藏 评论0 发布时间:2020-10-27 14:27

举报

0个回答

所属标签

相似分享

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