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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
' ~- x& k' i6 `+ V' G' L% f5 b, T6 f0 {2 @# P: {5 f' q% H9 d
一、祭出STM32F1的官方时钟框图
, m  z/ L4 S4 j8 |% M9 U! N* l* d$ P! B7 L' F
20201008101308453.png
: @9 Z! Z9 K! @& Z" N
( g. O, x7 ^$ W( K
20201008101308299.jpg

8 \: X) S6 a( H% L$ o5 j. e5 @3 ~1 P' [3 @
$ u) W6 N" O# j/ |
二、寄存器说明8 b+ C* ]5 m& k9 V1 T0 T

/ g1 p+ |5 o$ @5 H$ d) G# m1、时钟控制寄存器RCC_CR
. j: e  l+ y! j+ ~  A) g4 P- `9 o
20201008101308232.jpg
) \- f& e& d3 o8 f: J% q, p2 Q

# X* E# r3 n) U第0位:HSION(0,关闭;1,开启)
& w/ o  x/ u* p. j! L- |
0 f. `6 e* J2 F# U  p第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)
* }5 O( s, Y$ u$ p7 I: T2 ~! d5 P% \
第16位:HSEON(0,关闭;1,开启)
* U9 ]8 w) T/ V& I5 d
% F9 Y8 m: o& J( m8 W第17位:HSERDY(0,HSE未就绪;1,HSE就绪)
$ F8 T+ ^* F# |3 }/ l. j8 k; z% i, C( ^9 O. [7 e$ Y
第19位:CSSON(0,时钟检测关闭;1,时钟监控开启): n# @3 p: G. N, d* W' ^% H8 G- n) J) G

4 d/ M; Y  R  u第24位:PLLON(0,关闭PLL;1,使能PLL)2 x- j' I( B4 R7 u& n2 b4 N  N
! K' n  O8 A$ t/ s: v) ^4 z
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
8 Y6 E; N7 A3 d9 f
! }: x' b' v8 X) i. J: R6 m& v  l# |, e, b  z4 Y
2、时钟配置寄存器RCC_CFGR- w. S+ Z6 X* ?$ F/ d" N0 L/ I0 a  E

" V; f. Q& A5 i. w5 Z' u4 h5 c' y# r
20201008101308204.jpg
1 Z* }# N% n& k1 S  j4 D2 M

# H- S3 `# E6 J0 [: U4 [
20201008101307851.jpg

7 h4 C+ q: g8 w6 G$ z
7 z4 ?1 ]9 |' H; P  x' N; f7 `2 {& v6 u: B7 s1 G1 @! M
第1:0位SW: 软件设置时钟源
, ^& _# I  G5 t) z9 j! z* [$ |) `- v& F3 u$ L8 q
00:HSI为系统时钟
0 J2 j4 ]6 `8 N. t  `8 V& q5 ]8 ]0 z8 c8 K  n
01:HSE为系统时钟2 w/ j( o$ u) T; j' e& e
* G: F% T' `( N1 X" H: ?
10:PLL作为系统时钟- c7 K- `5 D: Q* G) j+ H

& m+ P5 l0 j& S" [  j11:时钟不可用
" q1 O/ E5 j% F, p  N! T
8 h& c9 n; V0 }6 @0 K" }% ?+ T第3:2位SWS:硬件指示时钟源
8 k; B* E0 L2 }1 Q) |6 e6 u, n% p& R6 P7 [1 o6 D+ q. L/ u2 D9 V4 v) O! \0 A
00:HSI为系统时钟
5 C' I9 `8 D1 c5 s; t
  Y- y( J/ n0 g+ j7 s01:HSE为系统时钟5 U8 m: Z2 C: E& h! B6 c  ~

2 _( m! O  j" D" ^10:PLL作为系统时钟
4 S) Z$ T  o& w0 `4 l$ N: @) g% d; H5 x
11:时钟不可用# `0 E  F, n0 B$ j9 M/ C+ ?

  Z4 Q3 e. y! ~% L$ z1 D第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)  M% l& K0 Q; N8 Y: F5 N7 C1 k7 d# |
5 y3 h. y1 h7 k+ E
20201008101307795.jpg
+ ~/ r. F# I5 x9 Z4 R8 f( U
+ C  L; \4 T+ d5 B
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
0 d, r7 J# ?) [% a: @0 F* K& \: E) C  a" f  Z+ V
20201008101308154.jpg

8 q/ r' b* O/ n! k/ x- p. l5 _5 J. a: o, e  c( ?6 n/ x9 }) [2 U! Q0 K
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)5 F6 ^- L- g5 O4 I- ]( z7 o: Z

! g9 ~$ C2 h8 C, N
20201008101308173.jpg
! c5 K! R1 F  L2 y" |4 x

( I- Q# ^% n( ~4 z" y第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
7 _" j& c/ z8 M( k" Y
& Y8 J( j1 X: a! q8 T3 z
20201008101308153.jpg

0 X8 B0 g$ d: S2 e2 F8 y: A$ g6 ?7 \# y/ I" W, l; i3 A* m' F
        00:APB2的2分频4 z7 ]& N, V6 w  B5 d8 s; k
& u. \7 q0 _) }; d
        01:APB2的4分频
0 Z; P: g- N; l) ^, x0 B" X  Q; W. ?* ], ~
        10:APB2的6分频- m" u- |( q  v6 \1 N" B) g) j

) q2 q7 q- ~6 U  E, }: b, j( V- u        11:APB2的8分频+ S0 Y0 K/ r/ M- z; k; b( m

7 k$ I: j: `2 _4 F/ {第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)' a" w0 @$ N! X( l' A+ d) j
9 F9 Y/ m* Y: b5 ~
20201008101308171.jpg
$ s% y0 G7 b  [9 P" `# w( g
0 g! l7 |5 c! D
        0:HSI的2分频作为PLL的输入时钟3 e/ U9 r: f" [8 \! ^
" m: J+ c) {. W8 D
        1:HSE作为PLL的输入时钟
4 z8 g2 T" ~6 M/ a; F& \+ I6 F; n+ G# P9 T
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频  D4 j0 q: X% P' Z% A% X. p
% z# m$ u: ?! P+ C7 ]: x; w8 z
+ u+ X9 ~( P% r/ R5 P7 A9 l% e

: m- x& x" N# z0 ]8 e  ~        0:HSE不分频
' i& J) p5 N: j; g* M% S5 s# n! p0 ]- J# S, [# l8 T: w& \
        1:HSE 2分频
$ n3 a& O% e! ^0 S3 U2 c# N! C; ~  p: \* a* D/ ^
第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)( _. U1 P# X9 j! X  N% K2 `
; S5 ~+ `% L2 |+ ^8 d5 W
20201008101307972.jpg
6 B2 T! m/ S1 }$ [7 l

, C" d5 m- C- h2 i: T  b; \$ y. \        详见参考手册
: g+ A0 V( P& \8 @" e/ G4 O
! Y& n) e; I9 y5 @6 g第22位USBPRE:软件设置USB时钟* J6 R3 c, K! l9 l. h4 r
4 d0 D7 N) [# g$ Y( ^* ]2 M! e: O, ]
20201008101308155.jpg
( n) a/ q+ F/ a: L! v0 R
& c0 b( @6 ^6 u
        0:PLL时钟1.5倍分频作为USB时钟
0 _- ?" {' a+ O. o/ c( h0 F8 v$ Y
        1:PLL直接作为USB时钟
& y1 \5 F8 L; r) a) Q! |" r; o/ T; U. l; B# A. O
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)
+ C9 {; J9 S' D0 \+ ]" }3 N& m1 @# ~- a
, T1 O& Y: X6 q5 [* v9 q. D: C/ F

; g5 Y$ X5 d& |3 S" {% @        0xx:无输出/ _# a. C, ?' l9 x

1 a/ A; C* G1 n" ]- L        100:输出系统时钟SYSCLK
( {. d2 c7 i' {$ B* J5 ^
7 P# b; @; X! O+ X        101:HSI输出
, D* o' e2 I5 v" V% F# T3 O6 H) v2 v
        110:HSE输出
5 J8 j5 t! _* e5 _% @0 r+ U/ i( |" A
        111:PLL的2分频输出. `4 K' ?- h! [+ f( p

' f/ n7 w9 h$ e& c1 ]5 ]" I; U/ ^7 @2 F$ e6 l

+ C6 t) y7 N1 p! n3、时钟中断寄存器RCC_CIR
3 S+ R  J- s" @2 |% Y
+ {: M$ [& z( F: u$ B) [! B' M: W* t* E4、APB2外设复位寄存器(RCC_APB2RSTR)" L3 \/ `; F$ R" D; F% Z; R+ W8 I
# v# Y) i7 O6 ]- a+ O( f
对应位写1复位相应外设,写0无作用& N7 G+ ?* X, p  x1 V
: ?$ ]# ?) W5 p- q7 F
20201008101308262.jpg

+ I* R+ d* E& W9 s) p% y9 a2 k' W4 d6 d( \, e) x  L
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
$ N  \. Q" d, B' S" `9 N% U/ n  z, o% I/ C' _' e# V  l: p  G8 Q
对应位写1复位相应外设,写0无作用$ d3 e& V* ~8 K+ i3 a' i* l. y
3 p" F, q( w* U( r3 W; f
20201008101308280.jpg
$ e( x; L4 b# Y4 A

8 }( C! i. g4 i+ k" {  ~+ \) H 6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   " u/ K& A( c9 t& o

3 u: ]9 C+ Y* M' [对应位写1开启相应外设,写0关闭外设: [% F: `0 D/ G* Y, V" Q# a4 y

) \3 A) K+ T; P9 [% M
0 S# R- }' d6 x' q/ l! A3 A/ L5 x$ e
6 Y0 w  w- O8 r
7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
8 L/ v- X- T, t- |* u* S. c$ T
  J% h. f7 {$ M7 o& d2 q对应位写1开启相应外设,写0关闭外设
0 g/ S) H$ B7 ?5 {" N+ O
" |5 V0 U2 s& |
! ], h2 A9 f& q" a* D) Y

( Q7 e3 @% V* h 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)% K0 v( O3 ], n
9 e* T) @, _$ p8 [6 d( j& c# Q. t! F
对应位写1开启相应外设,写0关闭外设
8 K9 L' Z7 E- l  Q
2 o) u  ]/ R; G. D: y

* b  Z9 o" O, ?' F4 k, Z' O) a5 z6 n  Y) q
9、备份域控制寄存器 (RCC_BDCR)
8 B& M. A" A1 j" |7 W- o" B4 U5 h6 i0 e9 X# F) A
20201008101308229.jpg
2 [7 ]0 t! V$ a: m" P

  ]8 h7 L! w+ R' W8 ?1 j第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
+ N6 e+ w. T$ w. ]+ p+ o% `1 r9 {+ r2 P! l% u
第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;: s* }+ d: ^1 A1 H0 O
+ z2 o) h5 V. b
第15位RTCEN:RTC时钟使能:0:关闭,1开启;
) t+ P- J, c( K8 Z( P: Q* P' d9 r; F2 V! ~
10、控制/状态寄存器(RCC_CSR)  y1 q+ g% l1 w5 s4 E+ W

0 }4 h. y  Z8 v
20201008101308238.jpg
5 _2 a  P6 R' b" V$ [
& N! e/ e& y9 ^/ q- \* K% A. M
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
2 O5 G( i. y8 O( A# N% J
7 b2 X0 F- E+ a; `- ~" o; c1 J第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
0 ?5 L' \4 a. x, b. g) o8 t+ Z! J' Q2 q) B
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生
9 C: o* Q4 t8 F* f4 {4 J$ S6 X& S1 v) B& l, h, X/ q
第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生+ j, Y( e- a+ E* _5 w' p; j% Z
' f& O+ l4 r3 @- M* S
) `" h% ^* |3 D5 q, P! I$ y) F2 `
主要相关库函数:; L4 Z% L, W4 n  |

" V: U& `' K+ `: K+ N- c1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;+ V  V( Y/ x2 k  n/ W# z

, X+ R, I3 F5 t3 `4 J2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);/ F9 s; Y, V) g; o) K; [
. V' k% j% c8 a: v( Q" l3 M
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值. v, }9 n; ~. U3 Q
# \' g8 J  k. k
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)7 y, a. ~. x5 M7 U5 D) m& j
5 z% b: [+ s# s8 q' |: h  \
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数5 m# L3 S. p% I( V. s

: T; Q  d/ d+ ^/ f$ w6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
0 ^+ X  J' K# }3 b5 N" F' T6 y* D
7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源4 Q9 J( G  S9 I- f- q1 e. r: s

' K( F2 _% n& }4 p! a- g& Y7 A5 V8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)# f. f& Y  Y3 M! h9 z+ m# ?$ `

' i; \4 m( E* S4 b% M5 r9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)& F& G0 I$ N' e3 V- R
5 W# {5 y& A9 y9 F
10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)2 K6 D6 l3 \& I

4 C* \: ]8 K6 R/ q6 W" j% N9 a11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断( R( o3 a9 c9 U
3 P4 j" R/ A' a/ S
12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
, M9 A% L" T" g3 h8 h& G8 T$ E/ F, W# @/ ?
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
3 i4 h) m/ V+ J0 B; ~. x0 |, H. g1 B! L4 [
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟% j: x6 }' b, b/ P/ i

5 k) |6 ^: ]4 ~1 x/ k) F+ s3 V% y15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟) }+ q* n' f  O8 @  R( t
' F& t# l$ W# Z5 ^
16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟/ a2 B: e; W, G1 `4 u% a& ~0 }

3 G) `5 i* t4 i' L8 a( d# o) Z17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位
9 E4 N6 T5 p6 n9 L  a1 L$ t" w% W- h8 h0 u; [7 u1 G* l5 {) P" K
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位: x9 T3 k: o, |

* [2 }+ e0 C6 \8 [! g  j19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位
  x2 Q6 V( h# E# Q9 @+ `- b1 U4 J5 g
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统# t& z' h% ^( h/ r* H% S( O

2 c% W0 f: V6 j6 F. H21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。4 P1 ^! l8 h! D8 S

! [  D+ Y' U! M+ ^3 |6 y  g22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
/ Z; ]$ V6 @1 p+ u
, E( W5 `6 W  |( k& I//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
3 Q! m6 W! D6 X+ N9 z
1 I4 D8 c9 r9 l//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;
7 U$ K: M0 p# R# d4 V6 u
# g  U$ G$ A7 R* r7 ^3 t//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
( `% v  B# u3 i1 e+ `& ?2 w7 B' x" u6 w) u2 T  P
//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;$ K" }5 c+ ^! o

0 f( _) M) B! j, E//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
) t" W( a0 {$ l& x. I: `' Q0 f
2 a+ H/ D- o2 N//RCC_FLAG_LPWRRST ,低功耗复位
* W) C. e# K8 h6 x# i! p
: U- z3 m$ ?/ e$ K23、void RCC_ClearFlag(void);//清除RCC的复位标志位
* F9 ?% @/ k  j1 Y+ h/ e6 {5 [
/ f$ N7 P1 X3 T, y& F- Z" a. l24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否
3 N" H$ H" e# |$ n1 n& \0 f. q; G9 W1 N/ Q1 L
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断0 C6 b  w* j  i6 p
1 N1 y1 \8 @3 V. C$ {
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断# x! Y8 r* m+ ~$ r
- X+ p5 W7 q7 [0 v+ \7 }* n8 v
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断8 G6 s9 w( d) R5 d! x9 F8 Q
( Z7 X  W, t$ R- T- q5 E, z
25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位
6 P8 z2 U  O" Q) c
7 F# W2 l6 O4 l, _" r0 A* C//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断3 J2 O+ j- N3 W3 R- _

9 l6 P6 L6 F  Q! o9 F% ]) f; x//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
! d* ^9 K+ U) a9 b  W  y! h5 v: V" b# }$ _
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
6 s9 h! x$ `, C0 ^2 ?* L( j( \6 c5 ~9 k

0 Q. ~4 M% A  Q/ Z
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 手机版