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

【经验分享】STM32f1时钟系统整理

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统6 {+ U$ N5 H  Q3 s8 s  M

" _, t) \8 E7 I& k" h; m一、祭出STM32F1的官方时钟框图+ G  x$ j. U( v+ V" g7 ]

4 L0 _7 x7 |3 |' Y: n! i4 k
20201008101308453.png

! R2 s  C4 q, J# [5 R7 Z  G6 P  ^  G- a9 J' A1 ?( U- S" x
20201008101308299.jpg
7 E: _! z( ?& R! }7 P
' y# E) r4 u: H/ C" V1 w5 l5 q

  Z5 X. G. q3 Q% a6 A. r二、寄存器说明
( b: v3 C1 V) X  }/ X+ O
8 y$ P3 `; m: b1、时钟控制寄存器RCC_CR4 |3 o, ^" m  J- [, U  g

- {8 P3 s# f  J6 d( W& a
20201008101308232.jpg

' R: o2 X3 L! E5 A9 w+ x9 q% J5 X: |
第0位:HSION(0,关闭;1,开启)0 J8 ]7 J$ X+ h: ~

- Z1 v/ i( z( ^5 Y  E) |, k% Y# U第1位:HSIRDY(0,HSI未就绪;1,HSI就绪), v* i- v, v: k" g8 i1 K# V2 m1 M  o
$ s4 l" p  Z; v* b* k  \
第16位:HSEON(0,关闭;1,开启)  O0 x2 q' m/ {$ ]

6 |- E2 W" p! ~; E第17位:HSERDY(0,HSE未就绪;1,HSE就绪)( d* _! \+ c; E) t

4 o/ r) {4 q& a3 d' s- T第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
0 f) i; w- C2 U2 H( d& e# Z  n5 {. _- W: ^! W" X7 |% l% p' L
第24位:PLLON(0,关闭PLL;1,使能PLL)
" G6 D* `0 [  t( F  N1 j6 j3 }( n
3 V% u5 L9 z. v, z1 c: Y4 g第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
+ H  g6 Y# t9 j# b  K5 C0 w0 E
0 A" F: u, G) b9 y7 K; M+ \: L7 K0 a) n# P! w
2、时钟配置寄存器RCC_CFGR
. L  ]1 L  e  t- W3 P; o( L2 J+ r! k- t3 b2 H( m
20201008101308204.jpg
( n$ q% r: J! f- H$ v# J
. Q8 Q- K! A6 A, }
20201008101307851.jpg

. l2 F; r* j$ T. w$ k) P
4 \$ c( W) y2 v
8 m1 x& _" h! F第1:0位SW: 软件设置时钟源5 A8 h" ^9 h3 V, @
: G! }, }( P3 q4 W1 }% ~
00:HSI为系统时钟 ( x: E0 Q" @$ R8 M6 N1 k. Q& J2 j
* U1 ~0 M! q% p# _4 y
01:HSE为系统时钟
3 S/ X" W! h! J# N% j( n$ j9 J! w3 ]5 q& ?" ~
10:PLL作为系统时钟# P  Z: ^. V- D7 F2 L; E! k
, o6 E6 q" f9 C2 Z4 H( R
11:时钟不可用
$ k- h( c. K6 m- [. b4 X0 A
; v. E+ B% q8 k4 O! n  D$ u- }) O第3:2位SWS:硬件指示时钟源
; m+ l9 f1 `2 r* Y3 W0 n$ U2 [3 [
00:HSI为系统时钟
  G1 W8 {; ]1 @& ~, e2 b% v5 S; z# w/ l; I6 B9 D; x! D  B
01:HSE为系统时钟
1 e5 u4 N8 V- z8 _4 ~9 o3 S+ K5 d
10:PLL作为系统时钟
1 a$ i  r4 L% j; o; Y: u9 |6 q. E( O+ `" G9 F8 |& J
11:时钟不可用* ]5 p$ E" t: y/ y

8 ^# H4 q- U: L6 M第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)( ]% G9 m  d2 n% e
- A& E/ O9 H+ B9 h
20201008101307795.jpg

7 C& S9 K" C+ o& a' e4 t6 |8 B9 }$ n+ X2 C9 m/ _/ U
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
. q8 z' V! p' [; @2 p
# z( ]2 h8 f3 v2 j3 Y, v
20201008101308154.jpg
: H6 T, K/ R- P% u! _$ ^

4 {# S; q5 V: s: g2 Y4 o( g第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册): T) y$ [; ]+ S' D" `1 p+ `: u
. ?& r' l) a  @: U* P
20201008101308173.jpg
& _% i9 P; {4 V$ Q) c

7 o2 M3 @7 {9 Z  L3 t4 D- V第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)+ I% a( L7 b/ T' A1 _" k0 ^' u* W

6 H0 o+ s5 v9 P5 K% ?, W! s
20201008101308153.jpg
% ?1 H! V& F2 r: u
# }9 c$ i5 K7 \) E3 r* U9 K
        00:APB2的2分频5 I4 Z8 m$ r2 p0 e' F

6 v+ ~- T6 e* ~        01:APB2的4分频. c+ H' o  h4 W
( Q% F8 M* A9 \9 A4 Z# v# o" ~
        10:APB2的6分频
2 {7 L  S5 R7 O: e+ I
) ^. v& \, c" L9 a( |; }        11:APB2的8分频
: A9 u% S) q5 B# u. s& p
) e/ S4 q2 b! c4 l第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入). n# z9 ]% x; N, l  h
" V7 F4 h, o& Z- y% ?
20201008101308171.jpg

6 Y0 f4 @$ N" D' U- C: a7 e% V, o
        0:HSI的2分频作为PLL的输入时钟
& L# l$ l% j& U; k# z+ u
7 Z) W; A; L. m2 r9 \        1:HSE作为PLL的输入时钟7 G. X) ~/ r* ?3 g  U, \8 P. i3 C; j
7 a1 ?* d% _* V
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频* i( u, V' |/ e
5 k9 e9 D/ E9 V, }

$ w, `) `9 Y, v/ R/ o5 O  N5 @6 Z. l2 a1 n7 Z
        0:HSE不分频
: N  x; H4 G% a% I0 l9 e0 |0 i4 J: P& r
        1:HSE 2分频
' H9 X* |/ t  j% O$ z, `5 b0 ^+ w9 B; A/ e) o1 O
第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)" f& I! ?% V9 Z! B0 }/ r

% U1 l+ E0 B- C8 t5 e
20201008101307972.jpg

. u+ y6 {1 J# q0 ~
+ Z. C9 V  L/ p3 G* |9 i* S. {3 h        详见参考手册
- ?( j6 K( L' `- C* ]! k
- t# J7 b& {3 |( g8 ?  M! G第22位USBPRE:软件设置USB时钟0 }5 @5 g2 g+ S, s! M' f2 R5 H
: m1 T. v8 P' m" ]% t7 R$ e
20201008101308155.jpg
3 T& s: P1 j4 @

( U6 I" o( |" J9 w8 \# t) j        0:PLL时钟1.5倍分频作为USB时钟
. X& x. O  X# \9 u* L4 p7 X8 ]" g' D+ |: c9 y  X
        1:PLL直接作为USB时钟" v0 n$ X6 X" z8 q
  u0 M" R* E; D- f1 B: {2 v2 M
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)$ Q: ^2 S( q, h
7 T9 d# c& U0 i. f  x
% _& w0 ]; d) [% w

% ~1 R  Q- A! t7 X0 d# j& j: D3 d# o5 B, E        0xx:无输出
+ X. s! o2 J5 f+ Q* m4 g: M8 L& G) O) ~1 e; g% W" L" D! D
        100:输出系统时钟SYSCLK6 i) ^" v  h/ d
: m, ~( B& q! F5 \
        101:HSI输出- W8 I1 }$ N' v- o
  c/ z* j5 `; W$ e; C3 V
        110:HSE输出
: t+ ~- s0 ?/ i0 |8 h8 W7 Z/ K
6 g- H. c) P; K, ^        111:PLL的2分频输出8 ?. v. Q/ u% P, d/ ?! X, f& L- p

1 J6 m6 e9 g3 Z  {: Z$ j
. t) {( j5 \" ~% \6 J- b) z5 N$ {% s7 \' K1 b# l
3、时钟中断寄存器RCC_CIR
3 R. E- I/ ], a7 i
8 S% H0 Z: r3 b! r9 t4、APB2外设复位寄存器(RCC_APB2RSTR)) D6 w5 _* v) s" S( [- |* s) c; ]; x

( a( \3 i% h9 @! l对应位写1复位相应外设,写0无作用
. D; }! \1 u- [+ O1 s* {9 j: `+ {0 k% q
20201008101308262.jpg

# N/ Q9 b; E" c5 P# Q5 W  p7 C/ V
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
* W& R- h) }0 _- V' V* B, G& }, \5 O: o+ R4 A& y6 z. o
对应位写1复位相应外设,写0无作用' d" ~' X4 |4 v+ }7 x
; k) n6 q$ F% j" P. z
20201008101308280.jpg

% V" U5 R1 g( ~$ ]  m5 x0 t$ c8 K1 x! z; K
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   
: v4 C' r# t' d& t( f' j7 y3 u0 J  e# l! T" V
对应位写1开启相应外设,写0关闭外设
* G6 c& I: q* ^- y
3 u# S8 T0 l- ~) D
* R0 v$ W6 ~) h

! t& }6 T  L+ Y7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
. }7 j( C) G& `- x' r3 [7 `$ V' `8 Q* k! x
对应位写1开启相应外设,写0关闭外设
; o7 k; v- R  A+ h. X  V1 ^
9 q* H+ [+ _8 D6 R" Q6 P
' A' D( e' `3 _0 Y
- @( l) t, p6 u! i( [* i
8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)1 f! }; c$ a" B: q. h' B! v

5 Q) r9 D3 k) w0 X 对应位写1开启相应外设,写0关闭外设
6 Z" a2 P9 ]% B( C6 V  M& ]' o0 L4 `3 K/ G
' `5 U3 j/ W0 n' O. G) G& Z

6 g( D) F+ ]$ x7 N( [( Q: y 9、备份域控制寄存器 (RCC_BDCR)
7 X+ W8 J3 L9 `/ N  D% @  ]: S4 s5 u" w4 [6 M
20201008101308229.jpg
! b9 q7 Z2 [. X, \$ _

: z1 |( [( C2 H3 U5 s# ?) v$ f第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
5 V& A$ r0 t( h! m$ {3 A2 q9 F0 M2 j9 s- V2 [
第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;1 U: |) ^2 P. L8 G, L9 |

  ?/ X, O, p3 I: _6 w第15位RTCEN:RTC时钟使能:0:关闭,1开启;
+ @4 }6 ]7 {7 e3 s# c- h! e9 V1 i& [
0 r7 F. @4 @, d0 L10、控制/状态寄存器(RCC_CSR)
! g' Z& ?0 Z( c- B4 p' T0 N$ Y' b1 O; i. P0 `
20201008101308238.jpg

8 Q. Y  j3 s& k: n
" f; z. W5 _* p) [第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
3 {' }: _. V% u9 i8 G! l
$ R" Y( }: t9 E1 E0 m4 H第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;. q) `# ?/ H5 J

7 X3 V. x; q$ O5 S第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生
4 ?+ a) F) h3 n; |3 O- q5 \
' H, r) ?/ t9 }7 o; U$ T0 p. f第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生% O) `& ]3 k* y
, P. `. O& X! J0 l/ _( u

; s' z0 B  T* T2 @$ H) t主要相关库函数:
0 F+ z  i2 {' |* a4 p3 m3 F1 [6 d. O) P1 l7 q) a; M9 P* l( m
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;. D1 M8 _  f6 l% |- J

; w$ v/ b+ T5 @6 t4 {* R5 R, K2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);
9 f% z' @. R& M/ F) M6 O# w
4 c8 B6 j% b7 v4 \* t3 F1 N3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值
" J& U& r: h. I% D9 J1 E9 g3 E# N+ K. x
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)
( [6 ~! ~/ _5 G! U4 s1 K/ Z. L1 y  Y+ e" {" r& @4 p1 B7 F+ E
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
3 I$ [- z! G( o# Y+ r! \
0 i7 V5 d4 N* F' b8 |7 f, q6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL: w; Z) E+ D2 f

3 u9 s/ H) y) M8 d4 M6 u+ {7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源
. ?. \  U3 C5 x+ A4 K2 c4 L4 E/ C  i$ W$ O) t
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)
- J0 ~4 T* F  w* j" l, c
9 o! ^0 b7 b9 d. s' k9 L& a9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
# Y, }* ?/ o: e) v) _2 ~  i
7 w: k+ u# d  F! f  E! O/ V6 A10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)  j1 s# l' w" i  K. f0 B
5 T! k! x& A$ c% P( J4 Y7 b4 e& y3 @
11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断0 g& }" ], w: x6 B7 m) P  S
6 w1 v( U8 c' b7 s/ `5 _' E
12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)! p' U! o2 E/ E% R6 H

% t1 s9 U8 R$ [' U13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)/ t4 Q& _9 }9 M' z5 Z
( @! f8 K4 [9 h4 y6 W
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟, {% p6 m, v  g) [( b: X

& g( O8 ], v9 i15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟
9 s; _' E4 M* D1 g9 ?" ^) z$ ]6 Z( F9 L5 H
16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
$ ?3 `, }# m: t8 J  P9 F- C% F1 ^5 }7 C: y) _
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位/ k7 M; V4 j3 T, W" Z7 s2 B
$ b# O  p7 f8 @! c
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位: x. [" e& t4 j# h4 \
/ M& Q6 N8 Y6 X9 y) ?8 E
19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位0 {# M7 V4 G* p/ ^& S' P7 V5 b
7 d  d# ~8 l( {
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统
0 Z5 I. Y' t7 C* z. w3 t3 G' P3 |. B  s: T* _  f# f
21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
7 I% L1 l  G4 n/ j+ I2 W
0 l: A( B! |* o* C: K22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
% B: c% w: q0 u/ O/ M5 j& C" W; H4 Y8 _8 O& r. b) k; j9 z! v
//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;1 Q2 n9 P* U3 Y3 V$ V. C
! ^+ j7 Y* S! x! D: t9 Q. |
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;
0 a+ H: p. E7 R7 k# T3 N7 c: b7 B% @
9 w2 J7 \( E1 g//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;6 W2 |$ U0 u+ ~9 R/ U" ], {

2 ?' D: D5 R2 I4 U, D7 o& }6 _//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;6 j* [6 c: z3 i& y. V2 {! t
' `+ |: W) ~# @6 l, I/ W
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
' x6 ~) ^0 j* ]+ n1 c
  p: D% Z( a& f7 i: m( E% `+ S0 l//RCC_FLAG_LPWRRST ,低功耗复位2 o" Z' p% X- P$ O
. Y# i' `! D+ I
23、void RCC_ClearFlag(void);//清除RCC的复位标志位& L* C9 g6 {8 E

# X$ T: O& ?; ]4 H1 r24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否
- o9 w6 |# {* T  }1 H( w7 B. I0 r# N0 A3 k, T3 j$ M6 l2 Z! v
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
( R9 c  S" A1 l) e2 Y6 K( G# W( g% r
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
% t( L* n. @- j! Y
- l5 H$ h3 `9 z+ z//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断  T, w9 J1 C3 k: m9 m; j! C  P$ ?

* D. u; ~, q* i) N% s: C25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位
% J9 `& b) }1 C" B: A+ O
* g, Z' z; C5 ?8 u* r8 @' T//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
0 ?/ q: w2 h. ?' L  \% j4 j# B; p1 g; r: ?
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
  O7 G/ x8 W8 I, _6 _3 d; L7 G3 F, j: h; O% c* U
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断1 f. ]( @" T& e- O1 s% G/ a# M
- i6 |( J/ k" g0 e# h7 a; X+ g

) ?3 X" u- Q# g) t4 [
20201008101308453.png
20201008101308258.jpg
20201008101308274.jpg
赞 收藏 评论0 发布时间:2021-11-27 10:06

举报

0个回答

所属标签

相似技术帖

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