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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统( m$ Q% t( k: }; r3 M% W5 J( D
4 O6 M& u& X( [; T/ {8 Y  ?
一、祭出STM32F1的官方时钟框图
* S% f( D! ?6 I5 x' q& A1 W9 d* u
8 ?. f, O" M2 V) u5 {
20201008101308453.png
* E& C9 k2 s9 n- Z; v. T

! P6 J' i$ N* E# M: N. y
20201008101308299.jpg
1 l* D- d' U+ A5 k6 k) m& Z

$ j! h  y, D+ y2 [9 @$ E! K1 S
2 s1 `  Q6 ^0 D1 m2 M二、寄存器说明
" m) f0 r0 G' O! w! i  j, N* `0 S# y9 B* Y: K: c1 I# |" U( i
1、时钟控制寄存器RCC_CR
3 @  q* W$ p& Q' N  \' H! g6 L
9 a+ ?  d0 ~! r5 [
20201008101308232.jpg

5 }! c/ c$ n/ ~" n1 I) [. j
0 c+ T8 {8 N/ H* m8 o第0位:HSION(0,关闭;1,开启)! g! I6 w/ E6 C9 U/ l; T
$ O9 ^) w: M: q8 s  C" P: o
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)
7 Y. N! ~& t0 h8 M2 m) @, x" y
2 Z0 M9 S/ }# n' H第16位:HSEON(0,关闭;1,开启)
7 c9 f* ^8 y, ?! b0 f* O3 y2 c  Z' z2 k! F
第17位:HSERDY(0,HSE未就绪;1,HSE就绪)! Q- C6 f1 k# ?2 @6 w

7 o# s5 }( R' K' P- ~# P9 D第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
; @9 ?6 U! _, E7 D- ]5 x3 J
! v7 M* z( P, W% I6 {$ N$ ~第24位:PLLON(0,关闭PLL;1,使能PLL)# ]" K: r4 N9 U: x
0 X2 v6 D$ z1 f7 C/ T9 G
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
9 v: D/ c9 A- j7 v" i( _$ N3 }0 P
1 [/ R, t: Z0 y1 I, W& |7 q
2、时钟配置寄存器RCC_CFGR% u( R" R  u2 h/ {' W

' Z$ G  S0 A1 a: K' L  M7 {
20201008101308204.jpg
: H4 m. q& {1 K7 e5 j
5 O% y* H2 d3 L& s
20201008101307851.jpg
2 u6 {' Z% C  }* S1 s

4 A9 J  x* N3 l2 y. ^% w  g
- b* |& l* B, |7 q8 h2 Y第1:0位SW: 软件设置时钟源
- D7 I+ M( m& C. `' T8 N) W
. k0 p0 k( M( s( B00:HSI为系统时钟 - @1 c6 |! f) x) ?" K/ m( y2 u' k1 E
6 J6 n8 l6 ?- G- x; a
01:HSE为系统时钟8 p4 r! V8 T2 Y$ ?( l* \1 R
6 v2 v2 Y/ x2 B
10:PLL作为系统时钟: u* D+ Z' g3 C' _

9 D; E0 t/ I7 i! S11:时钟不可用: g9 R& ~! b4 J6 F. o
- k6 p) }: z- u
第3:2位SWS:硬件指示时钟源
% R( x& j; m$ s4 Y9 q: V
0 P$ Z& b3 ?) h% w00:HSI为系统时钟 8 I( x9 _) A9 z! j; s

5 ]/ K$ t* h) @5 N7 P01:HSE为系统时钟: m: l' A4 y. C6 f: G

. w& G+ q4 f% m+ d$ D' q! u10:PLL作为系统时钟
0 O0 l; E! p0 F$ f9 D- j0 z- @
. x0 D$ s& f4 J7 X11:时钟不可用1 o1 [+ z' }+ r: X! A3 |' m
2 u6 Y" |& ~- E& a4 L+ X' U
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)" M- }$ F& ]6 }# d- q% i, e

8 ^1 F( }4 D& [/ [
20201008101307795.jpg
) r( I( T- F; z  V4 K: ~8 K0 j

2 j" j8 X$ _6 j8 ?4 C9 }$ I" |  L第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)) B, E. b0 I5 u+ M9 T1 L" w

" Z7 f2 ^+ d2 E9 C* A& V: u6 a
20201008101308154.jpg

" `, L% p; T# C3 j3 |! }5 q  N4 M1 g) n' o& C$ F- y
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)8 M" w) \% o( n1 m, ^( X2 n

: e/ ^1 Y# U% h  E+ X6 [
20201008101308173.jpg
; p5 M) F) \. t, b6 G- z* _/ q6 n
: Z$ A1 N: V0 F
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)8 D' J0 _( V  `' e

# o; U; o" G/ g- R3 ?
20201008101308153.jpg

" i  h2 V2 @3 M1 [' v6 e$ H! d! U4 p) k9 v
        00:APB2的2分频* F: ~* `4 q; v) X5 U; T

  @5 [" v5 [' F' A+ ~3 ^        01:APB2的4分频
* b' P: d5 _+ r/ c" m2 J, r( o/ ^* M* x# `+ J
        10:APB2的6分频  _0 y# D. a1 R6 e+ s
( X7 d- z2 j$ x% `
        11:APB2的8分频$ d, |* w0 p/ ~9 T# |3 D1 P
0 q$ O; D% U* u  c
第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
6 k. d( w" z, A' {9 i/ u
* U* [, ]4 e3 E$ v  X
20201008101308171.jpg
1 Z- o$ {( m9 w# P6 t

( C% z, e: V: Z4 f        0:HSI的2分频作为PLL的输入时钟
' N+ b. r/ ~/ \4 ^. I, _2 r
+ _5 N5 `& S9 G5 }        1:HSE作为PLL的输入时钟( ^  L) e3 L+ ?2 r
, N$ R" ~3 M# R: Z. K" d
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
2 U1 R) ?! W+ h* H. v% p9 I5 u$ a# ?3 ?" `5 h: \7 P' Q8 j

9 y& Q; I/ l) Z" Q- i" F; O1 ^8 [: q- |
        0:HSE不分频
( g( J9 h& Y0 c
9 r8 a/ W* W; s  l' h7 ?        1:HSE 2分频9 F/ b! Z- h& A

/ I: E  Q0 x+ J$ V第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)
* X  Y% w6 R" K. _8 K% A8 o9 c$ r* V
20201008101307972.jpg
7 C, w  x6 p- L7 a! g

6 G6 v, O. \2 _" V        详见参考手册
  ^5 F' T. B2 e7 p9 r1 `
0 G. ~# I! h" `6 g第22位USBPRE:软件设置USB时钟* Q. L) a0 W9 M
8 i* n' ^9 j# w( E. x
20201008101308155.jpg
0 {" P( ^. W4 i: d5 L( o
: R6 D/ _& V" ?, Q
        0:PLL时钟1.5倍分频作为USB时钟
2 c7 T; }  M4 r  z9 Z$ F# O0 o* @/ ]4 b" i
        1:PLL直接作为USB时钟1 p0 U% s2 X3 T2 j( Z
9 |1 O" r5 K/ Q6 N3 ^$ O4 X3 C& d
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)1 Y) V& v2 l5 c# J# N
5 ^$ T8 ~9 P7 t, @8 Y9 |
0 w$ S5 n+ b. D# g: q

; k3 o) J0 _2 n+ r. m        0xx:无输出- X9 c% I, n" C$ j# o* b, C
% D  w1 _: B& q, ~3 H" ]1 `
        100:输出系统时钟SYSCLK
/ T6 w2 {) }$ c6 S% I
5 O% d+ Q  y- \/ ^        101:HSI输出$ Z9 b  ?9 [* W6 P1 l
3 o. t8 E- g1 Y; }/ {) B0 B; _0 }
        110:HSE输出5 O. G- N) n4 [7 R" i2 x

  H7 v. B* _  J7 i6 J        111:PLL的2分频输出2 j8 e; k' f, H

/ S# u0 o6 Q) T7 F) C& n$ I( k2 v4 F" r+ F

& p5 Q8 K$ }- u- `+ N3、时钟中断寄存器RCC_CIR. i2 `( h" R0 i9 n0 p0 B* U4 o) o
: I; ~6 [* ^5 F2 h
4、APB2外设复位寄存器(RCC_APB2RSTR)
6 c8 V' D3 W* c8 p
, K' C/ ~* d8 e4 n对应位写1复位相应外设,写0无作用
" D6 K+ O3 d- W) R" h
4 o6 g9 o, b& f+ F" x
20201008101308262.jpg

9 o( `. _+ `& z: C% a3 c# L  K& n  B* ~* D
5、APB1 外设复位寄存器 (RCC_APB1RSTR)8 ~) T7 G' V0 j! s
, U5 H# E) G) X( D7 x5 y
对应位写1复位相应外设,写0无作用
  d9 Z# u5 a' b$ g# E6 ~' Z4 w% p6 y% W4 |2 h4 E5 I8 f! v
20201008101308280.jpg

4 d( b6 i  g; p
* n+ Z  Q- G# P7 k0 h 6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   
2 T5 @' d% M7 _, d
" ?3 k$ Y1 v% L1 ^4 v8 f* N对应位写1开启相应外设,写0关闭外设
2 R+ t! F- ?3 b, ?  ]' K4 `
8 T' D- }) j. O: J9 ?9 t  L5 l- i8 T
* m3 T6 g1 A3 S% ]: V
3 ^) ^# {7 R$ P! e. y$ y+ F2 |
7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)+ V4 L  A% _+ [8 x
# K! V. f% J+ k5 V! k2 \8 |
对应位写1开启相应外设,写0关闭外设
. c/ z: x! V, g5 j& ~9 D; T+ }: u+ |3 c. K
3 d* D% _+ d1 j: P: p4 M
& H0 ?& k) o7 }8 v5 o
8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)# W0 L  j* N' h
- }. d9 v9 C# c1 ]
对应位写1开启相应外设,写0关闭外设: H6 P& z/ ]4 a$ F, x

3 x7 S5 ]) P+ l% j8 g, k

# B8 D0 f- |( z  L, @, ~1 V# y4 X7 _) V3 k3 z
9、备份域控制寄存器 (RCC_BDCR)
3 `" u) ~. ~  h+ E/ {% V1 b& r. |0 b- ?1 m0 o
20201008101308229.jpg
- F. r. Q# h6 P' y
/ I3 }2 s; M2 n
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;) @" g6 P2 `. @: X0 ?6 W' ?$ j

6 H' I  }1 O0 a; S. d第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;% B9 H) b8 u0 J- [/ |/ v) |

8 u" s- B( E$ o: J' y& u4 }" A: D第15位RTCEN:RTC时钟使能:0:关闭,1开启;
! A6 T% I) v) {( p6 ?
* E) x* u' @4 D  @10、控制/状态寄存器(RCC_CSR). B4 M5 m" r  z4 {& t

7 Z. H* {1 v* E/ |
20201008101308238.jpg
  n; M/ p1 R1 ^) W
. _( I( }; F1 \( r6 A
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪) h3 J9 `4 _  z) p* ~: b3 d

: Z5 o* {" v2 e' Q% x! H1 p第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
7 P- P, S7 T& j2 N" d# W% _4 l6 h8 p4 o* _$ }9 d7 b
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生/ N1 x9 p1 q, N6 a6 {4 ]" F

7 p# G, I/ z9 y. @6 B第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
6 i4 f$ m. S! _4 A# g% e+ @! y5 `* E1 e

4 m# p6 ?7 k; j1 `4 T5 |主要相关库函数:! t* k( B2 e+ [
5 L% N* I! b1 P' H$ F% F+ v7 [) Z
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;, b, |  }# v& @6 P

" c. R) h7 I/ h: J2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);
( n6 [* O% V5 A; S. P
. O) c. X/ S* i5 }3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值
) F* ~5 R7 @3 _% T  t, T+ ]* Y4 O/ f+ w; g* }" j  m: q
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)
9 a, l0 i' \  h( h5 ?* H5 f( j: W1 h
+ V. q* s! c& K' [, l. j2 D- _6 A5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
+ i# R: g( _6 R6 B
$ M2 d  e9 a3 i  K3 R( m- E, i6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
; u( L1 u' [& [4 z; O" E! D3 M" [% e* G9 ?$ n
7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源9 M" ~3 T5 x% v/ h7 |! P

7 M+ V8 y4 v) W& k- O/ x8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)6 u: l- E1 i0 W. N; R0 P& B  ]; S

  l5 E9 X& ^* N. N" {; ?" w* T* H3 L9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
; |# d# F: q" t! x0 L
* d( P0 D) g. z& R9 _( ^7 \" f  j10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)
* @, ]+ ]7 t1 X2 c  |+ c. F' |! @
% x6 [% [8 a6 f$ G11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断
% y( p+ l6 _  i4 h% N+ S! ?7 }! ?! D4 k- {: j+ F
12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)5 y% m2 R/ Z  p; x
, k; w8 b  y  w6 x1 I$ ]
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
; `. f8 V7 `5 {1 ?  r$ E- m  k
) Q- b+ d0 U: _14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟
" b# W3 i4 @- u9 D+ w5 m5 ?8 e1 V: t4 O+ _# E- Z
15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟; ~$ T/ N/ |# y3 p

  l# k$ A% A% x  D/ r, F16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
4 E# K' R! F& P, `: |, w8 k. q" r# v# _, D6 M  b7 b& ]
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位
4 B: h3 h& h) `& N" m  [6 x
- c# Z  u5 F) j, J9 D18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位
5 N" G9 Q4 l  r1 F' I1 J4 e0 j) c) p
$ L7 x" _$ X# D4 x$ K5 ?19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位! L' C) g6 m( f- c4 ~
* i0 {  d& D. D* U- v
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统
0 E5 W* M2 Z. n( N- M9 M  Z( y; d0 y/ r: D1 m$ a/ \
21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
# w& f8 n% M7 _0 O1 ?8 F! ]
" M, J' s/ @! a+ ^; v9 T" s9 L22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位1 E  |- A* M9 m9 v. ^$ k+ I  ~0 e

8 `* _& f. m- k" p9 s2 N//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
+ n4 B  R& k; P0 S/ l, F7 e: p3 Y$ Y$ A2 W* `' L4 C
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;
% p% A% h; N" l9 y) U" [/ @9 B9 A
, Y4 @  {5 f% g0 F; I7 W% v7 T5 w/ w//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;7 P% Y4 I7 W$ m3 o, R0 M1 K' K
, ]3 L0 L+ k! c
//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;
, F' i2 z! N* o/ ^9 J9 I/ y$ k, }% e8 [7 B' b: p
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
5 y; Q. [9 }/ U" w
# f0 T- i# i! |/ _% I$ }$ @8 Y; _* h//RCC_FLAG_LPWRRST ,低功耗复位" c. ^8 [$ W; q+ ^9 j' }/ _

) S1 `4 x) `" u0 c6 x" x23、void RCC_ClearFlag(void);//清除RCC的复位标志位
9 p; r- X! S; o& g' a: {; h5 G6 m* T" O8 O5 l. D
24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否
, @2 b3 [/ X# d& I
6 \0 l; C, e4 D5 N" ?7 `9 z# {- R//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
% Q7 K6 U4 g* @' ^
: O' d& M  r  h5 J1 [$ c/ s0 i% c0 y, F//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断8 Q2 D8 `, d6 S: R$ i
* Y6 Y+ E- ?. X3 V
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断+ p- X7 A- {6 z$ [  ]

/ {! m0 I0 l9 V- z5 Z5 p5 i25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位
8 a6 I: O6 j$ A6 O
! F4 T2 s* Q5 E& q: X//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断( y  b0 S; J6 n
& z7 a# m% a0 h
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
- {; x) o$ k$ u% H  V! I6 _5 s/ }' R) L8 N
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
4 k$ Q" S3 h5 s1 j& O: w$ }
) }4 {& j3 i6 Y4 [) m( d+ }5 ^! z  ^3 a# q- T
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 手机版