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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
7 o. D' X' X8 }2 L& R$ i9 K1 A5 R1 d4 R. u
一、祭出STM32F1的官方时钟框图
) b5 i" Q* }; G  B
" Z& V/ J2 J& C- N3 }5 Q9 k
20201008101308453.png

4 V. n# i9 E9 a$ _8 j+ r5 }+ L
6 j  m" C: [* Z( @3 I' y
20201008101308299.jpg

0 `6 l& _( P- T: }' x/ L8 W/ g6 d

' ?; I! J5 Q" M$ h二、寄存器说明# G* j$ `, _  Y! K2 t! Z! ]
/ w2 V5 j9 v: a
1、时钟控制寄存器RCC_CR
  J/ P* q# _. e2 l, @. z) S1 n2 t4 {, q4 d9 C- y
20201008101308232.jpg

! q5 u. C4 Z5 s* ~6 c
( U! g) `! F& N( B" w* x第0位:HSION(0,关闭;1,开启)9 R  M; J& }; i, a+ _7 d
; c3 j8 B* ^  Q& T/ n+ C1 z
第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)5 ^! {5 @1 i. I( E3 f
  A0 \5 z4 R" c6 x, x
第16位:HSEON(0,关闭;1,开启)' A2 \0 w: A* q  ~& r: _& N

3 d( m5 q4 R2 Y6 j  p第17位:HSERDY(0,HSE未就绪;1,HSE就绪)
/ l: [4 r' ?6 v0 O4 W7 n0 A* [
. A- m9 R* ^; F' |. C7 G; Z  g2 w第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)6 K9 Q$ {% n( D! C

7 t; n' ?- a1 O1 V% y5 f第24位:PLLON(0,关闭PLL;1,使能PLL)& I6 s/ S- _% d* h4 k
0 E2 g( g7 `/ D0 ?3 B, l
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
. f8 ~( `5 X7 C. Z
: H/ Z5 Q9 h6 {  I) |8 ^$ h; D; J* R* k. e
2、时钟配置寄存器RCC_CFGR  ~4 {, m0 u' X8 d

' {; z# u" a2 [/ m" g
20201008101308204.jpg

# [& T: \' b3 H& V1 S* M$ {0 N1 S+ O0 q; p
20201008101307851.jpg
6 }3 }; |8 j$ k. T9 n6 H
! O# v% V* N6 @) X4 p
  `: t% L! ^6 o; X: q% @
第1:0位SW: 软件设置时钟源
( N- [# c: n5 ?+ Z
, ]+ e( o6 @9 e, ?2 v. l5 V00:HSI为系统时钟
! O; U" R2 G$ w: c9 b! K( n* R0 Q) X+ ~5 S2 \- U
01:HSE为系统时钟
4 W8 Q: K' q; d9 e' d: a9 L; Q5 y0 b$ g
10:PLL作为系统时钟
: K' j4 N% t" o6 c
' ?, I/ N: N) S9 k) C& K( E6 M- O11:时钟不可用
1 m/ z, A0 b/ o& [
4 m) j& q: W8 e/ [' q# @第3:2位SWS:硬件指示时钟源* `( x; \8 y/ I
3 X! G- s% a( B6 ?! {
00:HSI为系统时钟 ! G; @9 e  F; A

' \" }7 I4 ~- {2 h! L7 J& k& j01:HSE为系统时钟
" t  Q: l& ^5 w" X" r! o: ~5 n5 O, R) e7 f& {% O
10:PLL作为系统时钟! B6 l: k3 F; U( z( ?. Y

' J7 o7 D' f% J: `! a11:时钟不可用5 T, c) x% W, ]: g
% a; }- d  k2 t+ Z
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)
9 s0 T' W/ |6 K, {/ c' X: D; ^0 }4 i2 ^4 X' S, B3 z
20201008101307795.jpg
1 W8 N5 \) K; a) W, @) a0 i5 s

1 D+ a9 i# L% o0 y6 p第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册), Q% w# {& d8 Q( |# z- l$ X0 h

) @) f' H5 d8 p. ?# l
20201008101308154.jpg

* u0 \  M; f  K8 ?: O- X  s/ k4 }  f: U- x3 s" ?' n# F
第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)  k4 w) [* P4 e- Q

5 I+ @4 h$ W3 f2 I) x
20201008101308173.jpg
, _% W+ V2 e1 r

1 T& ~4 }. k5 B第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)
% h( q7 c. W* o5 n- j3 Z. Y! C3 K' r1 }0 ]
20201008101308153.jpg
# H$ L3 K6 \5 g* d# h/ r: }
, M7 a" X' Q% z* S0 x! ^0 m5 }
        00:APB2的2分频
( s3 i: Q! @5 `& @0 [1 ]; ^5 [1 w& N
        01:APB2的4分频+ w: e0 A4 N* i4 u& N; n

8 @- j% Z$ l0 K2 _        10:APB2的6分频3 Q9 d4 ^( A# W
* P% W# o  F* w! z! z$ A- x
        11:APB2的8分频0 _4 ~- |6 B, `' Q0 _+ `: a
- r+ o5 s  `, o  c
第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)5 w! V. @& M0 r" D  W

" e, C: S4 }* C# C# H9 m
20201008101308171.jpg

5 F" u# t1 B, T4 q8 P% Y
1 S. p- F1 f0 S( g        0:HSI的2分频作为PLL的输入时钟
6 c8 J* Z3 _, P# g5 A! [6 n: M+ \; ~
        1:HSE作为PLL的输入时钟
% l2 h) u/ F/ w% v; v8 ~) p3 E6 U- V9 q+ ?/ M: {. K) w
第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
( V. {6 B# I3 t: Q+ R# ?! R1 Z+ C+ w7 `
1 {6 a# @6 r# z

; l6 z" K/ N& {0 ~        0:HSE不分频. I- b7 C, Q9 J' e+ s; Q
7 j) w4 l/ W- \! {$ ?2 d8 l
        1:HSE 2分频) W8 |7 E6 _4 U9 O$ s- s& p
& q1 U! V* _5 o) V) b. d5 }* e3 c
第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)
' e, f- X, y7 M; y9 Z$ @' I
: P" N$ L- H* f
20201008101307972.jpg

; |( {& Q- z$ H' A- f3 t; b
, i3 M+ z8 `9 }- P  Q        详见参考手册
$ n7 a: E- g7 H, I+ s7 ~* s. y4 E  F/ A+ W# Y8 o
第22位USBPRE:软件设置USB时钟
  A" N& I* F! }2 R: x9 g
. ~; R1 \7 x5 z6 G7 A: ]; P& V
20201008101308155.jpg
* O4 U$ h; v, y* N

3 I& ~6 p2 G9 |/ u% p        0:PLL时钟1.5倍分频作为USB时钟
, N0 \) }1 d) d; ^; A& b: W7 N9 v, X2 ^
        1:PLL直接作为USB时钟
' L; l  b( W. {# x0 c2 c& j7 q4 n. U7 e, a- g1 `, H+ Z1 l3 [
第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)$ ]4 o6 A8 r, s0 k( h2 D0 v* v  h4 f

- c2 v; V3 h+ e" X# s# D0 r

3 }2 E4 k! k% e" I  z: p+ P2 B# U! e" O$ _6 X
        0xx:无输出
. y% I0 A+ ~5 }6 C1 c* _$ {$ e3 S8 R! [3 R: Z
        100:输出系统时钟SYSCLK: z5 w+ z( X3 l8 p% }
- k( O7 `) R: P( M) `( O# Y4 u) r
        101:HSI输出! x5 x; `1 d) D# J1 _
' B$ ?1 {6 @) q5 W$ q/ \  ~
        110:HSE输出* ^2 c; U( c8 {, ^1 U% V3 ^5 x$ z0 y

: C. W+ _7 ~7 [# ~- a. U3 s        111:PLL的2分频输出
7 }/ _( W1 x8 O* D/ A" ~# Z( b7 U) y& k3 Q  q

5 o- W3 P+ s5 H( Q0 m( y1 ~3 e3 D4 d$ W: ?5 J2 G, d5 K/ [
3、时钟中断寄存器RCC_CIR
. a, U  V5 }3 r' G9 W3 Y, G
- I+ W( G9 N( Z% u) a/ j$ X2 i4、APB2外设复位寄存器(RCC_APB2RSTR)
- g* m' d4 p  j3 C; f* c% s# V9 O6 G. ~* D* I' c) y
对应位写1复位相应外设,写0无作用
$ W/ H* {- ?" W  }# h  t6 n" G: O% r( r/ M/ j, r+ y2 c/ K
20201008101308262.jpg
( s; D2 f$ @3 b
; D! J2 H  J0 h1 H4 A" R+ Q
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
3 m# F6 `, o' |; x, T5 C+ C
' T0 |6 b$ I% o/ i对应位写1复位相应外设,写0无作用
) d9 A9 y2 u/ ^
( R& j$ Z& q8 M* t
20201008101308280.jpg
& ^2 m& `/ P+ J7 I( D

0 H3 k- h" p- x8 u9 E 6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   * }, N) s) z! B9 i, K" b+ z" Y, ^8 [
% c( L& l6 E2 b9 |; t
对应位写1开启相应外设,写0关闭外设0 u3 b% a$ z3 N* V
# }% Q0 I3 e6 Z
( `- h. t: x2 B6 j; M6 E

$ N) D5 D+ c% R$ E7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
; _- W( x, U, e3 \
" y7 k# w, \6 ?. O- {5 n7 v对应位写1开启相应外设,写0关闭外设
5 E* a$ Y2 n% ?# Q4 B8 [0 K" L/ ]

+ y7 e  b) n7 c5 W* H; d. `/ ]4 q  J# N! R, |# N
8、 APB1 外设时钟使能寄存器(RCC_APB1ENR), t9 v3 A& h4 d
1 y# W7 ~. l% v' u% A$ N8 W" v
对应位写1开启相应外设,写0关闭外设% ]7 C2 S4 b5 \' ]- {: `) H4 g
1 l; W$ Q7 s; c
# a2 S+ b  v' |  \9 P
! i6 y3 R5 `7 ~, C1 K
9、备份域控制寄存器 (RCC_BDCR)
1 N/ v- z; w; Y
6 n9 E0 }4 ^+ @0 @
20201008101308229.jpg

  \- ~% ]: z9 ?: _) G: r
/ V/ }$ L# N4 y第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
2 X8 F8 X( h- v" ]% n8 ~! H& `6 V* T6 j% P. N
第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;7 x2 V. M2 b! e# g. \% z  a

1 s' D2 @/ O8 f3 `) L) g0 R第15位RTCEN:RTC时钟使能:0:关闭,1开启;# X3 m7 V/ ^# X9 o/ W8 R" U; `7 r
4 A1 T+ g0 [8 U, V  X6 R2 i
10、控制/状态寄存器(RCC_CSR)7 s7 B6 ~6 r' U. {

1 p! Q* [+ t0 `0 v, v2 e
20201008101308238.jpg
) ^* g5 J1 l- t+ d; b8 @6 W! d6 z
( y0 V8 M" t3 Y- @7 S7 _" }1 h, f
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪
( `' T* Y% L" w4 g* w3 z% L* Q$ W8 }
第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;
; L* h8 q6 e- S# G# g/ ^- T, v( q' m8 y/ T
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生
6 |7 J3 C/ o$ G% b/ I0 K# r8 Q
0 u5 C2 ]" u3 P7 x4 f第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
0 C- A) M! B" _/ h3 ?  E" U7 ~1 Q; F

$ |! n+ \0 G1 l) I# _+ ?" O0 @+ ?主要相关库函数:
7 i1 N% ~5 H- q/ \  j
# L% r( s. Z/ o, A/ G% c1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
! c+ W/ V7 p# f' Q$ |3 W- D" n6 {7 g& W. o( G  p" L1 A! ]* E
2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);2 o' ]( `" O8 D/ G
: g( K0 w5 Y- M1 t, w- L
3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值: I6 w( F; K9 ]1 x# i$ F/ Q& K
8 C  ~3 Z2 g" ~
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)# x: c' T5 D  A" u, a
  q# ~7 _8 @8 e" S
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数
1 Z" {4 d6 V8 a# I8 s- I/ C* V. R1 e& \6 n, y/ V. f2 b
6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL3 n5 w3 e6 Q" s# ^9 J" l4 k

) z: a5 J  E9 d$ r3 x; J0 \. ^7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源- x6 q$ x  M% R# ^2 u. A) Y# \, n0 A
. R4 f8 i) \: V$ F: v/ c
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)
, @' q5 G* ^, W, W1 V; F4 p$ m
9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)3 H1 J. C& \0 C6 T

) s- H' u6 r( Y# a/ ]" k10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)5 p4 i8 ^0 A' n

) B) c; D4 Z% c. i! \% C9 k; ]5 e11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断& c3 k. X) H& E$ a2 M
4 g' W+ s1 E) L  D
12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
' Z+ I8 \6 \4 F1 v0 @7 Q; ~% F& t) c# F/ A
13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)! O/ M! ]% N/ s! r$ g
1 `' Q! U- X4 X4 A7 V3 P
14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟8 \# v0 i4 L' b' t5 L, |( {4 S

) m# j. t" N: l/ v; h2 L15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟
( K4 b0 L- O4 J) F( y# C# e5 O; l* g* h  E8 F' P  M
16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟
" K- r2 i+ e) j6 O, ^' n4 Z% n2 [* x% q* E, p
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位: s9 K, O* a! X

+ M7 t; {6 h. f5 G) h& l18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位& Q0 v( L/ i% H/ L6 h# w

: M/ e. b2 S8 g* p  k$ }$ k19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位( H- Y$ h4 }& g# Y" D. \/ H

3 e+ j  u2 t+ {5 X20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统( r: N/ C, @: J9 `" c$ y* M
6 l5 J% V4 ?, p/ G/ n
21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
, v6 f2 O* K4 Z3 e) C; k$ }% p" R8 T1 {( q
22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位9 a( g4 C2 c/ v1 r
" N1 X8 h# \5 n$ F( v. k* h& ~; m
//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;
4 J# }: I" _$ }' G' E; b) f4 C! N+ g9 U7 Y$ M% b8 v
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;
" Y/ v8 ]" V1 F* y  L4 s: b/ x; C
( F" F1 a; l( G1 [" h' a" b. L//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;6 T% f2 ^8 f8 E0 G) V

* |, V$ q8 u3 C7 V//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;
- g  J+ ?: i: d6 s) W* Z, i6 I) z" x9 Q" [; T' b
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;
* D! Z9 n' \7 [1 V7 p
" ]8 H1 y; g# H9 F2 b//RCC_FLAG_LPWRRST ,低功耗复位
+ h2 f0 Q& x7 u) y( f, A  q
! V% T! `+ P% Q! ?6 E4 E2 ?23、void RCC_ClearFlag(void);//清除RCC的复位标志位
- X" [7 X- {! i  ?4 D7 N" i; Q( S$ J2 d3 _0 r+ X
24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否. O: W5 G' i, }3 a
. B' O" S9 k' \
//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断$ o- O6 q5 ]- a+ S4 J

+ D/ [, L6 i2 C; M//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
9 j: t! U5 S" o' C& m& w/ s! b" K! _
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
  ]+ T& Q* Z9 Z4 J. c- b8 B4 |5 h* F5 U& q' V. A
25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位! S3 \" h" w& |  c: d
7 s- H% b# k* t& R. N
//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断. {0 _" x* V$ U: @) F+ e# O$ O
4 d" E0 a7 K5 a
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断6 N" ]% b1 b" [9 n1 R

3 P' T* y! n9 q5 Q, w0 @% D: L//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断; D7 q, {: a) N4 J/ S  a# c8 W

; l. U( D" v9 K  s
" B0 ^0 S- L& D" Y3 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 手机版