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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
2 G8 H2 R0 X# ~# i" {0 ]
' c* c8 `5 [# l* |一、祭出STM32F1的官方时钟框图
! w! }3 y8 c2 v* a$ ~# ^' r; Z/ o
20201008101308453.png
* G% L& A/ K/ A" L1 n1 k" T. _- c
) E( m  q' T2 l5 W, G
20201008101308299.jpg

7 r  e# ~' O; ]
6 c: s% C1 m* ^& _4 I$ ]
  n" t7 d, T8 c3 |0 r6 {二、寄存器说明
5 V/ n, j- C. {" I0 g1 |, g
# p0 d; k. t1 E) g* ]% b* V8 y1、时钟控制寄存器RCC_CR
4 C$ K$ }- [- m/ v* I2 W
6 R5 B! p. F& v
20201008101308232.jpg
9 n1 a2 Z5 M1 r

0 F+ U) u; \# O第0位:HSION(0,关闭;1,开启)
  o; n! S4 @8 d1 x$ F; a! V9 `; T3 Z: T! U4 N7 r
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)
& @& V% j; c* ?% `* u$ |/ \9 Y; u7 d7 k; Q! h
第16位:HSEON(0,关闭;1,开启)1 D- `3 `4 M' n7 Q3 a$ P( r6 Z
  b# _$ |3 L( x7 M. m( ?
第17位:HSERDY(0,HSE未就绪;1,HSE就绪)
( ]1 k# t, c2 J$ E# F+ \  l
( [" [- r9 O) ^( Q! [$ q0 b/ f+ G第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
9 p3 d2 Y* V/ n! h2 j9 V1 m2 G* f
2 c# @( N3 c( j5 O8 m; b1 _- l: W第24位:PLLON(0,关闭PLL;1,使能PLL)
  o  ~1 j) M5 ~' M: d0 T5 h# q: Q) D& e8 C$ F/ V5 W$ R- U
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)( z, j- D. `( r3 O* E6 X

8 f0 B" O# t4 J
" D1 u+ o7 F! a* R9 I- q+ i: I2、时钟配置寄存器RCC_CFGR3 {6 s; M' R& T+ z* h" p

2 {2 m  ~8 w2 C- u; o( a" {
20201008101308204.jpg

# g2 l* |. x. s" f- y# K2 q* _3 M
# _5 G4 M( `' F9 m) E
20201008101307851.jpg
" ?6 D4 a& ~2 u

3 W/ t! ~  S) F' }+ S! v
9 J) V0 s- J0 h0 L第1:0位SW: 软件设置时钟源
6 q8 Y4 G( R- y" w" O
0 m8 J! a0 l$ Z0 w( i; ~00:HSI为系统时钟
1 v+ l1 @3 a9 r* f# L5 P6 j: k& H* }2 E- \4 w
01:HSE为系统时钟8 n% k7 W6 `* I- U7 X! H" A4 y6 }8 m

0 L# z( F/ j; w. E! F10:PLL作为系统时钟
7 {0 u+ Y, J& h  K
% ]$ ~1 m9 G. [- e' K11:时钟不可用
3 o+ A+ A) z0 G9 H' N4 {! B
% b# z' t! M! i% {; \第3:2位SWS:硬件指示时钟源
0 v% D7 e" q% f0 }$ J( J1 f. \+ j% r. Z4 Z# D. f& f4 @: y( B
00:HSI为系统时钟
1 h8 D1 ^( J4 f; e+ _' A8 h0 J1 E9 _1 c" Z- r$ a8 M
01:HSE为系统时钟
+ o) p! R! t/ I6 M
* N+ |3 g6 v% Q6 k* C5 \10:PLL作为系统时钟
$ V6 w5 `& g8 n) h) g! `7 x" q$ J' I9 e7 s
11:时钟不可用
" {1 _, N5 U! o) R
) G% h4 E% h9 u4 Y) L第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)
/ J/ c0 t2 ]4 a- Y9 }6 c3 h, |$ X& W; q% N
20201008101307795.jpg
' e" c# W, D1 J0 G$ A' E" u/ S9 b, ^! c
' e5 x( A# o0 r/ @& c) D& M8 O: ~! I
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)% B7 a6 V  _6 W: J
. T& I# F% W( K% T8 I9 r
20201008101308154.jpg

4 i  d0 y4 b5 x9 @% q5 C+ F# O3 F- x: E! [
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)
% Q4 x5 v  }$ v& {
9 A- ?9 I$ a4 y, T! g
20201008101308173.jpg
- d8 K  c; I0 {' B# o

( d# i3 K8 C6 {# m6 b第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
$ N" h* S3 U% a# D4 U/ V5 |8 F' M3 Z) P
20201008101308153.jpg
1 _4 K' n, b" n; |# ^" U

$ S# o6 l, c, X1 F! G6 d4 j2 g        00:APB2的2分频; S% t6 D. v6 p3 ^( I6 Z

! E" M8 U) y$ e- R% x8 T% M        01:APB2的4分频9 d# E9 f0 I$ P; F8 U5 m: `
( y* c/ {/ k7 ?1 Y* {, s. i1 H2 c: e
        10:APB2的6分频
# R$ g: X$ z. r/ ?7 x
+ I" }" {5 D* w        11:APB2的8分频
5 R# I. V* B6 i; b9 K# ~, e7 |& ~" C" D' k( h  R0 n
第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
% t: i. t+ ], l  O+ k: A  m% {6 v1 T3 X3 C" t% t
20201008101308171.jpg

9 Y  p0 u+ P- V0 f* d0 `5 t! h: m1 _0 O# A+ a7 B5 t
        0:HSI的2分频作为PLL的输入时钟  F* q! w) i8 h* ]/ P7 f9 k8 i

# V: j" i5 K9 }        1:HSE作为PLL的输入时钟) N/ x5 u- g. z; k7 R

% ]8 K: s+ w' t4 I" F9 L6 q第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
3 @* F# M* y2 T+ E5 w
6 {' n+ z+ O5 D7 m) \- A

4 ~  `* `, I0 S  N6 Y: g
2 D$ O  y, z( P2 A+ C( s& i4 j        0:HSE不分频& ~* j- E1 ]# Z2 i, t. Z

- P7 F$ G: e( T6 S+ i& a7 U/ _* _* V- Z        1:HSE 2分频! `" S/ B( ?+ F5 h( \+ M2 j4 c( f
( p4 b1 }) k5 m6 N
第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)# Z1 s2 @. G) E

8 t6 b5 Q& I; F6 B4 d4 u0 }
20201008101307972.jpg
& y1 X$ G3 j0 ~, X6 l; D( |# W4 W

$ Q: {/ G; u& p3 p        详见参考手册
/ y& ^) Z- w. s; I5 \- W5 U: }5 I+ E% j
第22位USBPRE:软件设置USB时钟
" J, T+ y: i/ k
4 s: P& [1 \- B
20201008101308155.jpg

) F0 b' v) S4 O9 ^' W  I+ W5 Z% J7 \
        0:PLL时钟1.5倍分频作为USB时钟
) H' P( K3 Z& D; O0 y+ Y9 q7 k3 G' y: o+ \& Z5 C
        1:PLL直接作为USB时钟+ d) v& A' x# H

3 U7 s" w6 t' T9 S+ a6 G第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)
/ ?1 U1 k  k* R- G! s* W+ D+ }4 o1 h% u" F

) `3 f8 s6 k' ^$ t: p% N2 |
4 ~, P. d$ D+ |) _0 L" X        0xx:无输出
5 a5 e4 C- G/ \) r
1 }) ]/ k, |4 \        100:输出系统时钟SYSCLK
: r2 X3 }' q" g9 _7 p- a' F: D, f: Q# c+ S2 Y7 G% d+ ]% h: h0 u
        101:HSI输出# R5 {% I+ X8 D. W9 @( O
) n) n' {* [6 u) U" _2 L
        110:HSE输出' g" N1 l0 i8 V9 Z  A

# B" V) q; W% W, |  _  q        111:PLL的2分频输出
! U5 \4 m7 A( ~& g! g, J+ H. B+ N1 _- w; `. B) A
# c6 D  ?, `" D' q% Q
2 `/ T  Q% p9 @3 a1 [
3、时钟中断寄存器RCC_CIR
$ H3 R! z9 A4 k  Q/ i. u: t: G( S, n9 v) f
4、APB2外设复位寄存器(RCC_APB2RSTR)% q( D2 x+ l" M2 S- E
' y+ t; |- h; H4 E8 [- [
对应位写1复位相应外设,写0无作用
% Q) b% J3 f1 z' {3 K, T6 ]# l/ E! P# w! Q# |! ?8 ]
20201008101308262.jpg

. ~+ W* d6 r4 `$ M; G0 s8 O) ?( I; ^& G; C
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
! Q9 ~0 X1 ?7 I, `
4 {; D1 @% p1 U% I/ x8 [+ O对应位写1复位相应外设,写0无作用2 R( D! U& u' W3 u. s/ T
0 v6 b' U/ N4 g* i' A2 M
20201008101308280.jpg

/ o% y1 Q3 Q$ ?6 x( Z6 V' D( H& d- F  j+ u8 S- l& B  M' J0 O- ^
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)     ], j3 E- ]( \$ E2 M
5 c4 R! ?: C3 C7 }9 e, F( \4 E
对应位写1开启相应外设,写0关闭外设
" J0 P; T, H# r2 L5 y+ m& g0 O& i0 z
8 n: s* y* P( w/ [4 ~

1 d3 K3 r3 e+ {, j5 S/ y
3 v4 k, z6 Q6 g! H/ W* D% w7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
- t) \& J8 j: A% ~" i% U: q# a9 ]+ X8 G2 n
对应位写1开启相应外设,写0关闭外设
4 O$ G6 ?4 h9 p! Y8 k6 i
2 P( F' v% i5 P
2 B& G( @1 j5 h. e6 o) `" r

" y5 T: d* {1 V; l4 k$ D1 m 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)# ^0 k# o( F+ z7 b- l
' O+ h- {& v2 x. e: H- _% P+ S
对应位写1开启相应外设,写0关闭外设
% P% n. p, ?4 D7 q& k+ j  [0 `/ B! A7 {* c
0 T9 P) {, g8 K) C/ q

- A$ c3 G) ]# H& h* E 9、备份域控制寄存器 (RCC_BDCR)7 D, e; x- Z/ W* u6 q& M% t$ a/ D7 b

; O( F$ ~( C7 J' I( L$ J
20201008101308229.jpg

! E) a: E9 U5 G$ E' O, |, ?) ~! z' y9 Z9 b; G4 m
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;4 B; J; @  i  Z5 {! J( L: g

  P/ j: J9 ^' v  E6 s* s  R第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;
3 ~; ]8 s4 t2 S" X  F! i% |" C7 U0 Y: x
第15位RTCEN:RTC时钟使能:0:关闭,1开启;8 i2 G8 F. F" }4 K6 E

+ Y4 t6 _% Z( @5 {& u1 A10、控制/状态寄存器(RCC_CSR)
9 i" l1 e# }$ B( F) {" P% x% k( j7 V9 \
20201008101308238.jpg
$ B  {% Z% e( Y+ @" _/ C5 Z
$ b# T# m9 Q! T) K# R. l
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
0 Q8 o) g( h& \( M/ `+ [9 A% l# D0 ~& C' K* D3 ^7 U
第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
; c+ `; ~4 @% l" }
& {; I3 R7 n  D; f, d6 q8 D/ P第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生, k. G& t9 b% ?' T, K8 u4 x* i: {5 l
# X# j6 ^' e0 \# G+ h7 n
第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
/ q" `' S$ [1 f2 a' Z) R+ f3 z" Z/ M  ^; h& K% g' C2 |, V

% p8 m; {# w, U$ L9 [主要相关库函数:
- O7 G! {* S# C# \5 ?+ W& |" G" ~" G4 o0 [# V* e
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
' l) z4 `; W5 l
: P% e& O7 c+ h/ H& N3 G2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);- W; H$ i# T/ `. p
. R5 x% T. R3 W& y* L. m' N
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值, \( o2 C" U) m; \7 y
4 B/ E# [# t9 R8 j3 d& S8 ?
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)
  K7 r* y& w4 P" g3 S3 {+ h1 _$ K3 {+ x
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
5 b9 [/ n2 A) ?" d' W) C4 `% C1 k' [, A& C) `" ^4 _
6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
* c  B) z1 k. g3 J% Y9 r
% g% L2 T! R2 F" v! i+ |8 O  ]7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源
) o6 }& S) k3 A( B4 X: R0 ]! I) E% P3 d$ s6 |
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)% Z; X0 ^! G) l. v
  |8 h+ z) Q4 z; F& h; @8 Q+ h
9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)" r1 m8 o7 `0 u8 g  Y% m

8 i% X5 }6 I7 _: A6 d10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)1 ]9 W8 h" c; r  D8 r

" [" s0 s! [( {- k# d6 |1 ]/ A1 p11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断% k( D4 Q9 L( Q

5 \* v! F$ V) W12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
4 w0 O% u6 A: n; a( g$ y8 \7 y+ n. ~: `/ I+ \( ?
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)% w: D) b/ r  d  e" }; R3 Y& m
$ ^7 m+ P* M- Y5 C# ^) a3 h7 w
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟
' @) N/ R6 ^7 P  D  C
1 f' I6 i$ |4 {& K$ ]. b4 ^- _; \; f15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟7 @7 ~7 ?* O2 Y9 ^5 C

* X6 B# {5 i- H- Y8 i# @16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
0 y/ j/ u  w! H) z' F  @# `, G" B. k8 I" d) O! `- R
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位; g& q$ x+ g0 d0 ]( a: a

! m5 }8 a* R2 a/ G18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位
) Z, I6 e5 o# \. }, v- ?
" f) C( o5 ]  Q! Q7 J  r0 \19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位
/ A6 h$ q- @% z' [. `6 B) [4 z4 K5 E' X& D7 _; H1 K& X. r
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统" F' N) m& e3 m' ]3 {; W! M
& M' P* g% ~7 |/ l7 H$ h( M
21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
6 k& R8 n5 A/ ?" d. u0 S+ G6 E& Z1 \* Q: a, T- ~5 R$ X* g6 |7 J
22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
7 }7 W/ x% v( r5 u
  ~1 n3 Q0 u1 B5 K& P6 E$ l: t//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;9 S5 a7 i5 k0 H

7 ?) `  M  u2 a& J3 g# K2 Y- A! N% ]% Z//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;
, T, o7 u9 k; x9 j, Q: x% y% r8 H* {2 b5 K2 V- o
//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
. m1 r) b8 v/ r+ @4 Q
% Y  X5 x  h: U6 `//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;( T5 e2 z" G3 h4 a7 l' B2 D- H3 x0 c

) v* C6 z* x  \6 ~//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
9 V1 }% z, V6 q5 X7 b. x+ |9 F, M5 g6 W  C( y/ Y+ }
//RCC_FLAG_LPWRRST ,低功耗复位
% _  j8 d! B% W" T! i) a
. I) P3 s( Q+ t: h7 h, F8 x23、void RCC_ClearFlag(void);//清除RCC的复位标志位
' ~0 t& p1 I+ Q( u2 y
+ x/ X- [1 }: S% c: _24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否
5 f* K8 j4 J) U* A" f  j- t! R
* ?& I$ V9 V! w; f//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
8 D. c- q/ K/ |7 K3 `! j+ `5 Z, v
) m. g! b3 C+ L+ z; i% d1 P, K//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
6 h' K! |$ a6 f4 B0 s2 ~- \7 W; C+ n! ?# B% I9 M' E
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
# ]5 D7 f0 P1 m2 t0 d
5 j+ i, B0 y* Q: Y9 @! Q  S25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位- H5 Y8 A8 S. M  B3 b
$ m9 Q7 C% ~, u- c0 D3 k/ F- |
//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
+ V. l4 w/ m( [7 p6 w. `$ v5 W& o+ r- {  L7 \! Z
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
6 X+ w' I0 y! D1 X. t/ ?( F8 z) ]2 z, O
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断, O+ n% x* [5 l/ O- Q7 X

2 U2 S+ e0 D8 M! W) D2 _9 `+ M6 u4 I
20201008101308453.png
20201008101308258.jpg
20201008101308274.jpg
赞 收藏 评论0 发布时间:2021-11-27 10:06

举报

0个回答

所属标签

相似技术帖

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