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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统* J" M  g6 i( \3 @5 y0 `8 S6 h7 {7 w

$ ~, p4 g+ O$ ~8 s" u0 j" z一、祭出STM32F1的官方时钟框图; ]7 M* P, x/ t1 M0 t2 H( E' j
$ N5 {( a' W( b6 a! s4 j
20201008101308453.png
4 w; u0 m' O( }* p; o- C# h

$ [1 A6 R* Y) Q; `5 E$ m- f
20201008101308299.jpg
0 Z( B. [* [7 {" b7 a" V6 J# A

1 D  u" {* `6 R) \6 V& \  z# q& f! G! y. t* k
二、寄存器说明
$ X6 Z0 T  B! ?, Z6 s* z; j" D/ S0 W9 m
- H6 y4 x# n- q' G# ~1、时钟控制寄存器RCC_CR
  |; V2 X* C& d( V% y  H: H
$ C: z' h( n) C$ x
20201008101308232.jpg

- j  J; K" q8 I9 q. b  M. p0 r2 ]- [% y- {9 b/ L% H
第0位:HSION(0,关闭;1,开启)5 U$ k; M: [% U( ]8 F8 ~2 u+ s
8 y& \$ w( ]& e- [$ a" ?
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)7 {0 Z( A' U9 Y& e) ]1 k6 P  M
& w, w. J! ?2 |  K5 H0 B$ R: q
第16位:HSEON(0,关闭;1,开启)1 c" o% X! w( N# W8 V0 c/ w
+ X; m3 m( [6 a/ Q3 p. P
第17位:HSERDY(0,HSE未就绪;1,HSE就绪). E9 P( v6 ]0 y1 |, L
0 ^! Z- R4 x2 V- j1 `4 b; C
第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)0 J. y) V! ]# g0 A# E/ \
; ]/ `2 \& Z9 Z' B4 O, A3 W2 Q1 |( z4 G
第24位:PLLON(0,关闭PLL;1,使能PLL)( W% k9 ?( }0 ~4 [4 t% E9 W
0 T' {" h. M  x* B
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
- B1 P0 h* t/ c" M8 I, ~8 {) @
6 J1 [! i; X  o0 q/ p) ~
: q7 B0 b" k/ t  L& N0 i) y2 Z2、时钟配置寄存器RCC_CFGR
+ q4 U/ \+ ^4 P; W: a" R3 U. k2 W2 i1 H, \! k
20201008101308204.jpg
$ A9 B% n" S/ ?2 m, ]

) s3 ?7 Q6 i5 B* h9 x# e
20201008101307851.jpg
& t: w4 Y, p- ~7 u/ ~

9 M6 t. m# i! q. F5 Z. A4 C) {* l5 s0 y- f/ T  y1 D+ Y
第1:0位SW: 软件设置时钟源
* p+ |: H/ C+ u: h# ]9 U  H, f4 `  O8 t2 f9 x' G7 w) K" `
00:HSI为系统时钟 / B1 h2 D/ a- |: d; B! R; a
7 u' X  E9 f1 y. F0 s! d/ v+ K
01:HSE为系统时钟
" ~" m4 I* e5 b+ u4 F  ]* {: k
; Y& t$ d2 [" C. D" \& X% o10:PLL作为系统时钟7 h" m2 M9 _  O, ~) S. H% j
5 O  s1 q" g5 e* @6 S+ A  I, w0 j, n
11:时钟不可用1 t# B- O& k( @& Z& b

: ^( K# F$ ^: h  Z, j第3:2位SWS:硬件指示时钟源( |9 a! ?) F3 z7 n: v. ?

. k, H, f* L2 I9 ~00:HSI为系统时钟 7 w8 G# `7 O/ s3 [3 B
" a0 p# i/ O# o1 |8 w6 H, I* l
01:HSE为系统时钟' m4 P( P3 T/ @/ _+ m. d: c  J

7 z6 G# |" C: C1 g+ V+ I5 H' _10:PLL作为系统时钟
7 L" {5 P+ K0 [- x0 [2 L
$ v/ Z8 @0 ~9 S- j11:时钟不可用. b1 O9 h& v% i' f& t( q; ~- `% v5 O
1 C5 y3 r* N  X' p& J
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)' Z/ l7 e* G/ o- @' t9 L2 _! Z

9 C0 E" r, d* H6 z0 D. o% R0 y
20201008101307795.jpg

+ p2 B$ e4 n- I1 @' r  ^
0 Y- w7 [& L' U+ K5 K" B第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
3 A1 l; f6 g- [2 V7 n9 `
% i# n; t; c1 e3 B+ t3 @% t
20201008101308154.jpg
  y( Y, `5 T; E4 O- ~* s5 E
( |* m1 H2 `; E) U/ s" c( ~
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)
/ `( S3 c7 b% B4 u3 a3 o  ]' q+ b0 U) |
20201008101308173.jpg

, ~' x. ^  c8 y2 m2 i6 D3 `1 n) P- a0 _& h1 C3 }9 c& I& W
第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)3 ~( h6 v. s5 @3 L0 @
# g8 t3 F( R2 J0 W1 T5 @3 v
20201008101308153.jpg
) ~8 P6 U" l, g
% q3 H. z: N0 v  ^. P% N
        00:APB2的2分频
. S' H! }5 W6 n4 j
8 i+ V( T  d( ?        01:APB2的4分频
! V0 I; B2 b* g2 p: Z8 Y; H2 R) _" _& @8 \. R0 |- B
        10:APB2的6分频/ m, \+ ?$ g0 B$ u
% T8 Y4 d: C2 E+ Q: n# i
        11:APB2的8分频, j4 t3 d) z' P+ [

( Z$ ?( H& L+ M  e第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
2 [. n/ N& j, c) i0 n" j  ?4 t( z! E6 X+ [3 N- r
20201008101308171.jpg
; H  t7 T, U! i% X6 f

, o3 C4 H# @" a5 h5 C3 x2 K* r        0:HSI的2分频作为PLL的输入时钟
( N: m8 v7 N9 R% D; B9 X. e( l+ Q/ m3 @8 s* B( ~1 M
        1:HSE作为PLL的输入时钟$ d5 U; c/ ]0 T
# h1 h0 p! Q4 e+ c& J% P# d5 c
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
, G  X# A1 a# D, p; _
3 e) e( ~9 D- q9 r2 W4 o5 a. Z
6 d2 b% }6 F) @6 H+ L: m% g

- C9 S; b+ J, r! H! k0 W2 N& b        0:HSE不分频+ x9 H9 V: s" o: s) W
4 l5 e4 e- l- _3 [$ [  @
        1:HSE 2分频& M0 ~# F' f2 J$ z
% d0 ]8 Y2 S& i* k; g/ p. V
第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)2 R2 D: \' d4 i% T1 }) @% [
* v4 v1 o, M8 c$ _" s1 x$ Q" i
20201008101307972.jpg
* ?/ A" [' n6 ^

3 p+ S' V0 q# ?8 a        详见参考手册
" T% p% ~  \& h6 Y$ B, L5 l4 f; p( s0 S4 p1 i1 ]# P
第22位USBPRE:软件设置USB时钟, D9 S0 p& R! Q

# u; g' F+ t& w
20201008101308155.jpg

" G( z' ]' B+ r) [
8 P! c3 j7 w; r+ Q2 v4 X% Q6 y! X        0:PLL时钟1.5倍分频作为USB时钟
, e$ z) \) d5 T, d' w7 A% V6 [
! S0 }' F7 g: U        1:PLL直接作为USB时钟
; ~' S- ^( }2 O  M$ ~# n  t, U+ ^" u  v0 T4 C
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)
* W+ Z: h! n; p
% K( C" @+ y: J' t* r

! |! ^# a9 ~8 m& ~1 i0 q" ~4 ^! ^
5 \: |3 w2 [! w        0xx:无输出
2 i6 M$ r" `$ G: l4 H' D& _$ g9 {/ C/ Y# h
        100:输出系统时钟SYSCLK# Y/ t4 m1 V# R) z( ^$ Z

5 I1 {. f+ W* f2 B, W! s+ b        101:HSI输出& v5 ^8 d1 X) K

# G; l, }" E- T$ A4 p, B) z        110:HSE输出
, e5 W, X! t3 U! y% v1 {% G4 O5 E& M2 N+ ~$ x3 K, [
        111:PLL的2分频输出
1 W0 c: S4 Q' T5 r1 E" C* j% y+ i1 _2 R) _+ A% ]$ ]$ S
& o, R& a) N6 O" Q
% l7 j; y$ V# ~6 |/ Z, r
3、时钟中断寄存器RCC_CIR
& w2 H' F/ r) r. R/ a$ B: l, o( U0 `$ D! t9 y- w$ n
4、APB2外设复位寄存器(RCC_APB2RSTR)+ @, m3 U) }2 p7 ]) ~

: F9 f7 w) d- c5 ]' N对应位写1复位相应外设,写0无作用
* B1 h  O" |9 `/ k1 Y
/ L* M8 ]3 D: P5 u9 T# L0 s6 Q
20201008101308262.jpg
9 j1 W; M+ F( v7 L7 R0 H

) `7 Y& E1 m$ D6 Z8 {2 Z6 X7 g( s5、APB1 外设复位寄存器 (RCC_APB1RSTR)! z/ s, u: c$ ~: Z: t
2 d/ m( A6 ^2 C' u$ K  R9 ~
对应位写1复位相应外设,写0无作用
3 t( ~4 {6 a' t4 U4 Q, @+ Z" v. D* e/ y& p  S2 N0 i
20201008101308280.jpg

- D, U1 @2 E; Y$ B5 N! r$ `4 O/ {3 r7 O  D2 `* M0 u
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   8 Y& Z' K  H5 F' J% _
" `% K( \% G+ U7 N. O
对应位写1开启相应外设,写0关闭外设: V  R" u. B- y- ^/ m

' o( Y9 D! l, n. l" e
+ A) f! N) g1 N4 f1 ~0 {
5 B) N2 z0 N. i/ E( I+ M
7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
; I6 v; V7 f, B2 {
+ s4 ~, P) t2 H, p( a对应位写1开启相应外设,写0关闭外设
. |$ j, _; K$ K/ J9 ?+ O5 n* y& L" t+ \# U
) @$ _* L7 p, x3 R; F& M5 ]

% L6 @% c1 {# U5 F( Y* p( \) h 8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)
+ Z8 i! ~: p. x4 f" l6 J4 |+ F& O9 X" i/ e
对应位写1开启相应外设,写0关闭外设! |) V3 P* @/ J; D7 ^. o5 j
) C+ w4 W( a7 z7 m( f

+ O( d6 [6 J/ t, [% H
7 ?, l& Z- O  w# j 9、备份域控制寄存器 (RCC_BDCR)
& k% m, Z* G: h# V0 G
, p. ^& V+ h: T+ d) k
20201008101308229.jpg
7 L& A$ N( G' I- ~8 N
: P  b5 R2 ^& g9 B# d+ F/ K) s( B" t
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
. A$ e* P. N8 G0 Y
; T: @4 F; @* ?  s6 |. Q  U6 t第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;
. ~. c* M, @9 N$ r
" }* i7 `8 Y- x( i" t8 g% y第15位RTCEN:RTC时钟使能:0:关闭,1开启;  b% q' P) K) \- {  a
8 t8 M2 I# _; V$ ]) W0 a! ?
10、控制/状态寄存器(RCC_CSR)+ O" u6 I1 I. p  S; H! R+ D+ Z" L

2 m, Y* ]. L) N! {
20201008101308238.jpg

) h( R- g/ R" {
5 U. G/ [! e) a( k  G3 a0 b第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪; M  v- {9 L7 t! e7 W

" R- N4 r7 w" g2 c  U第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
7 d: _. V" e# ]# }: k; Y, F/ q/ I2 R2 l3 w, v5 L8 e0 m- q; q
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生( `3 L" p  }$ @1 f* s5 B3 ?
4 _) u3 e# M3 t  Q9 X
第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
- f2 o* E/ _  c8 C# g' h9 z: J& X6 d. k6 \/ @# f  Z
! i1 Z1 l# ^; m  v/ I3 |9 [) e
主要相关库函数:
9 ]) n* X: q0 V. o+ p0 G" A7 j$ ]- L" W7 n6 l3 A
1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
2 G$ L4 M2 y7 ~, f) U* W2 t+ k* G/ C+ J# ]  \7 z: X
2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);
  U. P( u3 ^( A7 Y. c) j0 a3 r# C8 N" @, H* W: R
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值- W) L% M3 a4 z* Z1 U- B
5 Z6 i) t0 B2 x* ]' T7 i
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)
7 G, H' c$ }4 l8 w
- b4 |4 C4 B! o; V5 o5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数0 G) x1 w9 F1 U% H
  l: c7 x  S; i9 P
6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
! L, m( k0 q6 Y* ]( k* ]) m" ?5 L$ n$ t
7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源
$ o* \7 G5 T: W1 k- a
+ d2 O  F7 T* a, [" B* E, N8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)
+ I: Q+ g' T# ^2 Z( G
1 [8 y( V4 A% z# L9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
. z5 K: \4 k! O9 s. m
' M* Y8 R: D) B: N1 H, b. e10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)+ M* ~6 H# M7 k. H7 @7 x/ E6 I
1 _$ ?& l" l3 I, D
11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断2 w) P3 Y% z0 ]: P, w

; \2 a" c6 V( |/ Q  r/ R12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
. t0 M, U& J8 r# f/ I8 \& T) r+ B" P8 v8 L. ^7 w
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
" V) P1 ?& U9 S0 }; B3 O4 [  e3 o1 e# e& z2 y
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟1 m/ d+ o1 }+ F  u
& f  q* ]6 `0 s0 t" \  z6 _7 y
15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟
! @# G; q5 I: x* Q* p: p
0 p6 _! U: `( y" X' ~  P( L; A16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
: f3 r4 J9 o2 y) L$ y) J' b% V$ U1 E, d6 ]- }4 D) U: ]
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位  z6 `4 ^6 E7 z+ o: u' b
6 c0 v, Q/ q! B& z
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位
% Q) j# @9 X/ R) Q. r6 Z, Q8 N5 t/ b; _. D9 M8 {7 J2 |
19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位. s! S/ O8 E$ I3 e9 O9 C
+ r1 L% m, j: d9 @  }# L0 c/ F. Z
20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统! U/ Q% l& s  m4 Q: q
3 G+ ^% \* b* K- d! J' [8 }
21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。3 C1 b) s) X0 ~

- i0 ^# A1 ]6 J* r" q7 d2 T22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位$ f1 s3 @" F- V; W6 v( _; ^, ^5 H. x

0 U8 ]; Q4 p/ M  Z3 |) j//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
/ ]. s. x' O" X7 Z5 n4 J: @! c+ p. j) K2 x
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;/ r) l  p  M& R$ p% a

: c3 S! @9 c, t2 _& K8 G//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
3 B$ G4 j# e; C+ p
, o0 A2 P! T1 `. t' O2 ^- Y//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;1 I! ~- y+ p  t, X

9 v0 d+ S) s( y- s" D9 E//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
4 X; Y! [+ M, Y  V) M8 Y$ r. i  b6 f8 I
//RCC_FLAG_LPWRRST ,低功耗复位9 X. ?4 f2 K, A, g3 m; L

5 i7 ?8 k. M5 m" _+ @* f* A23、void RCC_ClearFlag(void);//清除RCC的复位标志位( T4 ~$ j6 G4 }

3 E' Z- ?$ L. {24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否
+ G; z: g) j( b7 ]( ^- ^1 b$ h" h' q8 m' ~
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
* @2 w9 w# w% c2 R
! Y7 P, E- b9 z) }//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断7 |; ]# j" ^8 D( A; \# O* |

6 d3 z3 x, n* X+ C3 {* b( y//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断; b) n( K! \( h/ t  X4 s

' D- i; C' I. _& `25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位
- z1 k8 B& i2 ~  q3 Y$ u
; m; y$ \; D  z$ S//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断9 {- q  Y' g& M8 A

! ?6 E2 k/ a+ E! v2 R. }) F//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断# Q* f2 e$ K' {; t
% R2 X* J/ J; f( f2 {
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
( W8 ~* z" {1 C' y& b: U6 i' k% j, {
7 _& A: N; \2 ~& P! h
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 手机版