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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
  Z) |) I; W+ T9 C# u
. ^# R" n! v& n) m( y0 }一、祭出STM32F1的官方时钟框图
1 p, G' _8 Q7 L6 I: p1 z6 h- y
8 Z0 m# p" |/ F- B8 d
20201008101308453.png
/ z6 O; g* ^- J9 Q0 N
. P9 `7 }: X" @7 X
20201008101308299.jpg
' S4 O) o- K4 l+ Z  |) U
6 b$ l5 s; ^3 a9 i
! E' W% k  m$ F4 l6 e$ ~
二、寄存器说明7 F' j1 Z/ K8 T/ w1 T# S
1 |& |; p1 v' r' X" [6 E# m
1、时钟控制寄存器RCC_CR* ?- \; k3 U5 W, J6 N& O
1 {, ?( m. \/ w" N* ]& D
20201008101308232.jpg
% N& j3 K# d6 n; r/ ~( U0 p/ ?

+ a2 l) r9 r! `2 H! j9 `第0位:HSION(0,关闭;1,开启)
' o7 v5 x  x  U3 R$ T! `1 u, z4 n' z5 \
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)0 }. ~+ C* y) \. m# L
3 V7 R2 {+ X4 [
第16位:HSEON(0,关闭;1,开启)
6 J8 P9 T5 c8 L" b& T/ s' ^; {% B3 j) j9 s, h
第17位:HSERDY(0,HSE未就绪;1,HSE就绪)0 l# l% R3 I$ w/ Q

+ Y+ _: e+ n) y  e4 a# e% K第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
6 {4 B+ I3 N2 |/ |5 x' q. `. y' {8 Y- ~! m' ]' b
第24位:PLLON(0,关闭PLL;1,使能PLL)3 y' J& Z! d% o# S

( X) E( ^5 O0 E; G( C' p第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)/ z/ T1 @& [- I" n* D

! {; K8 e7 R; H* s0 K) Q& j! C2 w: q5 F* f. w8 M  r9 L# Z
2、时钟配置寄存器RCC_CFGR
4 u. C% P7 K) G5 \  a7 C6 }& E' O
4 \  Z7 o* v# p) v9 d5 e
20201008101308204.jpg
8 S5 S/ n8 K) s" h9 p2 o
; O, i: f$ T- E- D+ B: n( L
20201008101307851.jpg
# p  U# F( ?6 Y9 E. n6 A
4 \; F: m& g" v; ]$ i* s+ v

4 n" f* }' P7 Y: f9 E第1:0位SW: 软件设置时钟源
5 a* H- h" h- |# M& F
* M6 m+ u1 V3 I/ u9 Q# R$ L3 S00:HSI为系统时钟   ?& y+ ^% h: X% C  H

" p' c7 w9 [: f' P" x01:HSE为系统时钟" Q  L1 r. B" }

0 N# N% W  \' w! Y: E10:PLL作为系统时钟
& Z; H: m! u6 H
5 g- l: H) {! i! Q6 b11:时钟不可用% f! [  P/ a4 u7 y; Y$ y1 E% |
9 ]! W9 a# K& A# r- l( v7 M/ R
第3:2位SWS:硬件指示时钟源: {' W( b: G- z8 a' V/ w, _

4 S6 \' r: E$ ^00:HSI为系统时钟 # [) {7 Y$ p2 G" O+ {
$ o- g7 P; e) [) P! x& n: `# L
01:HSE为系统时钟/ Q* J3 p) H  F9 z* a( A3 b
- K" A: C8 S, [/ l* }$ ?
10:PLL作为系统时钟
4 |# m" I5 |6 h& i5 |6 g( H4 W7 n4 ~- O* k! w/ K
11:时钟不可用6 Y9 {# ~7 C) T+ T5 g
6 B5 h7 a1 W2 L# a) ^: l
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)4 l/ w$ W+ S9 Y

4 h5 O3 q/ m1 X7 \" ]/ U
20201008101307795.jpg
% M4 d( ^- a% P5 {) X) Q, L

, Y6 Y. i5 t$ c) P* @! V第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
! c5 {# H3 n4 U$ h2 f$ X
2 s8 B8 N7 e7 o' i5 b0 ^1 c- I$ Q
20201008101308154.jpg

9 c  L( G$ W4 V) C6 g3 {7 ?' m
6 Q, f5 G4 y5 \6 ?) _+ i, X. Q第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)% D- `+ }. T5 [6 q
& g9 i' [5 Y. R4 S) ?
20201008101308173.jpg
# _1 _* N7 x; }3 C* A2 R
$ A' E  {3 Q9 G& w4 P
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
( L0 Q) g) g; l- [+ x3 G  v: C5 R4 ^6 d- \9 q
20201008101308153.jpg
* S4 i- D9 _( e
: }8 R) L- R* _4 u; b
        00:APB2的2分频
9 `/ d+ {, I1 w& J* r4 L# o# [
9 I% v% b+ @; S4 R        01:APB2的4分频
# v( ~) _# m) ~8 x/ }$ o7 w6 s- D" }) |! v5 s* q* I$ o/ D
        10:APB2的6分频
& N  |4 V' |" _$ \4 i
1 G: S0 P' s# Q. r( _        11:APB2的8分频& w. _' d( K% u* k# l/ n& a2 Y

1 N# p2 {4 ]/ Y5 k第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
2 P  G' j# V& ]% |2 R- _4 K
' A, c7 V6 {$ K8 r
20201008101308171.jpg

# P4 s3 d9 w1 y1 X# o- @: m# _; E* e# W$ ^: p% }
        0:HSI的2分频作为PLL的输入时钟: _/ H% Y' z0 S( R' P& U
( i2 \! k8 Y. @: y
        1:HSE作为PLL的输入时钟$ }7 ]4 Z& ?: j; O0 e- J

7 ]9 v. T0 J# h第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频; l# x$ i5 [0 \$ }; _* o. X) G

& s, I0 I  Q. S
# w+ Z3 q: W" P9 e# k

5 d- J4 h7 i+ G) l$ t* q        0:HSE不分频
/ g7 h" h0 G/ ?
0 ~* D; ^) n' N, a1 F* i+ t/ @        1:HSE 2分频6 m. \) h9 G' X

* H/ x) e$ K( `0 l; z/ g第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)5 a9 Z8 K' F- m/ k* f! i: S

& L$ D) N; x4 R3 g! B9 @  L" S! B
20201008101307972.jpg

0 `# q7 F$ x" t  R0 _8 T
: Q9 N; c! c6 j        详见参考手册2 y) t" c, F5 ~: p1 R

5 W% h- L3 s# Z  J/ U第22位USBPRE:软件设置USB时钟! y+ ]) k, s$ k! j! m9 z
0 J* _) O: Y/ Q3 G3 c( f5 u2 a
20201008101308155.jpg
8 i! t8 O! y7 \$ y7 W8 ~3 d

3 E; Z! x/ A/ P6 D  G        0:PLL时钟1.5倍分频作为USB时钟/ `' \" W9 h9 f6 R1 d4 f

" ^2 T- N3 H7 Q) s9 w        1:PLL直接作为USB时钟- P3 ]) I! A  B7 t
4 F4 ?# I# {6 `9 I' r/ C: f
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)
) e  O3 _% p# N( P& s$ C2 f* r; C7 y9 q$ r+ C& w

2 i3 q( n9 T0 r/ l8 n! Z/ w. o
( ^( i8 [* |( @7 j        0xx:无输出9 p' ?/ Y  @) {, m" E5 [
# [2 O# R; |4 w
        100:输出系统时钟SYSCLK
6 g+ Q9 Q. t4 F, Y+ Y, h% g/ i! ?/ q) M) R- d5 R4 D8 q! J
        101:HSI输出
- V' G2 J* o8 c. J
4 u  `/ W  h; X8 F6 q3 U        110:HSE输出
8 N) U2 k& |- E: p4 w. @/ p* W% e4 H* ?; N! S/ [! O6 E
        111:PLL的2分频输出  r2 u2 n1 B; F
) e+ j- z* U6 ~4 ^, [" P

0 t- B* b1 A7 _. W" j0 t& s5 q9 i: c7 j
3、时钟中断寄存器RCC_CIR4 w- B; j( m/ f" v. _0 }8 w- z
8 r7 R2 p( \5 }$ j5 S
4、APB2外设复位寄存器(RCC_APB2RSTR)
. K3 U6 A! U1 ~* T$ e( _# ^5 ~
8 z4 d/ A+ S) B对应位写1复位相应外设,写0无作用
8 p0 g, Y. ]' U7 `" S3 [
5 }( L6 D+ q& n/ Y! h8 w5 K0 w9 p
20201008101308262.jpg

, M6 z' {8 D: O* _+ p1 M. _' [  I0 d4 C2 E# Q. B, g
5、APB1 外设复位寄存器 (RCC_APB1RSTR)! {2 D/ V9 o. [, [$ ^2 u/ }

$ T( M* j7 N! A0 F* q( ?对应位写1复位相应外设,写0无作用  P' _" n5 E; x+ Z9 o. ~, m2 n

; @6 Z$ ?4 ~8 o! W6 }# N
20201008101308280.jpg

% r' _8 p3 R( w+ n7 l, S3 M# p/ j
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   
1 u$ k1 ~3 Z5 C! m  E! t; v9 i& s; u5 }' f. e: y: t
对应位写1开启相应外设,写0关闭外设
) q) q, J9 _% R- U- G. ]
2 J7 L" d% g  c: c$ ]

( F! T2 [& I: R( `2 [
5 G8 I7 @+ t# j+ ^; Q8 k7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
4 |8 C2 J9 t3 @, {: U6 u; ?
! S9 T/ J5 }' x# I0 h, u对应位写1开启相应外设,写0关闭外设3 r7 |$ X- g+ z- s
1 o& W' J. G6 [. m) l; f

8 L8 ]$ a9 G- ^) t% U
4 w3 `  V) H6 L3 @' X2 C9 ` 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)0 @' [! a  K& |' _0 z5 H
5 a# L; n2 Y4 e/ U
对应位写1开启相应外设,写0关闭外设. J1 v: j9 E* Q- v+ v! L1 O
; n, d9 u: n" u' O6 \4 X

) }, O* g& `  J4 e( ~
) B% p5 u! n+ ?# L; _" x 9、备份域控制寄存器 (RCC_BDCR)
" _7 z# E8 h6 H' ]  x9 ^, _8 |/ s5 F6 D5 ?+ ^2 ^  E
20201008101308229.jpg
( U  \1 T1 F; _8 S

0 F0 m4 @4 D9 o第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;- [! B3 c9 _; K' ~& A9 a/ |* U

4 @. ?% Q" |: b2 j6 E第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;
. x' W5 F, N4 a8 d0 ?# L2 \2 s. f
0 z0 k. ]; ^- D" Y% V第15位RTCEN:RTC时钟使能:0:关闭,1开启;+ H; {9 k/ G- c& I! P  K
7 i9 {6 W" \! h* m$ S4 }
10、控制/状态寄存器(RCC_CSR)
6 }/ ^' ~$ @  @( o
  Q/ |7 S/ D. Y8 X9 p8 Z% q
20201008101308238.jpg
  y1 Z( P. V1 ]- ^2 n) ]( e
' e! ^! a1 V; x+ u
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
. N% y9 s( h* b& U0 x3 S( x' s4 O; i1 y3 C! `( e
第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
( O; }0 P7 y% q% C( U* E
4 i& m- x, a8 h* n# [- B第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生* S; [. ~+ q# M

( N- I5 d  A3 a. q第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生/ R- Q) C' d5 @

% L- q# h2 m8 c& E9 _, a& B& j8 i( I( x3 v) e
主要相关库函数:
; ~9 W7 C/ B0 D" `2 a; A0 H4 J; i2 @% ~( a2 b: {0 k  P
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
  l$ `5 A5 r. t0 F5 W) E$ t9 G
% Z! F6 O5 S5 d- P2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);% h. h4 a& N% ~1 O1 A( o
$ T9 |' s; u: H; \2 I5 u- X. ?
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值
) ^( e" H5 T0 ?+ f- F* l2 \; ^; U# k, Q$ X& L$ r/ c) U1 ]
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI). d0 p* i/ A- }/ I7 D; s, r

% F5 o1 {9 _+ u! I- W7 H4 o, I1 R5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
/ v' J; l8 {$ u' N8 h9 F  m, z( F. |3 n; v: I
6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
1 M$ X* X6 p, q6 I% p, S
$ T" x! g7 C( q# w. D7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源* E) m2 I1 @) m# V! b: C
. P) z# I8 l7 J) {, h5 P
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)$ d$ G' o* [, l" D2 L7 d2 Z% f8 O
& I4 C# F: ^" v* E/ ~
9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
: [9 J! h  q* Q! `. r8 u7 b, w+ {% f5 i0 S6 _7 `: Y6 C
10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)+ W' J& |: F$ V9 A: H9 k- N
9 q/ W9 I( M; }9 p# s, ~" k( k
11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断
9 w: k& b+ d' _, a" [& ^, ^3 ~3 U0 P. X3 }
12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
# u% I3 [( p6 Y* J& b/ g8 Q7 S; p7 T8 s- I9 h7 u
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
# H. @; W/ Q# R' n
2 n: O. \9 t5 d& `4 \: W) x14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟$ N" B5 w+ M8 j2 L; j) X5 I

: z, c/ J% Q8 I5 R$ x! A. F15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟
4 }" q! {, D3 U0 V  T7 b" H4 ?6 W% p. {
16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
% \  h0 Z# C, y+ t
2 J3 _3 H, M) V1 W# U, J( ^) l17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位
4 [! }+ [- U1 m/ c* i3 R1 L& _( Y: A1 z: ]" p  d: y) F
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位0 y0 E; e3 n8 \

9 K8 i3 T$ t4 \, O7 U19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位7 m1 a2 T# v- L" F) p* R

5 h8 S- E' K/ a+ H% ?( H, T20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统# o- a8 A+ d8 c- j! z& D

& ^  V3 ^) y2 l0 Y! f8 B21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
" c7 T& u5 }1 O5 M7 t& _$ T* U
22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位
) t# Y; Y* M+ l4 |7 U% f
$ W. b9 J$ [3 Q; K; |//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
: w4 o! H" {" b$ t3 b& R2 E0 I4 O7 j% R" |+ Q( R! j1 O; @8 X
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;. r6 U( U  j! ^' [

4 P& p/ ?! y! W5 }* J/ Q, m, t//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
5 Q$ q; S6 j# x" w+ Z7 u0 I2 D8 ]4 A+ \* v* n, f8 m+ r2 K
//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;
# T4 {. ^# j- D: |  E  e7 Z! O- B7 D, I5 @) k; F
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
$ Y4 @1 y$ ]! Z$ N. T$ P* B" a: P& F5 K. r2 W7 R4 M
//RCC_FLAG_LPWRRST ,低功耗复位
9 h* M2 u  B  r& D9 V; J
2 q5 R" r. X# S! A23、void RCC_ClearFlag(void);//清除RCC的复位标志位' g8 U& ]  K: c; ]
6 O6 s" r6 o  H
24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否/ D. F$ S# d/ A6 c4 `' _& M
) P$ C' [, C4 ]( ?3 _
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
8 E5 |1 E7 F) r6 d- L
  @* [* k9 @7 m% a( b$ r. h% c//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
% a5 y' S# ]4 D3 _: H, [
7 Z0 E4 ]. u# X  \$ o+ U2 @7 g//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
8 n1 ^! ~# G- `
8 W. F; K, p9 U! F& Z2 @1 I25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位1 _4 F% ^7 L- o' ^/ x4 p1 T+ X

& f# a, \8 l5 K% z//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
' n# \5 z+ ~0 \( B' Y: a2 ^9 }: W* r- w$ `$ Y
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断5 E- D% `+ y, r

1 b9 V& \" t2 C$ G//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断1 a4 k9 z/ {0 b2 x; A
4 \) K2 Y, L# B' w9 V* _

* ]) D* ?$ F' P" m# }2 P' `
20201008101308453.png
20201008101308258.jpg
20201008101308274.jpg
收藏 评论0 发布时间:2021-11-27 10:06

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版