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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统/ g; N  d7 s( F
9 `7 M( s" i" Y0 s: x2 K
一、祭出STM32F1的官方时钟框图$ W" x5 t/ s8 T! S
1 B! y3 m# v5 {8 S& H2 ~
20201008101308453.png

: M5 H( f, |6 C) ~
4 X/ k7 P( a( q# q0 a
20201008101308299.jpg

! ~9 _! z8 R& v4 T- M2 N1 T/ o% k# }
3 F5 c/ q; n* S+ N; t2 a5 M- l$ F! c! L/ ]6 b4 }" |  j  I0 }+ t
二、寄存器说明
, L5 b; Y! ]7 E4 D" a& A1 \
6 T- {+ m: Q7 k$ Z' Y: f1、时钟控制寄存器RCC_CR
$ p7 K9 O* m' w* o6 r: }# ~' {/ L
4 U8 F- o( ^$ F  y5 `$ E2 R
20201008101308232.jpg

- {! m1 a: Z8 j" }: V
+ L0 _0 H; X- m' F6 I第0位:HSION(0,关闭;1,开启)
) m7 ]) k  ?* C7 c# u) I! j( k9 N& G; {1 u) E- N
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)' S" j: y# k1 U# F& u

9 |/ Y2 p1 X1 _第16位:HSEON(0,关闭;1,开启)1 w6 c$ f- J3 S8 h3 p5 Q# ^: _

6 m1 s. R9 n$ a. i; J7 d第17位:HSERDY(0,HSE未就绪;1,HSE就绪)
8 m. V& v  ^( X3 e7 W, G  @( z# b: ^7 \& ~& @5 X# k
第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
; ~. i- G& W$ Z3 D9 c9 X6 H* j( D% T1 e
! ~; E/ n1 r+ i第24位:PLLON(0,关闭PLL;1,使能PLL)  k5 N5 h9 r8 O

7 S* ~4 z: [5 n5 E9 Q第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)" F/ [# U+ F- o8 v6 [1 d9 x8 ]

" y, @+ D" f9 Y8 u5 ?6 i8 O8 k! w$ W
2、时钟配置寄存器RCC_CFGR* @: i7 v( g/ z  p4 f* _+ E

: f! U$ j/ u7 B6 z- @4 w
20201008101308204.jpg
, }- b; d8 W1 u  Y0 m2 i7 o5 q2 Q
1 B& m* p, V6 H$ C) O
20201008101307851.jpg

& _9 ~4 q3 r% l& ]9 S4 O7 N. L6 N( C9 M- n2 ^% F8 U
0 M3 X1 i) s5 z: ~4 k, Z
第1:0位SW: 软件设置时钟源
0 o1 [& Y5 @' |4 v, }1 X
( w& U5 [* n7 O! H: D$ n00:HSI为系统时钟   u4 d* `) c# q* M0 G  J; s

; J0 }$ |$ U8 T2 w- o01:HSE为系统时钟
" y; Y0 ^5 O$ C+ f& d% G
: w2 |+ m1 s- v  f  G10:PLL作为系统时钟* p9 Y8 J" `5 r" p5 w# u

3 Q) q- _. m- [/ ]11:时钟不可用
0 ]# p4 I( `* h+ q- h# u# ~4 s/ z8 X& u6 f2 E/ H* \- H
第3:2位SWS:硬件指示时钟源9 E4 ?. Z8 S3 F+ y

9 {1 G) I+ R' b7 P$ P8 N0 Q9 F00:HSI为系统时钟
, |0 B; h6 D3 k) j9 H
/ H1 L0 p# U. N0 Y+ w  s8 b2 b01:HSE为系统时钟" w/ x+ ~4 ]: t9 Q/ X
3 }9 F" g/ f; T' p8 `9 [3 `
10:PLL作为系统时钟
  l7 p# K9 k4 E$ [9 U
  ]: A( D9 k, \! h% }+ z11:时钟不可用0 N0 e2 E) Z; I9 e( |9 [
1 g" q8 v8 s: c8 J
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)
6 [# q6 h( D' R2 u$ Y) |, A+ A2 V* j2 m6 V! |( j
20201008101307795.jpg
! q0 k6 s, A& V

% X- x# D! J9 _% W* ?+ P5 e第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
7 i6 k, g: i8 c. m7 s+ K; b; w
6 _. h7 }% y' x/ ~
20201008101308154.jpg

4 n8 g6 j9 q9 X; {$ W& ]% F4 f. f, g
$ `7 F6 b) r( m5 R) m% Q% F/ j第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)( H! S! I& P0 {% ]; c* U

" S; }/ I7 Y8 r: S
20201008101308173.jpg

. _) E/ ]. E9 ?  x- |7 F& m! k0 T, E
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
  ~& j+ L/ U: T2 Q6 _1 @# y$ H! H# ]" E* W
3 W! M8 Z0 M  G& H! s
20201008101308153.jpg
2 a, c) L% k! t$ A

8 g! `# d( d" T2 U        00:APB2的2分频, |  ?! K+ D8 W# y3 ]6 z3 o# I
6 v5 I7 c% Z8 Y: g( [
        01:APB2的4分频
) N6 i0 @7 C& x( J1 D
3 [4 H. G8 d) d+ d% S        10:APB2的6分频# N- Y4 P2 x+ e8 N

2 ]8 Q0 X2 _- |* s; z( y        11:APB2的8分频4 F' _6 Z+ D9 K! F' A

$ i. I! d3 y5 S% x6 u% v2 B第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
$ P3 ?$ A9 P& m' C/ N
8 P7 Z7 y3 S  _2 T& u
20201008101308171.jpg
% [& S+ U9 Z7 r/ v
4 H! r- K5 y' ^3 T, |8 y7 r
        0:HSI的2分频作为PLL的输入时钟
2 |; _1 p8 f* s- H% K6 e7 j' S( T
1 G0 H/ S4 O: U9 |  D2 b: Z        1:HSE作为PLL的输入时钟& m4 ^6 |/ A: W# [4 z% o! B4 v

/ `9 F2 I: G4 U" F, P) s3 ^第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频6 i* z3 B) I4 Y4 p) {# h6 G% r
0 {7 |: ~9 @* {

: ]1 L$ V  H' s! a* ]* Y: l
  W. a0 Y% F: L        0:HSE不分频
  Q# B- k$ e( k6 x" ^7 @  `0 x+ `; A, `* n$ U1 A( f6 `* [
        1:HSE 2分频  P% N0 _, C3 x+ T' X* |

( U6 U3 a7 T! w第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)# N4 F3 n) x4 N4 q2 E* U
2 H. P: i4 Q6 O4 c; f1 _
20201008101307972.jpg

) G# _" f$ w& K& p8 A
, }% y  M$ Z$ g7 f6 M        详见参考手册/ S6 w; g# ~; I5 g, r0 \

: e3 v; M" z3 w1 ]# f2 G第22位USBPRE:软件设置USB时钟4 p4 W, r( `6 K
, j/ y- g1 F, H& i2 }4 p& j
20201008101308155.jpg
. q2 Y- _6 m" }% s6 p. y* ^: I

5 V; p9 O+ a  ^0 g1 a0 W        0:PLL时钟1.5倍分频作为USB时钟
& a3 e9 K$ |/ Y3 |( |8 ]: _( A. U- J0 {3 O: Y7 _! A7 R3 T" D/ A# W
        1:PLL直接作为USB时钟, w0 h3 Y7 e0 H# z

6 G- N; n+ o& m/ r5 f' a6 i$ q第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)" Y7 O9 e+ q0 P+ i9 o  N
1 n6 J4 j, y+ y  K& I. w1 z

- @9 @0 m6 p( \/ _7 L' W* E9 P- v# e, }/ Z( D! @8 T
        0xx:无输出
9 ^/ J+ L9 X  [/ e7 [
; v$ l1 V8 F# ?+ E! B, T7 F2 v1 T        100:输出系统时钟SYSCLK
9 I/ `9 y3 H' c
2 Q# Y. N  G9 A5 c3 l% I& F& U        101:HSI输出; C7 B$ R. D$ {. v2 [. O0 i
1 @$ t9 z4 Z" K) k% N
        110:HSE输出
" j% T9 }7 P6 \1 g' h' J* X* M( p8 i' M) \5 {
        111:PLL的2分频输出+ @) Q, M; w" X# p; R+ w% X3 v

- n- H& O, T/ e' k
% M# v9 ]0 l0 [- `3 G; z
% E; `( ?/ I" ^) Q2 i. b1 }" G3、时钟中断寄存器RCC_CIR* u/ |  v$ J9 E+ d% O
/ C& Z7 }3 y8 k) j$ ]$ k& V
4、APB2外设复位寄存器(RCC_APB2RSTR)( r; ?- c0 @2 d

! @5 a. }2 f3 b. P对应位写1复位相应外设,写0无作用
6 U/ q5 x; M2 ?9 u$ b# W' o3 V8 [- U: q6 H
20201008101308262.jpg
, F! o! ]& }& s5 ?8 f/ m
3 }4 W4 m1 g  h
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
7 T0 ?$ I( r4 L! Q. c5 ^; i& e0 Z  j5 F2 i* l$ J
对应位写1复位相应外设,写0无作用% a& }7 Y& b, ~4 s) h. w1 w; [
! l7 z9 X$ C# t
20201008101308280.jpg

3 [1 x0 B: r% Q0 ]  g/ e. I8 [3 ]0 @+ q1 U/ I1 k& Q% U$ B
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   . _% z/ ]0 o8 @& I7 U
; r, O& s/ m7 r
对应位写1开启相应外设,写0关闭外设8 k# ]9 _8 G8 v- b- d
) s9 ~4 B' ?  G

/ K8 t& F/ j5 i( G% E; H' ^2 b* n7 V
7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
% v  r2 t6 }( C) X: W0 G
! m6 r- n6 u3 U9 S  n7 e1 n4 W对应位写1开启相应外设,写0关闭外设" v* \1 `5 |/ h

$ `  |7 ?1 r/ I7 C
7 h# b# y% ^6 S" S/ J/ p

* V& T+ J7 _) \* |' @2 r 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)
8 {1 \4 x! P/ S+ S7 X9 N3 c, c9 V% G' x- J4 |, S* c
对应位写1开启相应外设,写0关闭外设. Y; i1 ^+ z) k* y4 k
+ s0 w: k9 Y- ~9 A

: E1 d% n+ Y7 O# ~7 Z% g5 t4 [
# u; M3 Q, @* t) f" n- E 9、备份域控制寄存器 (RCC_BDCR)! ]; l+ `7 `2 z8 v3 Q. W. w

" D+ b2 S5 K6 C3 [% @/ S& v
20201008101308229.jpg
* _& L0 V# r! {
5 J6 ~/ r! u& M' w1 i) P
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
# v6 p2 h! Y0 u
4 n$ j% V2 N# R' p9 s2 p! }" c第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;0 d$ X) R  ]3 l' Y* D4 P5 O! P
$ P6 L: z. @- @5 n+ _
第15位RTCEN:RTC时钟使能:0:关闭,1开启;! l: G. U$ }2 R( ]* z  \1 Q
& p; c9 T, |5 c' n
10、控制/状态寄存器(RCC_CSR)
' p, \9 w/ }0 u( w: S8 @; ?  ]; g+ X7 D
20201008101308238.jpg

6 C- T6 L, e; w; A& s4 G- w$ J9 s0 t, O2 S
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
' P' i. A8 q( H$ d) Y$ u3 J( p4 p
第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;% l4 b* r$ B! R! s
; ?0 N5 J/ [% G# O9 L
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生- |5 Y0 k0 J9 |
# I$ Y7 p2 K! U
第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
, |2 g5 Z( k6 [/ y& G4 A7 [* Q& G
! h% X1 i2 r4 B4 Z# {
/ |& N) z7 u0 P5 S主要相关库函数:  J" T+ p! }# `3 V
! M: v6 _! L. o& t1 t$ ]  U6 E& r
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;. U, B# ~+ ^2 {5 _
. h/ r0 l9 I% h" D! C3 s
2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);' f$ T5 H. q3 w8 U' L

* c5 I. `" I+ I% A" z! {) h3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值
; g0 j) a5 [* k. H7 [! Z
* d) H+ N" }: |( Q4 d4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)8 ?: u& O: Q- }( Y1 ^1 K' t5 x5 e
; E$ d3 i; X( \3 A
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
; H0 G" ]- r" k. I9 o9 a; X
; k, \: |" `! F9 q  \" w# p' H8 [6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL+ x* J' u: L% Q# I8 q7 W
0 T: C- y( q7 E/ _: n- \
7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源
: e7 o) M* z+ z0 c" p7 A0 f+ j0 u# k: A- x
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)
# {5 x% {$ H3 z3 E9 h2 h
. j0 q) p8 @6 {' V. E" \2 _: q9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
  y3 e5 j6 A3 n- F$ x8 @
' W2 A6 e2 @% O0 m9 Y10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)
: Y6 p' D& \7 T6 E
3 z) u8 u0 ?5 }! ?5 ~5 X. f11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断
8 V  O# \( D6 F# x8 d. h; z/ x
* @# N+ C" p+ Y12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
1 ~+ H; N2 ^- B1 j( Q/ K$ t0 f  H) C3 B% P! j. x! v/ W
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)1 T: B' C% p* X  \
% v" p# D" ]2 l- G
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟; S3 q6 B" H" \
" z' c8 K, s2 Q( \
15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟6 w' r8 f$ W* O; r" W! }

% V; W; g/ Y" @2 S16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟( v" R" ^0 _* i
8 s4 }' z1 {% r9 X
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位: a) n. ?( W" z
& ^# b* m- f& b6 _5 Z; q& s
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位7 o2 q) o1 g: d; n

  t' D* `; o" S, V) L19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位
, f" C4 Y# m: V# c( E( o) ~8 f7 o; k" `0 p
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统
4 a# ?0 |* p8 `# }. ?" C5 o
: W! @* g* b$ c( ?/ g' b1 V. V2 f7 C21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
& a; o4 y4 d& X- ^& z* \: _- u: v( ^7 y+ }! S: I) s' @3 a
22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
  v2 b6 t+ E* F" j
: ^) p; u4 `( a, W//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
) u, ?0 Y: f3 n; j9 D8 f* \
) d# M! ]1 b" E//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;2 d3 M5 [0 ?5 f% r0 s
1 \$ T+ E+ Y' I9 W* x( E1 A  t
//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
' e" L/ O- C# h" P1 ]6 r
1 E/ U) M& v6 [$ o9 z9 H: \1 F//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;
+ z  u9 p! ?% H! W5 e' d# N& {6 `: h9 N$ C$ T: o& p
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
( d* R& m9 L. P( ~+ N4 p# V$ p' H7 X  L0 ~6 x% c3 v
//RCC_FLAG_LPWRRST ,低功耗复位* r( |+ c* P/ v3 B. k$ ]" ?

9 L( f  K9 z1 t8 _23、void RCC_ClearFlag(void);//清除RCC的复位标志位0 P, W- P5 E" m, R3 S/ o8 ]4 ~0 k
$ D0 ]0 j% @! W
24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否% i: |- G; p/ l0 @( @4 z
8 m' Z9 K' J' p# \* ?
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断, E5 f7 |& x& u6 {$ v, _* `
+ S/ E8 c$ j# D. I
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断7 H: v' z( H8 ]0 t0 X5 P
/ T2 B6 B* ~  i8 q* x& I6 u1 T$ G! q
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断3 ~- s  {: K! h$ N9 H& C
' Y# ?' ?) R5 }$ w
25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位
1 z6 v! q! @  {  U+ D7 F2 p: c+ e6 p+ O! ^; w7 a
//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
2 w- A/ W6 ?' Z) d" \! e" G" g. b% ~8 q$ E+ }' k, H
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断* D% |" B) x5 y  p* O8 G$ n

( I# d+ W0 `6 T7 b//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断2 @3 Z& p% m/ [% }
& s$ P8 y4 \* G2 `$ c/ `$ G* `+ d

" m* b# D8 F& [0 ?6 V' M8 ~+ B
20201008101308453.png
20201008101308258.jpg
20201008101308274.jpg
收藏 评论0 发布时间:2021-11-27 10:06

举报

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