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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
2 W1 h4 d/ x8 R
1 x; X+ E2 Z* M" G一、祭出STM32F1的官方时钟框图
' X- B' \$ f+ \; @2 D3 Y# E* J0 c- H2 \& V( r7 k8 L4 K: [
20201008101308453.png

/ C2 m) `. b2 X0 m# h( Y
- S1 t2 S6 X5 Q- E  F9 G- C/ p
20201008101308299.jpg

! E, d# n2 Q. u. F& ^  T) R$ V; a- r
# r# o6 \) h9 {1 ^% O0 q" V/ k  j
二、寄存器说明
3 I1 R3 y% F) a) r& p
+ Z$ s4 p" B  ]( e1、时钟控制寄存器RCC_CR
$ F* N% Y- L/ I4 W
% j/ P" m* R( B( R7 e7 P( V
20201008101308232.jpg
5 m$ l6 F" l9 e% S' ]

3 @1 A6 w* G% z: J8 e" K. P: t第0位:HSION(0,关闭;1,开启)+ ~& J: {1 A( z" Y5 I5 I; R
& F: b3 |* j2 D& j, e4 B5 J
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)- X6 G5 m7 q: W, R2 ]* l1 ?& e, A
! ]) d& v' J+ M8 x/ k9 E
第16位:HSEON(0,关闭;1,开启)# g  k) \) l0 i( @7 Z' X0 z! h0 ?
# N* T+ v3 v1 b  b' G6 J1 q
第17位:HSERDY(0,HSE未就绪;1,HSE就绪), I# D6 a% O- i/ F% y1 Q

0 R/ S% B& g2 N9 j: t第19位:CSSON(0,时钟检测关闭;1,时钟监控开启), G4 s- {6 k" \, p

: \; a  g3 B- G" z; N第24位:PLLON(0,关闭PLL;1,使能PLL)0 D$ U; S3 |, u6 b
) D3 W" x# u# p% F, h4 W4 L$ B
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)5 z$ M; s# g' K" y, j7 D
& E7 B* H! ?% D5 I. {
2 i* s4 R# ~  S5 m4 s! E( V
2、时钟配置寄存器RCC_CFGR
8 Y  j" r; }4 V0 [
0 T& P0 B1 B! l) R1 c
20201008101308204.jpg

4 C2 w' @5 X* b0 N8 s( z1 p6 Y$ U# I9 S# f. }' N
20201008101307851.jpg
. Z% S. @- J9 U# e$ Z
  @4 @9 W& c- j' ~4 x

' j( ~( r$ M( i, ]' d第1:0位SW: 软件设置时钟源
4 n3 g+ W/ O/ H  Y! W3 f3 I8 @# {7 y/ b7 ?7 G1 D: v( z* g
00:HSI为系统时钟 ( F  j( F" o) V1 F5 E4 n1 z

4 T  Y4 t! D1 F$ k: W01:HSE为系统时钟
3 [( f( w- Y3 T+ n  w
$ f( c7 q" h1 t7 F8 G+ j10:PLL作为系统时钟) T! J. m: g) o: v; v

! E3 r% @! Y% r0 l8 I, }11:时钟不可用  c$ M% O% `1 e' Y% x/ R; `  n
: S) }& t! L: N5 W% X
第3:2位SWS:硬件指示时钟源
  D* z; t1 L# Z: A" ~' w
7 `) t7 a4 a6 j" h; O00:HSI为系统时钟 . ?6 {/ M" G, S7 w8 ?" i

( g6 ~6 @# v( J6 N) Z. H01:HSE为系统时钟
& C. y  l- x! I( z/ S/ @* Y% ^+ W
10:PLL作为系统时钟( [7 D5 Q' ^& m' d0 u) l
: q3 Q) ]/ n8 j: Z; G8 U/ i' Z2 ?
11:时钟不可用( J/ c. A# \/ ]' W, L( x. T- a
; [8 n: z+ E8 O
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)
( u- O2 d! B' V) V' S" }. I) C) y) S$ N0 s% g3 _1 R- X
20201008101307795.jpg
+ {) f: B) U2 T- f' d4 J" N
8 _0 h, b* h  d
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)5 I/ u0 W( }$ r6 P0 r1 }
) M' Y1 h& \  u" Y  |# |1 \* G2 O
20201008101308154.jpg
9 D5 r* g" h( D

  C: ?1 O9 W$ ^* m8 z3 ?$ u" X5 ?第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)
9 p: @2 h5 ~) e/ T+ @$ @$ n
" e7 a* a8 |8 D
20201008101308173.jpg

2 A( s3 w) U! ^- e/ h2 B9 X, p# ^$ d: t- i  a* l0 {/ T, {9 \1 @% m
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
( ?* ^( r/ a4 Z" f' m! P) ^9 v3 @" q( ~8 J
20201008101308153.jpg
/ L, `& J/ g" e# D

2 b2 V: o. U; t% B- l- N        00:APB2的2分频* M9 [4 u/ P3 w8 O) d- i

: k+ b7 U' Z) E0 I2 |6 H& Q        01:APB2的4分频
9 I' }7 C0 f- ~& R( w: p, F: T, L# h; c; C% B8 k
        10:APB2的6分频% k. G& ~4 Y1 y1 a2 A* X
/ ~4 U; E5 w1 s1 C( |
        11:APB2的8分频
$ ^  v2 R' Q# G6 L- Y: {7 F; c9 f# j8 @6 T
第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)2 \% X: z/ O. w2 ]$ C4 y

! ~- R& N' c! `
20201008101308171.jpg
7 ~* A% @8 e8 p  H9 X  {
  ~2 Q  w1 |" @* W
        0:HSI的2分频作为PLL的输入时钟, d) X8 {$ E/ E& a0 H3 c4 f
& p& w6 m9 h2 G( J6 z
        1:HSE作为PLL的输入时钟, Q. x7 y; B0 a7 c& U  S# I
2 J7 F' @% F  x9 J/ h
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
: r7 o- g: Q3 z$ C5 r/ c
3 O  `( M1 Z, |. n! P" b) b* G

' I/ {* P8 }- ~# r1 n5 L8 O
, R  C4 C" `& k! E  l% ~        0:HSE不分频
6 W1 ^  W$ E  t# ?: R" M0 c" k" V3 w5 Q- ^* s3 P3 L
        1:HSE 2分频3 m* W) ~" j1 J+ j

0 Q$ |; N  Q& y( s7 m第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)
+ {6 Z# U) z, Q
: w* O$ R' q9 h4 H8 f  I0 f# L6 C% U
20201008101307972.jpg
4 A$ X8 A3 ~, B9 ^  n) L1 @9 \

4 z; C  z! F' e        详见参考手册
* A$ H8 p% h" N6 n+ e" H+ L3 J& u- }! Z0 O* Q1 r
第22位USBPRE:软件设置USB时钟
( _  `2 \) Z% ?
$ `6 {9 B5 M  H  ?
20201008101308155.jpg
& |: v  I4 U: m- _7 Q+ N

: x2 g, r: h  p7 y/ X        0:PLL时钟1.5倍分频作为USB时钟
+ H& e' |" j6 r
9 J# N8 f3 O3 {        1:PLL直接作为USB时钟# U0 k1 N8 u3 S" R6 Y6 ?, D
; D. D' P: G7 f& A  D) z
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)* K3 }! t" P+ N/ E7 V, |" l

) R' L$ i& `0 q* Q$ F- T
$ M( @9 V& j& R+ S6 ^7 {6 `

8 K# s& q) @! f$ j* W! w        0xx:无输出, a( }! e: H2 d8 y9 R

: L, d: a" n: ]8 a  R. z; [        100:输出系统时钟SYSCLK
# O3 ~1 ?$ h/ v# ]% H5 h5 y, x$ _* O# f! U" S3 v+ q# v
        101:HSI输出
3 D. d( x# p* `/ W% K5 ?" s8 d( a) g( c6 t& _7 i6 C) V6 V: d  X5 M' g
        110:HSE输出7 ~7 j# `) ~7 F( ~# V2 C7 i9 E2 N4 x
# V& B" U; {# W& O6 ^( n1 L- Y
        111:PLL的2分频输出. a* W4 h$ I$ e0 _* E, U& y1 w
$ s8 D# a% \3 Y% m

1 r0 ]" M5 D/ H" H2 S- w
/ ^+ _/ Z1 M2 N3、时钟中断寄存器RCC_CIR
* N+ o3 [( v7 D( P! ^4 w2 f- B9 j6 o0 s
4、APB2外设复位寄存器(RCC_APB2RSTR)
+ T/ }, ]! L( G1 a
" y2 e1 [) e! P! X* G对应位写1复位相应外设,写0无作用
: j+ T9 o. v- Z0 M# J3 D6 p/ J) {
5 r2 x4 X$ J/ X: f' k; i
20201008101308262.jpg
: D* I8 a% r, n( V  ?1 B
" I5 ]$ b; i/ n1 E. u5 u
5、APB1 外设复位寄存器 (RCC_APB1RSTR), S  g8 X" Y: A% ~8 {% Y$ z9 t( F

5 `* {  ?7 P3 g) B) h6 `对应位写1复位相应外设,写0无作用/ Y8 |# H9 @; q8 Q( d+ a' p
" [8 ?6 h/ s% J$ [( q& _( E
20201008101308280.jpg

- H" h  I& U- _2 _/ R4 }6 i  H# I' i
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   % C* i9 C. t" ^- A+ T

3 q: C! f9 i: n9 O- w对应位写1开启相应外设,写0关闭外设
5 q% u9 e9 r: C* y( E
" l5 }5 I0 ]4 h; |) F  g
5 u( L1 I! V3 L" U: |1 l( c

' G1 t! f5 o. [" W8 j0 c- \7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
, O7 v; a* j( Z, Y9 Y9 R
$ T' o, I, |' o  v2 i对应位写1开启相应外设,写0关闭外设
4 F) y' g4 J0 H% L, A  \
* h" r0 k7 c& d* w

9 b$ S' o1 B, r3 G9 ~  h4 u* g
( `! m) C* N* i; \2 {7 { 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)
" q, C- S+ Z9 a. e1 U9 R
' c3 T5 c# a+ M! g5 J+ _3 J+ t6 E9 U$ n 对应位写1开启相应外设,写0关闭外设
8 f4 D5 r- i' w1 i3 @8 H# H
6 `8 ^' n, `6 G  R2 W* [2 @

9 m2 b2 P' |8 m- P: z& a- ]1 Z. g6 {% i+ X' u( ?
9、备份域控制寄存器 (RCC_BDCR)
& O9 s5 O1 [* K) b/ f2 _9 D4 K
0 L0 w1 }9 k6 Y* u1 r
20201008101308229.jpg

1 ^) j) t- \; e/ v3 a( d
/ B  R$ S6 X: \第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
% J0 }8 O' l, a1 m2 p& Y- X/ q2 Q2 o. u. R6 _
第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;
, ~; |4 U  m" e/ S1 @& _
- a4 M( V. n+ ~# F1 B+ A第15位RTCEN:RTC时钟使能:0:关闭,1开启;$ V; n2 I# _* {, c' M

, X+ _1 v3 r4 q9 _4 A& a9 A9 [4 {% G10、控制/状态寄存器(RCC_CSR)  J  G$ O, K. a' }0 X& A
* A" K- F3 T, d7 X7 L: Y, J
20201008101308238.jpg
' ]  a: e' e7 n! a, ]2 ?
- O8 j0 G' a! `+ H
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪: M6 b. }1 ^0 a# m# i$ R

6 P# D1 s) \; M8 ?! Y5 A! i  q第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;& O! E* L, G7 `! Z
* v7 v% l9 {" ]' ?; h. ^% j
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生
& s) u0 Y2 \7 O; ^
# }. ?* @+ L, e5 ~  G0 y( O0 W% a- Y第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生2 y/ J$ ~9 g( o, J' V/ B
2 N  W' E7 }) h6 E6 l- V! _% f

/ r+ Y3 P1 o( }* b8 x* E  I主要相关库函数:
7 \6 x2 j- D- c2 \2 o) h# c3 t" N: w/ D: `
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
8 U7 s) r" s% V) g! ]4 r- D' s" n0 h3 z+ S, Y. n; d
2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);
; q0 {8 j: e: ~8 f  l5 O* Q, x' M, G6 r1 G' k7 q* R
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值% @+ X; ]. u* W- g6 I0 x- i

* Z* y& l& ?" ~, X  ]4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)8 u0 O! m; S' I, C, m

% H+ P0 q( |: g5 J5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
- }: e+ h, i$ e" N3 W! ~3 Y. A
6 s% Z7 H9 G/ Q; [$ ~5 P+ ]! Z6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
  E+ T1 w7 [  M/ {
( _) ~$ W% v. b- t" K7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源
! c, ~" Q+ c; M. T8 P) [; Q- e
3 X; O# R) @1 K0 w: B* E2 ~8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK): d+ G, B: v+ b

+ V* c2 H+ S6 g6 q7 h' Z1 w3 d. S3 e9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
! D+ z) S4 Y- n, f) B  }/ `4 U* O- e8 D% R9 N9 u2 f* D5 J
10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)! @# ]6 V. p! ?# n: R
. l4 D5 H# j7 N) l+ _
11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断
* l( i# w. ^8 I  i6 T
. v2 _: ]) ]1 h& x% w) C6 e12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)7 f  p3 P! n4 I/ Y9 F$ Y: m
& G+ s7 P7 Q1 G) {8 ^8 N1 ~2 p
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
4 c) B5 A% Q' Q$ }# D! U
7 p: O: W/ L# C, V14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟
" D& s- W! ~) S! U
# u) ~4 ?1 `9 f8 g0 M6 ~15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟3 P0 l: A" L2 V2 R) O1 n

5 O9 c0 T6 k' k: F16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
- X1 j5 W) M; f9 t% @' J3 X6 r5 Y. T- w2 L; c
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位
: p8 S# H) J7 m
1 X6 ?) U' }# O$ l& @& h18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位
) b+ P# Q+ A0 j' l/ [2 _9 ^
; P6 k1 P8 |  q8 ], O19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位0 i3 d5 |. k) C( c1 S; W; Y* {# d

3 A8 e$ I: I3 U# `; k, c+ A$ R20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统" D0 Y+ Q; j% O8 z8 O+ a9 e/ s

7 ^5 P. j+ Z" R' z0 G) n; U21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
! m  z9 ?) s- J/ D! `( V
) R& c; X9 H- O4 I( {$ }* b22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
+ x/ t- t' b9 ?0 ~7 ~4 W2 s6 [$ i) o& L+ e3 F
//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
3 X' c  |$ L$ A8 G( K4 R9 [2 h" u
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;$ H5 V6 q* @$ ~" o: k4 P7 K* ~) ?

6 V& F8 n3 n' ~& y( i//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;( `- F- n5 B1 z- K2 q
, [& v& `( H' T; n0 f5 V+ A
//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;3 T% j! Y& r4 z( ~. Q- r5 }

2 i  e: f+ {) t  a$ Y2 x//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
! @2 X( q/ \7 \$ F* F) {4 U* K( D3 `$ t9 g* P
//RCC_FLAG_LPWRRST ,低功耗复位
/ ]5 C( z. |" p9 ^2 `4 i0 Y) m9 _6 @2 a( X7 w% P
23、void RCC_ClearFlag(void);//清除RCC的复位标志位
5 K5 r, }8 J2 W# V8 h0 {$ d+ V) @0 m$ F. a, `
24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否& P# U' o0 M' p0 b

- A% T' Y( z  Y" q! v$ ^5 K& c//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
/ C! A6 O( X  C0 b5 @% J9 G% p, {4 N
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
$ b2 i+ E/ |. H  L! o% j, ~! e+ D% h9 t: o9 F
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断" X' S4 q/ t: A0 a2 F% [
- ^" n. L0 N5 M7 F6 n- [
25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位, H5 K: D2 L. |3 M; N" u9 H
; c3 R7 j4 p) j6 D
//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
% U+ H8 ~; @6 u3 U! \0 R( P& c; `# a9 w
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断3 i0 W! K0 K( v' ~& k
7 R! Z' r7 w  p  J. [$ x( K3 q
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断. ~9 m9 J3 m! }4 p( L( l* Q8 G( U

' a& u( }1 R, R0 X8 U+ j+ \0 Y3 l
$ \4 i+ n9 P! \" x8 t
20201008101308453.png
20201008101308258.jpg
20201008101308274.jpg
收藏 评论0 发布时间:2021-11-27 10:06

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版