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

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

[复制链接]
STMCU小助手 发布时间:2021-11-27 10:06
STM32f1时钟系统
+ l# e. @, @8 f4 W) L8 Q5 k0 J
, \% W% n8 D; g! P$ R" r0 p一、祭出STM32F1的官方时钟框图
0 D! p, E8 g2 c$ K& b& Z; i% F; p  d) @$ Y; B  D+ M
20201008101308453.png

1 e; X* `- w( N5 X6 u1 r/ o! s
; G  ^) S  z" V# K: u
20201008101308299.jpg
+ [- P$ A2 b+ h% o  o' H# v! [  l
( G5 b0 D, x, {$ A2 t
4 E) i5 x1 D  I4 i; X
二、寄存器说明: c( a7 v' |$ ^+ l$ \; m

4 w; _- X1 U0 Z2 _% e) y1、时钟控制寄存器RCC_CR
3 O- ~9 S: O; e2 `3 H* o7 p3 F+ D% C4 M/ A3 j
20201008101308232.jpg

2 I; z! d+ Q; k% v" H; K# i: @& g$ ^  f3 {5 B/ K5 J
第0位:HSION(0,关闭;1,开启)
1 ~& C: f+ x4 D6 h
6 `0 e3 w! V: \. Q6 X7 R: |第1位:HSIRDY(0,HSI未就绪;1,HSI就绪)
0 N' E1 R! i5 E4 @8 [- z" K# _3 @9 N. R* T. M3 g# j
第16位:HSEON(0,关闭;1,开启)
: D: A' }" K0 }; G3 x/ b1 y$ o" _" _% s3 E
第17位:HSERDY(0,HSE未就绪;1,HSE就绪)
5 ?8 I; I3 I9 f6 a0 Z6 N
( ]: F) P1 Z7 }; Q# v" x4 z; b9 p第19位:CSSON(0,时钟检测关闭;1,时钟监控开启)
7 K/ }3 h$ B3 A" Z8 G
5 u" O5 @$ C: ~# H, b第24位:PLLON(0,关闭PLL;1,使能PLL)! Y# n! d. _- _1 O2 T
3 \  G) N- _, n# P
第25位:PLLRDY(0,PLL未锁定,1:PLL锁定)
$ j+ `/ X, V$ N
+ m" t5 X, s4 q& Z' i0 x1 Q* }1 t6 Q
2、时钟配置寄存器RCC_CFGR
+ J" O0 x+ I. C  \- X$ x
: T" q7 K+ w" E- W5 }+ i. g
20201008101308204.jpg
6 t% Q: i. f0 z+ y  X
0 g' c: e2 H" x% R3 Z3 `2 u
20201008101307851.jpg

1 R5 s- D9 d  c( r) R% p6 X& G8 u* C- R% ?1 Y) w
7 f1 m  W9 ~+ S' ^* I9 }; W- v( ?
第1:0位SW: 软件设置时钟源
. k# ]9 h' \- m
5 ~2 B3 L5 u" H6 O% M% J* I- {  n00:HSI为系统时钟
0 K4 h8 ~0 \6 Q# \$ Q, N3 i, o1 u+ A9 O" m
01:HSE为系统时钟5 K$ N* x9 d$ R0 O

& n  P0 p: C/ ]7 t10:PLL作为系统时钟
) i- H" v2 P1 Q. ]( n& g& F" W7 G* n' }! c! I
11:时钟不可用- Y3 M" n9 v- ]! c2 Z$ i3 J" a) l- i
5 G4 b+ S9 Z5 W$ S5 r' R
第3:2位SWS:硬件指示时钟源/ t* p5 ?8 y2 t' E$ H

4 K  M& }* t# z1 S3 K. M00:HSI为系统时钟
7 s8 C& o3 R; _6 D! _1 O1 f! B& y: h* p6 x% T. D
01:HSE为系统时钟
, Z3 ]( V, M# Q3 K; M8 R
: r* F6 t% H* ^4 j3 Z* ^10:PLL作为系统时钟; H) }1 l" w9 r. j, {) Z, @

+ F: A, }6 z, K6 m  |: Y3 k4 p8 S11:时钟不可用! }) g6 H. v3 `6 v  O
" k7 W/ T* r1 K, E
第7:4位HPRE:软件设置AHB的分频系数(具体见参考手册)
: b4 f8 y; l% g2 s' I# S' B
9 Q0 @3 Q; D- p) |) I3 j
20201008101307795.jpg
9 C' d5 I% q$ q6 p/ W! k
% x: F( p0 b$ x# F3 q
第10:8位PPPRE1:软件设置低速APB1(PCLK1)的与分频系数(具体见参考手册)
8 f9 K+ |2 {, S" ^( d$ l" R& Z, b& l( y* B; e8 V
20201008101308154.jpg

- U" w, V3 N1 _- X! `2 b# d
& H  D- l5 H" h1 C  `& P$ E第13:11位PPPRE2:软件设置高速APB2(PCLK2)的预分频系数(具体见参考手册)
1 V# B( [1 _. m1 Y' b+ H" t6 o8 C. r* n: P: H6 O4 T* s% e
20201008101308173.jpg

: u& h0 U8 h# [  a/ U
, K+ n! ]- u% `4 Q7 J# O2 U第15:14位ADCPPE:软件设置ADC的时钟频率(最大14Mhz)7 O- u( _7 s# g1 O# f

5 ^, w! z8 i5 M. T% e/ A7 D0 h/ L, {
20201008101308153.jpg
/ x2 Z1 m/ d7 x0 [) U; \
# O# v/ A1 T  E6 ~0 ]9 ]$ |; b
        00:APB2的2分频
; H/ h  \! {' P! `. k# x2 _
$ _+ [1 X4 `: _5 N1 H% h3 t5 U        01:APB2的4分频
" C( _/ `" Q' M% `7 G% A' V+ C2 W1 ?
        10:APB2的6分频
3 E; e, i' }1 j! H2 I
% V: x" y+ L6 b6 o  {8 Z        11:APB2的8分频
0 Y8 G  b7 P6 @3 t4 Y  D+ c$ y3 P
第16位PLLSRC:软件选择PLL的时钟源(关闭PLL时写入)
! f) l+ L# t/ v0 }- i9 f7 _
9 U+ _8 e% t& p; X
20201008101308171.jpg
7 n* L2 F" k) M" y7 E
# P% F. O  c, j* k  Q% O% I+ o% \- P
        0:HSI的2分频作为PLL的输入时钟
- V$ D1 Z5 x; @0 ?
& O; E: u, i. H" Y, D        1:HSE作为PLL的输入时钟9 i  A/ n+ D4 j: y6 I3 D, E

) N9 p) `8 ^5 Z& m8 Y3 o! I第17位PLLXTPRE:软件选择HSE作为PLL输入时是否分频
5 x1 P% z! z' z% a7 O
, B& ?$ C8 H, Z1 ?/ u- i) }

% y& N& K1 @. r& i& b; o$ c- [( i$ L) y8 v4 n, f: T/ H
        0:HSE不分频
$ f) q% _) @1 Z  ]7 v+ E* }! g
# X5 A8 b$ Y* H3 c) O4 J        1:HSE 2分频# t8 E5 D% |1 h% L* Z7 x0 B( Q

* P. c  G% _% F. Z* [2 U2 x- W第21:18位PLLMUL:软件设置PLL的倍频系数(最高不超过72M,实测超过100M后还能工作)' d" ^% v0 k; h$ r# k6 o
1 L4 N) _. {- Y9 K4 Z; q2 ]
20201008101307972.jpg
3 F# k. f* B) a' r8 J: H2 ~$ u/ w

' Z( @, }7 l) `) _        详见参考手册
7 Q* r1 I% \) [$ ]' F& x! ^+ d7 t/ j( {. Q" D
第22位USBPRE:软件设置USB时钟
" c( p  J( f& t  ~4 Z1 A" L: ?3 M$ N1 H  G; f
20201008101308155.jpg
9 C2 m. e+ M) l; C, {# f- d- `) i

7 U. L/ _+ b: p% L7 j% F% S0 W        0:PLL时钟1.5倍分频作为USB时钟0 v% V; {4 ?; s$ _$ M( |
+ C$ K6 @0 T1 D
        1:PLL直接作为USB时钟
. \" x. @" _0 K: ?' g
+ \' B/ Q3 m/ o" Y- L第26:24位MCO:时钟输出PA8引脚(对于STM32F1来说,最高频率不能超过IO口的频率50Mhz)
, m' P  K9 Y! K/ O! L& i& H$ k, f% A
8 j7 ~( o+ {4 q, o  Z) m

7 i1 c: ]# Q# f        0xx:无输出; ~4 l4 D0 n7 h( t, \1 g, V0 t

6 ^: q" k  t0 @' h        100:输出系统时钟SYSCLK& F" b6 o- `, ]! f
- u. L& j8 ?& L: ~
        101:HSI输出* g* {' V4 S8 [
6 I! {- w! f3 r8 y# z
        110:HSE输出
. D, Y# P2 N; b
4 @  p& |9 S2 w/ E2 W        111:PLL的2分频输出
: ]5 N, ^; J1 [' I5 d( @9 I/ _- B, ^6 p

+ I5 k' Y8 v$ {# C
5 B" I* z8 J$ k* n3、时钟中断寄存器RCC_CIR# F" G4 p$ O/ h. s9 y3 x
4 b. }5 Z* |: P3 T" b* `
4、APB2外设复位寄存器(RCC_APB2RSTR)2 }7 ~& n5 V7 f- ?4 i( p1 y4 l6 q; K" M
) V% k  ?  ]  c
对应位写1复位相应外设,写0无作用
2 C% G! |0 D0 P' |6 t
/ ?! M3 q. q  V6 ]0 z
20201008101308262.jpg
% M/ E9 e7 `- G* @! F
2 l$ [' e( X7 _5 V" H3 K: s3 x& D
5、APB1 外设复位寄存器 (RCC_APB1RSTR)
, Q5 M) h/ |% R8 y9 z% r! S4 J/ S' H, x" f" l
对应位写1复位相应外设,写0无作用
2 M* W8 r' l8 A1 Z3 ~/ m2 q. H5 j; }* P
20201008101308280.jpg

# P3 I4 I& E2 r: Z6 l. A, H# }" V. @- K: C0 A
6、  AHB外设时钟使能寄存器 (RCC_AHBENR)   
* ^9 Q7 ]0 Q( D0 E$ P" v: L2 Y  d8 d- d2 m) Z' B" p! d. ^
对应位写1开启相应外设,写0关闭外设9 o9 A7 A9 `0 p( x1 f! `

- O& {& |/ z" \) e
" Q* r; l: w7 `( x/ ~; F

, u* G+ h6 `& n4 I. w7、 APB2 外设时钟使能寄存器(RCC_APB2ENR)
1 `! V' ?) _  C  G: J- @1 {
, c" K+ w9 z, {' [$ O4 W对应位写1开启相应外设,写0关闭外设
2 G  \. r6 N2 u
2 C8 h5 H- b3 t' B2 Y9 m

  r# q! }+ T  h' p$ h5 d  y. X7 G+ r* z
8、 APB1 外设时钟使能寄存器(RCC_APB1ENR)" X  B# q, M& t

, `* ?; ?8 t% i- _# A7 C" t 对应位写1开启相应外设,写0关闭外设
: d6 w8 p8 }! P3 o- [- W# M" Z# v6 |  X2 r& M$ K. o

) @6 F+ ~0 O/ V8 Z# `9 {4 n; G5 d
8 x8 |5 x; `9 X: a/ c8 P. o6 c 9、备份域控制寄存器 (RCC_BDCR)7 c& F' R' w5 e' w# P

" u! S- C, S8 d1 Q2 ^1 {
20201008101308229.jpg
( J% w, P0 g- J. ~0 u% @
$ ^* x: V0 z4 f0 {" a
第0位LSEON:软件设置,外部低速振荡器使能:0:关闭,1:开启;
* Y$ U# ^0 X3 t( U/ I% O
$ s+ ^# N7 W+ f( `- z7 k- u第1位LSERDY:硬件指示,外部低速LSE就绪:0:未就绪,1:就绪;8 B0 X+ ~5 o2 G

0 ?, T0 ~1 ^- q  s; `$ w3 y  A第15位RTCEN:RTC时钟使能:0:关闭,1开启;
) L! n: R3 Z7 h7 ]& b
; {# _) X% Q' f. n7 m' _10、控制/状态寄存器(RCC_CSR)
! k/ D1 T, @  K2 i* ]) ]4 i
. ?) X. o4 r. Q2 n7 }$ |
20201008101308238.jpg
& m$ ~1 {3 x8 O# C
, U! b4 f; v/ Q+ m5 m
第0位LSION:软件设置,内部低速振荡器就绪:0,:40kHz振荡器时钟就绪5 f8 q0 T, J, x' ~

( T- z4 f( c* f1 m3 K4 }5 d2 J) i' q第1位LSIRDY:硬件指示,内部低速振荡器就绪:1:就绪,0:未就绪;6 S4 g; @/ w% L
1 W' o+ t( Q% n: ^4 w
第29位IWDGRSTF窗口看门狗复位标志:1:发生窗口看门狗复位;0:未发生7 C6 b% Y, @- F- ^
8 `" D# i+ G* g
第30位WWDGRSTF独立看门狗复位标志:1:发生独立看门狗复位;0:未发生
: P0 A1 Z( k% C/ ^1 h( v# J/ j+ f1 R

' o8 Z) ~0 `! u主要相关库函数:
4 N/ a! ]0 @9 j
1 D7 D7 p8 k( N" K5 y) w! A1、void RCC_DeInit(void);//将外设RCC寄存器设为缺省值;
9 M8 i' V' e; n( k, E
7 R& x+ }9 {, C4 S0 [* O7 g, z) o. R2、void RCC_HSEConfig(uint32_t RCC_HSE);//设置外部高速晶振(HSE);( @; x7 G! ]5 I" G

0 w/ s: h/ z) i6 W5 t; Y3、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue);//调整内部高速晶振(HSI)校准值- `8 }/ o4 D4 W( H$ a) a6 M* d/ b' Q5 M
. D9 U- Y6 I( ]- @/ @
4、void RCC_HSICmd(FunctionalState NewState);//使能或者失能内部高速晶振(HSI)
& c  V  P/ w& ~2 ^# L6 m1 G. K
5、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul);//设置PLL时钟源及倍频系数( u& ?+ V* w+ l1 x+ e- F
0 E" _+ Y. l$ i  }, n
6、void RCC_PLLCmd(FunctionalState NewState);//使能或者失能PLL
% t1 j' w! j: P) N9 I; L8 Z3 P
* [) W& S- p$ H/ w9 R$ o7、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource);//设置系统时钟(SYSCLK)源) Z* h3 G/ l/ \9 m
% _4 w: `7 x8 b3 X% D
8、void RCC_HCLKConfig(uint32_t RCC_SYSCLK);//设置AHB时钟(HCLK)
* q% A: W( Q; D1 A6 z  [$ d6 B& [$ p
% g' a" w; o0 Y; h9、void RCC_PCLK1Config(uint32_t RCC_HCLK);//设置低速AHB时钟(PCLK1)
# U# O+ o% t1 s8 s/ X" g1 T$ u8 s# M( q
10、void RCC_PCLK2Config(uint32_t RCC_HCLK);//设置高速AHB时钟(PCLK2)
- B% d% K' Y' X
5 o/ P! Z# I% N4 f5 o11、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState);//使能或者失能指定的RCC中断
; O" k4 ^8 x; A0 \+ b) D6 W! h
- g/ g9 p+ z& i3 c: B# R) Z12、 void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource);//设置USB时钟(USBCLK)
$ ^: S4 ~1 S; B  L0 T8 l0 |
5 T5 ]: I9 |% @- M13、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);//设置ADC时钟(ADCCLK)
: f. \3 e/ q, v& @7 d
5 h9 D, \" W2 s) D) h5 V14、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//使能或者失能AHB外设时钟7 O7 h( _. o/ |- ]
" S1 u2 F+ D3 s5 G
15、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//使能或者失能APB2外设时钟
; z2 o+ \; \/ D4 g) l
# M3 |% K) t/ P: }- [$ M+ P4 O16、void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//使能或者失能APB1外设时钟2 M' f  ~( F" k/ D5 v! g6 T
% z' _0 }1 p, }7 C
17、void RCC_AHBPeriphResetCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//强制或者释放高速AHB外设复位
+ l' G6 o/ ]* f3 x" Z/ Q% @2 r# k5 q' ?( n
18、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//强制或者释放高速APB(APB2)外设复位, m. {/ A" B1 L5 r

2 I0 t! I% F% \5 b6 I19、void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);//强制或者释放低速APB(APB1)外设复位) H$ ]9 i9 l: i* c" {% ]* ]( w6 a

% \1 O7 Z4 R( o8 ?/ H20、void RCC_ClockSecuritySystemCmd(FunctionalState NewState);//使能或者失能时钟安全系统
4 x; [/ A1 _" ]. H0 l
5 F4 g) C4 T* \* u: x21、void RCC_MCOConfig(uint8_t RCC_MCO);//选择在MCO管脚上输出的时钟源,警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。
% {* P% _4 W" M3 i) e8 m, r, u$ r. ?* t9 u5 `
22、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG);//检查指定的RCC标志位3 K, p1 n, f, j  n

* n! ?. K& I% v0 N//RCC_FLAG_HSIRDY ,HSI晶振就绪;RCC_FLAG_HSERDY ,HSE晶振就绪;1 e5 ]6 A5 o4 R; o# p$ V: U- i
7 A. E( s& e% h5 ]! Q3 K
//RCC_FLAG_PLLRDY ,PLL就绪;RCC_FLAG_LSERDY ,LSI晶振就绪;3 a7 S  X/ I; |( E8 u" T# Q
" g4 V) K; Z* Q$ V) l2 C6 e
//RCC_FLAG_LSIRDY ,LSE晶振就绪;RCC_FLAG_PINRST ,管脚复位 ;
" y0 \5 V4 T; g- O3 W8 q+ M4 M4 e9 @% R
//RCC_FLAG_PORRST ,POR/PDR复位;RCC_FLAG_SFTRST ,软件复位 ;
3 x: A8 j/ B. N9 E5 I( y7 T- [/ Y' Y; k  y9 ^/ E* ~9 i- m
//RCC_FLAG_IWDGRST ,IWDG复位;RCC_FLAG_WWDGRST ,WWDG复位;2 y( D8 ^! W  ?. i& D$ Q
/ K( i! s" ~: L
//RCC_FLAG_LPWRRST ,低功耗复位% a8 {. q2 i- ~: ^! E$ ]6 L
0 r: K1 t+ I7 e7 E# u. l
23、void RCC_ClearFlag(void);//清除RCC的复位标志位5 t, E: u/ S" @( w# \% h2 |

4 Z$ q4 c1 j) ]; T' r: S; c24、ITStatus RCC_GetITStatus(uint8_t RCC_IT);//检查指定的RCC中断发生与否& e, \! k) |% c1 b. d

& n% k! [9 J) O8 u6 u# k' G//输入:RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断
( X3 _7 o1 i1 _& z0 ]6 D1 F7 c+ }% D8 S% X1 E/ G$ R
//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
2 v. p, l" L9 {8 H1 k  f" N9 {" V
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断' x* b, ^! ]  e9 c! ^9 i: M

5 N, P3 q! L3 n" ^9 ~8 w25、void RCC_ClearITPendingBit(uint8_t RCC_IT);//清除RCC的中断待处理位1 z, S5 T4 u1 B; s; {* j
  g3 F. U! H2 {% B  C. R/ {
//RCC_IT_LSIRDY,LSI晶振就绪中断;RCC_IT_LSERDY,LSE晶振就绪中断" x# Q- I+ y; |1 b+ J

+ P- a- Q& H3 p/ E: L, }& A. ?//RCC_IT_HSIRDY,HSI晶振就绪中断;RCC_IT_HSERDY,HSE晶振就绪中断
& b' B+ U1 X! p5 F, ~- i# ]* x# V2 W8 p8 b! \
//RCC_IT_PLLRDY,PLL就绪中断;RCC_IT_CSS,时钟安全系统中断
# L3 p0 V3 B6 p' t0 i8 U3 b1 D
/ ~, p. P1 X! ]9 e; W/ X) T6 |" K
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 手机版