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

STM32G474时钟设置笔记(170MHz)

[复制链接]
STMCU-管管 发布时间:2020-9-18 10:46
编写基础RCC(Reset and Clock Control)
" f+ W* z: D; Q: b& v6 h5 ~6 Q/ y* L$ u* U6 S3 p; l/ s! U' w
4 _" D. ?9 C* S5 ]( ^8 l7 K/ J

: @& W2 c1 ]: q! U- H- C. NAHB、APB1、APB2最大频率都是170MHz。
/ W- t8 H; n- f8 k8 C/ B' J3 G

3 \8 \0 u8 H' C" ?% M4 q% I0 P

+ t: I% H) B8 h4 r" n* J# a

' Z- j1 U/ r8 C
# r  k6 R9 \# Q" E7 C5 Z- e* Q
  u9 C* W( d) a8 B/ g, j( m
时钟树3 s  U( R3 e5 H  p0 f  b' z
0 v( \$ a* t, t. K- ^9 z1 m% Z

要想配置时钟首先必须要看明白时钟树。4 b" q$ {4 _2 b

5 I0 k* m( F/ i* q5 ~. q3 N' A

" o+ y# P  \7 A* l$ r& W( o; h2 g

3 V! I3 e5 K) EPLL9 K5 x3 y2 G+ O" N- G

0 w+ t6 g' e4 l% _: Z' i! W

配置时钟精髓就是PLL倍频,因此搞清楚了它就很好解决了。

' }# _# ]2 t1 Q5 l3 {/ D' M
手册上对PLL配置步骤如下图:


3 U# d1 M2 d) s5 Q% o. r

1_meitu_1.jpg

  K3 A# |* Q  g3 ]首先通过上面的时钟树也可以看出来PLL的时钟源有两种:HSI、HSE。PLL的分频、倍频配置在RCC_PLLCFGR寄存器中。
# M3 c. ~7 Q  i; }配置PLL的过程是:

! }* _; `0 C0 m  i3 ^+ Z  N- }% Q1 d1 c3 f% A+ H: H' C
/ _- [4 y2 X% x  Y
  • 将RCC_CR的PLLON位清零来关闭PLL。
  • 查询RCC_CR的PLLRDY是否被清零了,如果该位为0说明PLL已经关闭。
  • 配置分频、倍频系数等(单纯的使能或者关闭PLL_P、PLL_Q或者PLL_R不需要这些步骤,直接操作即可)。
  • 将PLLON设置为1,再次启用PLL。
  • 通过在RCC_PLLCFGR寄存器中配置PLLPEN、PLLQEN、PLLREN来启用所需的PLL输出。 注:PLL输出频率不得大于170MHz。 当一个时钟源被直接使用或通过PLL作为一个系统时钟,是不可能停止它。3 V9 w# E2 K4 C' f# j3 p1 N: g

    ; S' |+ c! W; o5 E1 P: M7 ?

$ J2 y0 y9 e& V7 `4 w4 q
/ ]7 N. S! w4 `. Y& R; q( L4 p. a; G' H
PWR4 C, ^" [" o. h2 |. Z% Y
4 L6 [% V; X/ A7 Q1 @

在不同的工作频率下,对应的电源模式也不一样。

; Z) D" L3 D3 V0 A: ^6 k% b) d8 \* C
可能是为了满足不同频率下的功耗管理,高时钟对应高内核电压,我使用TI的5529时也有倍频时修改内核电压的的操作。
8 u1 M  M2 p, ?# b7 D4 x7 Cg474的电源模式与各个时钟频率对应关系如下表:


. e/ b, D8 p5 q% w# A

2_meitu_2.jpg
" i5 a$ L& f1 ~' r

/ G! P. M. E6 E) S2 J$ F
* O- w/ e) C! @  A1 u
PWR_CR1的VOS[1:0]对应Range2和Range1:! d% L4 W! M1 z' f: P" E' D

* m* K6 g+ X$ y, n


3 i. J$ v' R" ]/ D- f- ~

. |; C& q% K! p6 f

& b) R5 M& U- n' v# v' K2 F3 Q/ a6 |至于Range1的normal模式和boost模式是在PWR_CR5寄存器的R1MODE位配置,R1MODE为0就是boost模式:
$ V9 j$ y7 M* b* D


- W% C0 r9 [5 m* M

, H, u% Z% e! ?8 m

/ Q, f; x; O& e' I: d$ L
/ i" P7 F/ k  f, ~: i1 \, j
g474的R1MODE位与SYSCLK的对应关系如下:
, j5 u3 ?1 a, F4 @( H


% c  e& X+ i% C

9 O/ R! `6 U  }, D% T- u

$ m7 h2 k5 l" q6 Z7 g6 ~

+ |- n" o2 b$ A. U" r7 k手册中还介绍了从range_normal切换到range_boost模式的步骤:: |! s7 f( A" V5 ?/ N  Z


2 i8 c! a9 r0 @- b

3_meitu_3.jpg

2 l0 z6 k* k0 _$ T8 q/ a
8 N: y2 T6 x& R. @( v
# |6 A9 C4 U1 G2 o
! \8 Y" _0 X( Q. k0 e% k
  • 在切换到更高的系统频率之前,系统时钟必须用AHB分频器除以2。
  • 清除的R1MODE位在PWR_CR5寄存器中。
  • 在range1 boost模式中,根据新的频率目标调整等待状态的数量。
  • 配置并切换到新的系统频率。
  • 等待至少1us,然后重新配置AHB预压器以获得所需的HCLK时钟频率
      O8 s1 e2 }* A- j1 P+ ?
    6 F# L: C1 P' X8 a( \9 z) @+ V# P

* g1 Z# r) i. H& x5 h

( _$ m, m5 ~/ M, \
FLASH+ S) G2 Z+ ]; R; |# ?5 m
2 u) |+ H$ ~$ C+ g8 N

这个是我原来忽略的地方,原来就配置了PLL和PWR,然后倍频到140MHz就是极限了,后来我反复查阅手册,才发现了原来少了对FLASH的访问比率的配置。(可以看到上面的range_normal切换到range_boost模式步骤里已经提到了修改FLASH访问比率的事,但是由于没看懂是什么意思,还以为是延时1us,因此配置170MHz时候就失败了。)


5 ]4 ~3 t8 P8 U& B8 ~  ]

上面提到range_normal切换到range_boost步骤里有这么一句:


( A2 T7 Y; M! Z  g6 M1 \. z

  • 在range1 boost模式中,根据新的频率目标调整等待状态的数量(FLASH_ACR的LATENCY位)。
    0 n5 ?/ `$ {6 |# V
    ( [( ]) ~/ ?2 G( @/ E# ?* M

那么就看看这个 FLASH_ACR 的 LATENCY到底是个什么。


- p) g. k& a7 ~; [) F) ?) G/ c查阅手册找到这个寄存器:

  B& f4 P/ n$ c$ Y' `1 Q  ^

% P1 H8 i: P2 [" S6 K, W

+ D6 o- N) a5 ^# V
) f: m9 A# a* o8 p6 f3 u* H
可以看到LATENCY在最低位:7 h3 E2 p, T7 v( H" `- a3 E


: c, F, v+ L6 y

5_meitu_5.jpg
" p- C% l5 Z/ b5 K, a; v

! I; A5 a2 J' ], R  l! j) `0 D

) ^) t& ?8 S/ J  V) _% P$ [! L
/ [9 W! _' n7 j# O) f

LATENCY[3:0]:这些位表示SYSCLK(系统时钟)周期与Flash访问时间的比率。


' P7 ]/ ?& X2 R" X5 P  o6 }知道了它是干嘛的,那么它到底设置为多少合适呢?如下图所示:


( H- }# X4 J# B7 _; w% T! `% Y# }3 v

6_meitu_6.jpg

1 F! ~2 I& H$ r+ |7 ]; o2 u, i( ~# d
, \) p. q3 \! j: f0 r5 }

5 r1 a" X% n2 u. L为了正确地从闪存读取数据,等待状态(延迟)的数量必须根据CPU时钟(HCLK)的频率和内部电压范围的设备VCORE被正确地编程在闪存访问控制寄存器(FLASH_ACR)。参考第6.1.5节:动态电压缩放管理。表29显示了等待状态和CPU时钟频率之间的对应关系。  v6 p; A% Q- j, X# U$ u

5 G. F; L. G- C- x3 S# v$ c6 `

对号入座,我要设置为170MHz,模式为Range 1 Boost模式,那么对应LATENCY值应该为4WS,因此将其配置为4。


, K2 }' c' w/ u

FLASH->ACR |= FLASH_ACR_LATENCY_4WS;

! m0 q, X, Q, L6 V8 z9 j# E

配置函数% L+ w3 y3 a6 E

3 v+ K. G% c6 p8 \6 L" l/ o

有了上面的概念就可以进行编写时钟函数了。+ O+ F4 g" a; V! C$ J8 r+ ?
步骤如下:

) E1 o5 P0 _2 O& v/ d- i

  • 开启HSE(鄙人的板子HSE为8MHz)并确认HSE就绪;
  • 关闭PLL并确认PLL已经关闭;
  • AHB二分频;
  • 配置为range1_boost(默认复位为range1_normal模式);
  • 配置FLASH_ACR的访问时间比率;
  • 配置PLL;
  • 打开PLL并确认PLL就绪;
  • 使能PLL_R;
  • 配置系统时钟为PLL输入,并确认系统时钟就绪;
  • 延时至少1us后切换AHB为不分频。
    9 m3 M+ w/ R6 g& j( H3 i

- |1 i- _# e) a

0 b: p& f  @0 X! q
  1. u8 SYSCLK_140MHz(void)' Z1 V# B0 L5 a4 V' i3 U
  2. {) V3 c$ K' w) W" D! v, l
  3.         u16 temp = 0x2000;
    , b# }3 N) Q8 x6 J2 q! g+ O& G2 n
  4.         RCC->CR |= RCC_CR_HSEON;//打开HSE
    ) a1 g- Y; `. v
  5.         while((!(RCC->CR & RCC_CR_HSERDY))&&(--temp));//等待HSE就绪
    6 N8 x# a& ]" x( e9 V7 U
  6.         if(!temp)//检查是否超时
    - P" r0 I( ?0 H4 ~! e$ b. m) n
  7.         {
    ! v2 {& `! y7 w/ ]% w. g0 h
  8.                 return FAILED;
    , Z! ~5 v$ |. T* I; M* W! h
  9.         }
    4 @% U1 e. m" N& I) J
  10.         RCC->CR &= ~RCC_CR_PLLON;//关闭PLL# ]) J8 h7 b9 g$ T
  11.         temp = 0x2000;- E( Z5 A* t' e6 J. _5 W, H; G( G
  12.         while((RCC->CR & RCC_CR_PLLRDY) && (--temp));//等待PLL下线
    * Z: F. q: |1 a5 Y" e1 ~' p
  13.         if(!temp)//检查是否超时
    ) r6 f& ^6 P& {: P2 M
  14.         {
      o% j% v3 ?6 s  Q. q
  15.                 return FAILED;+ T6 @6 {: p& M4 o+ O
  16.         }
    ' x# ?: k* z: c( ?2 L/ L: `( X/ q7 ]
  17.         RCC->CFGR = RCC_CFGR_PPRE2_DIV2|RCC_CFGR_PPRE1_DIV4|RCC_CFGR_HPRE_DIV2|RCC_CFGR_SW_HSI;9 ~( i2 r5 z+ _3 ~. K
  18.         //系统时钟选择内部高速时钟,AHB二分频,APB1四分频,APB2二分频
    8 j/ `  U# }+ E. u% Z" r+ M
  19.         temp = 0x2000;
    1 {8 R- Q& `( Y+ h
  20.         while(--temp);//等待AHB稳定; W5 K& Y7 z) o& G0 d; q
  21.         PWR->CR5 &= ~PWR_CR5_R1MODE;//设置为range1_boost模式
    8 }* ?2 {- O/ L  V) w: F2 `
  22.         FLASH->ACR &= ~FLASH_ACR_LATENCY;//清除LATENCY
    9 l" y$ U8 i2 K  z- b, E
  23.         FLASH->ACR |= FLASH_ACR_LATENCY_4WS;//配置LATENCY为4WS
    5 Z7 J4 [6 e% e+ M" e
  24.         temp = 0x2000;
    ! B+ M0 K- |) L  V0 i
  25.         while(--temp);//等待系统稳定
    # k. W9 i$ n9 c6 R' B( c
  26.         RCC->PLLCFGR = (70<<RCC_PLLCFGR_PLLN_Pos)|(1<<RCC_PLLCFGR_PLLM_Pos)|RCC_PLLCFGR_PLLSRC_HSE;//(8*70)/2 = VCO = 280MHz( Z/ P) t; L2 ^3 U( _5 Q( u! q: }5 x
  27.         RCC->CR |= RCC_CR_PLLON;//打开PLL: L! i0 |. ]! J  o
  28.         temp = 0xf000;
    & l7 z# {3 M6 L# z
  29.         while((!(RCC->CR & RCC_CR_PLLRDY)) && (--temp));//等待PLL准备就绪( J$ o) p6 Z8 `% \  [5 ^
  30.         if(!temp)
    - S6 {( ^6 [- F
  31.         {
    6 @) w0 O: M! g* o$ U3 Z
  32.                 return FAILED;3 w) e' S' ^1 b' B0 d) J( U
  33.         }3 F& a  C8 Q0 N4 i
  34.         RCC->PLLCFGR |= RCC_PLLCFGR_PLLREN;//使能PLL_R9 p' t( l: A" ^+ y6 I/ ?
  35.         RCC->CFGR |= RCC_CFGR_SW_PLL;//设置系统时钟选择PLL
      ^+ l0 L# _6 j; q, C( T" a2 Z
  36.         temp = 0xf000;' ^- `/ s. W: M" }6 t) T) d
  37.         while(((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS) && (--temp));//等待系统设置PLL主时钟完成标志位置位- g3 T1 v2 c. o+ L
  38.         if(temp)
    ) i! h+ U! t+ m6 H. T
  39.         {
    ! G9 ]. i7 @% h8 u: B. S
  40.                 temp = 0;1 l: y; a# }! v0 f* D5 k
  41.                 while(--temp);//等待系统稳定5 t$ a: \% N; \
  42.                 RCC->CFGR &= ~RCC_CFGR_HPRE;//AHB 不分频 == SYSCLK9 A. f. U5 D2 x2 T; I
  43.                 return SUCCEED;3 Z9 K& W, Y4 B' n! A
  44.         }/ z5 _' N! y7 u; ?
  45.         else0 u" ?5 [# j" E. \
  46.         {  c6 P) p7 x; h2 E$ n1 y. N
  47.                 return FAILED;
    - F2 E# u& E+ p+ F; y# {
  48.         }        
    " J0 u6 D: [% C2 t& P
  49. }
复制代码

! ]( \% h% ?' M. g
! r3 ^$ ^7 R% r* s

然后就配置结束了,通过定时器验证确实为170MHz。

+ L7 Y) h& f7 G% R8 _, W( h

" q, p! S( F3 [& h0 w, H

附录:RCC寄存器
2 t4 O% r2 Z  O# Q2 y6 e$ }7 Y% s3 C, l% m1 Q

最后:

# L; w. q9 i% v3 i9 t) u) D/ n
附上本人写的寄存器配置,方便个人配置,要啥直接删注释就好:


1 O2 K, y3 K* o. q9 ]

  1. //================================RCC->CR========================================* Z5 U# n7 y6 T  B* T; e
  2.         RCC->CR |= 0                //default: 0x0000 00630 M, Y2 f, E3 ], n- W' {- O0 o
  3.         //        //RCC_CR_PLLRDY                //bit25【read only】:        PLL Ready" T/ g; I. ]& [1 J' S2 A
  4.         //        |RCC_CR_PLLON                //bit24: 使能PLL。
    7 ^0 h8 @* ~7 F5 Y0 z" A" V0 ~
  5.         //        |RCC_CR_CSSON                //bit19: 时钟安全系统使能。0 OFF ; 1 ON
    ! A4 t6 ]% s8 g* x' k& d" c) |% k; f" o
  6.         //        |RCC_CR_HSEBYP                //bit18: 0 HSE晶振不旁路        1 HSE晶振旁路
    / f2 @. i& Q, r& y
  7.         //        //RCC_CR_HSERDY                //bit17【read only】:        HSE Ready
    ; K* L. C% m5 V9 n4 A
  8.                 |RCC_CR_HSEON                //bit16: 使能HSE
      {7 c6 `5 I8 {* n( S; ^
  9.         //        |RCC_CR_HSIRDY                //bit10: HSI16时钟准备就绪
    : T6 f/ T  J7 b
  10.         //        |RCC_CR_HSIKERON        //bit09: 停止模式HSI是否启动
    - ^8 B2 P) U5 W+ A% ~# O& r
  11.         //        |RCC_CR_HSION                //bit08: 1 HSION   0 OFF
    $ Q& W, A3 ^* M! L: ?% o1 K# i, I# M
  12.         ;7 Q9 n9 l4 N% S  O  L

  13. 0 s2 w9 `7 x" g2 y. K
  14. //================================RCC->PLLCFGR ========================================3 ^/ a6 _+ `! N- |
  15.         RCC->PLLCFGR = 0                //default: 0x0000 1000
    ) `- |/ ^# h  K# U
  16.         //        |RCC_PLLCFGR_PLLPDIV        //bit31-27[4:0]: P 分频 给ADC用- ^" d% D8 s/ D* P* E
  17.                                                                 // 00000: PLL “P” clock is controlled by the bit PLLP
    - f  R: J2 b$ F( m' F5 o: Z$ w: d
  18.                                                                 // 00001: Reserved.0 A$ r* ^2 X/ u. \8 ^" N; i, k
  19.                                                                 // 00010: PLL “P” clock = VCO / 2
    - h' W6 a/ J- t- W* Q
  20.                                                                 // ....  h$ q/ {! j& Y- `% H4 N
  21.                                                                 // 11111: PLL “P” clock = VCO / 31- X1 i: y$ e& r6 G
  22.         //        |RCC_PLLCFGR_PLLR                //bit26-25[1:0]: 锁相环R 分频
    - s: {9 j5 S! a+ [* ?
  23.                                                         ///        // 00: PLLR = 2$ W7 N, _+ r) G# `2 q8 B( |
  24.                                                                 // 01: PLLR = 4- c4 ~4 P  @& j; s! @# H
  25.                                                                 // 10: PLLR = 6
    7 G$ M$ H/ W8 n1 a9 d
  26.                                                                 // 11: PLLR = 8( Y) C' V" k( j" T; P2 w4 H
  27.         //        |RCC_PLLCFGR_PLLREN                //bit24: PLLR使能; l9 p8 {0 G/ k+ p% ]0 J
  28.         //        |RCC_PLLCFGR_PLLQ_0                //bit22-21[1:0]: Q分频,USB用。分频参数与R分频一样
    " G+ F1 i- ^5 Q, D/ A$ ~: N% }% Z
  29.         //        |RCC_PLLCFGR_PLLQEN                //bit20: PLLQ使能
    ! s- M! ]) E. t( l' J) ^% b1 I
  30.         //        |RCC_PLLCFGR_PLLP                //bit17: P 分频- ~, U' T$ ^+ A$ `5 w/ I% I
  31.                                                                 // 0: PLLP = 7
    & V2 ~% k$ ?% [+ B' N
  32.                                                                 // 1: PLLP = 17
    0 R) v" K2 \' b0 h
  33.         //        |RCC_PLLCFGR_PLLPEN                //bit16: PLLP 使能
    " {1 w3 a7 ~% w9 J# }- q4 y: e
  34.         //----------------------- VCO = 280MHz9 D- A. ^7 F4 F" U/ \; D, [
  35.                 |(70<<RCC_PLLCFGR_PLLN_Pos)//bit14-08[6:0]: PLL的倍频 不能小于8
    , f6 {& Y3 D7 E& P
  36.                                                                 // 0000000: PLLN = 0 wrong configuration" J6 @1 e0 U. q6 d/ b2 {
  37.                                                                 // 0000001: PLLN = 1 wrong configuration
    - R0 r$ v* r$ E- }$ X
  38.                                                                 // ...
    4 q' {$ n3 l  J. F& L
  39.                                                                 // 0000111: PLLN = 7 wrong configuration
    ! Y" C* O# d- _. O
  40.                                                                 // 0001000: PLLN = 8
    5 ?: W" b. U( ^/ t' q% i8 a
  41.                                                                 // 0001001: PLLN = 9
    / {! a3 S+ O" D( T, R7 q
  42.                                                                 // ...8 T; l2 G2 Z2 k" w6 G* s
  43.                                                                 // 1111111: PLLN = 127) M$ A. p8 @8 e& l4 B
  44.                 |(1<<RCC_PLLCFGR_PLLM_Pos)//bit07-04[3:0]: PLL初始分频
    . ^7 u+ x3 @/ }, b
  45.                                                                 // 0000: PLLM = 18 T* e; ]' e* R9 j* H0 X
  46.                                                         ///        // 0001: PLLM = 25 F/ F8 d% x9 f( _
  47.                                                                 // 0010: PLLM = 3
    - z) @/ I+ e/ e6 b
  48.                                                                 // 0011: PLLM = 4
    ! m; p. m" t( d# s3 q
  49.                                                                 // 0100: PLLM = 5+ R6 k$ w& T3 a* r8 h( y! m- J/ C
  50.                                                                 // 0101: PLLM = 68 h% R. Y- e& s6 T2 s
  51.                                                                 // 0110: PLLM = 7. b2 I9 ]0 j9 w% o" y  F+ s# g% R
  52.                                                                 // 0111: PLLM = 8
    ' t# `. b' V# o
  53.                                                                 // 1000: PLLSYSM = 90 K7 D, I/ s' I  h, P4 s
  54.                                                                 // ...5 T2 c: F9 [8 t1 v6 P; r/ W
  55.                                                                 // 1111: PLLSYSM= 167 M" a) `8 N' d0 D% x
  56.                 |RCC_PLLCFGR_PLLSRC                //bit01-00[1:0]: PLL时钟源选择。
    " M( m) q3 L/ Z% c4 g* I
  57.                                                                 // 00: No clock sent to PLL0 g! G$ X  k+ c; H! `6 q* j) M) `
  58.                                                                 // 01: No clock sent to PLL! f7 _, V$ m6 c" W
  59.                                                                 // 10: HSI16 clock selected as PLL clock entry$ V9 a  c3 a+ y' L0 }+ r, S
  60.                                                         ///        // 11: HSE clock selected as PLL clock entry
    ; y+ Q  H) W/ J) Q: c
  61.         ;
    7 B* C5 N1 U5 g" |" |5 h% p, x6 [

  62. 9 D0 {9 v0 [0 h( O2 s( E8 B
  63. //================================RCC->CFGR========================================! S) }" ]+ B8 s7 }
  64.         RCC->CFGR = 0                        //default: 0x0000 00057 N0 T. ]- |. c) m! U% F3 E
  65.         //        |RCC_CFGR_MCOPRE                //bit30-28[2:0]: MCO输出时钟分频) B! `2 M1 A2 @& B- k3 }8 W
  66.                                                                 // 000: MCO is divided by 1
    7 N+ E& \9 E2 |6 \, a8 {
  67.                                                                 // 001: MCO is divided by 2
    ' v. a" s* E3 h+ h
  68.                                                                 // 010: MCO is divided by 4
    % Y) E# X% o( c/ w- g& T1 a/ j
  69.                                                                 // 011: MCO is divided by 8
    7 ^( N) W  O! O4 F7 d4 \. F
  70.                                                                 // 100: MCO is divided by 16
      Q1 q8 u4 H' b  Q3 \* w, T' T% Q
  71.                                                                 // Others: not allowed% @7 }3 a6 W1 [6 g3 \4 M3 A4 x
  72.         //        |RCC_CFGR_MCOSEL                //bit27-24[3:0]: MCO输出时钟选择
    9 m7 ^' v' K% J$ R0 b
  73.                                                                 // 0000: MCO output disabled, no clock on MCO: C: v. Z$ A+ m6 [: b3 C! r
  74.                                                                 // 0001: SYSCLK system clock selected
    & i' H$ x6 K# N+ U
  75.                                                                 // 0010: Reserved, must be kept at reset value
    ' J0 `. ]2 `" F) u4 U: N, r
  76.                                                                 // 0011: HSI16 clock selected  u: Y7 a2 c7 d" c5 @& O3 x
  77.                                                                 // 0100: HSE clock selected
    % }- S! g- D0 o3 Z$ v" j
  78.                                                                 // 0101: Main PLL clock selected
    2 R: D$ e5 X" ^6 q7 ^
  79.                                                                 // 0110: LSI clock selected
    7 `; w# L$ ?8 g2 Z* b+ d, g
  80.                                                                 // 0111: LSE clock selected1 {1 H  g# x( c: R$ h( O3 J0 B% z
  81.                                                                 // 1000: Internal HSI48 clock selected% P$ ?; c2 W% D' m- O
  82.                 |RCC_CFGR_PPRE2_DIV2        //bit13-11[2:0]: APB2预分频$ Q3 h- l  W* u  G3 R
  83.                                                                 // 0xx: HCLK not divided
    5 w( b1 s, k' D# ~# O
  84.                                                                 // 100: HCLK divided by 2
    5 I# C2 k5 ^% {1 }
  85.                                                                 // 101: HCLK divided by 4- B& }8 v0 e% h; H/ y$ Y" _9 u' n; t
  86.                                                                 // 110: HCLK divided by 8, }3 M' }/ k7 ?3 m
  87.                                                                 // 111: HCLK divided by 16
    7 O# `8 Q2 c, C# X( u
  88.                 |RCC_CFGR_PPRE1_DIV4        //bit10-08[2:0]: APB1预分频1 o4 p7 w* x/ Z) P* J7 X
  89.                                                                 // 0xx: HCLK not divided- w" M4 `* D8 _  v
  90.                                                                 // 100: HCLK divided by 2
    ) o1 j+ f8 Z0 c' ^/ ]* s% [
  91.                                                                 // 101: HCLK divided by 48 I2 g% \/ T! |7 J5 [& l' [& F0 T7 X/ k# H
  92.                                                                 // 110: HCLK divided by 8
    9 }( Z  q  R- i6 e: T
  93.                                                                 // 111: HCLK divided by 16
    , t3 C% Z2 J; ~" O8 A+ @" O
  94.         //        |RCC_CFGR_HPRE                        //bit07-04[3:0]: AHB预分频(改变core电压之前应该先查看这些时钟频率)
    1 g1 o1 y: w$ W4 G8 o0 C) J& [$ f
  95.                                                                 // 0xxx: SYSCLK not divided
    ' }% P3 d) z' J) \1 @
  96.                                                                 // 1000: SYSCLK divided by 2" |4 F+ W+ [7 P" E! k
  97.                                                                 // 1001: SYSCLK divided by 4" s$ R9 y9 y" ~5 e/ X! z2 a* N  V
  98.                                                                 // 1010: SYSCLK divided by 8
    - U* O: G% s- s3 E
  99.                                                                 // 1011: SYSCLK divided by 16
    # _* ~4 Z" u9 N) I2 J$ M/ u
  100.                                                                 // 1100: SYSCLK divided by 64
    4 P- p& u' \' G  ]
  101.                                                                 // 1101: SYSCLK divided by 128
      K) _. Y3 L! N1 Y! ~3 s
  102.                                                                 // 1110: SYSCLK divided by 256
    3 P( P9 l! E9 y- R' [( I6 ^# k2 |
  103.                                                                 // 1111: SYSCLK divided by 512
    " E( L8 z, }9 _3 W3 C8 k7 }
  104.         //RCC_CFGR_SWS                        //bit03-02[1:0]【read only】:系统时钟源选择状态,该位与SW对应。, w2 w+ `4 e1 X/ A
  105.                 |RCC_CFGR_SW                //bit01-00[1:0]: 系统时钟源选择。' q. ~- l2 }  w7 c. D' [0 D9 X, |
  106.                                                                 // 00: Reserved, must be kept at reset value
    8 o7 [6 ]7 ?: K0 C
  107.                                                                 // 01: HSI16 selected as system clock, v$ H" |# @7 ?. l( n9 y
  108.                                                                 // 10: HSE selected as system clock4 y& @5 [' }% E8 \0 R
  109.                                                         ///        // 11: PLL selected as system clock' M# Q3 ^# K- i8 ~; c' G
  110.         ;
复制代码

下面是RCC寄存器:

! @8 V! o0 Q1 ^

6 ?, j* B, f2 A8 T: B
  1. void RCC_Init(void)
    ) M) [$ n1 M7 D4 u; s* A: v( \
  2. {
    - E0 O. e6 q) |0 h: {8 B
  3.         //--------------------------------------------------------------------------------------//9 c, L5 A, L0 g( _5 a! _8 l
  4.         //---------------------------------------- AHB1 ----------------------------------------//5 O) b; X9 d$ {% q/ K
  5.         //--------------------------------------------------------------------------------------//4 s7 n0 e$ o/ f, _6 V
  6.         RCC->AHB1RSTR |= 0                        //default: 0x0000 00007 W3 [: T  U1 P6 P- _% Q
  7.         //        |RCC_AHB1RSTR_CRCRST                //bit12# }3 \; x  G$ ], u5 p. @  K! a/ V9 ?
  8.         //        |RCC_AHB1RSTR_FLASHRST                //bit08
    ( U' g! R" N0 m* h' W
  9.         //        |RCC_AHB1RSTR_FMACRST                //bit04& m5 v9 j* N4 ~/ L9 B/ K- s# U1 d
  10.         //        |RCC_AHB1RSTR_CORDICRST                //bit031 z+ q2 @* ~* }& |+ b+ m- v
  11.         //        |RCC_AHB1RSTR_DMAMUX1RST        //bit02
      O4 \  F; _3 R5 [- T- o
  12.         //        |RCC_AHB1RSTR_DMA2RST                //bit01
    3 p  r" R& {# L. |7 ?& m
  13.         //        |RCC_AHB1RSTR_DMA1RST                //bit00
    & z) C- [2 I$ @3 j" }! O$ d
  14.         ;
    ' R+ Q4 x; O; \' c; |
  15.         RCC->AHB1RSTR &= 0xffffffff        //default: 0x0000 0000' c5 v# _6 ~3 t
  16.         //        &~RCC_AHB1RSTR_CRCRST                //bit12
    ' ~2 h' m9 v  K6 e8 F" t
  17.         //        &~RCC_AHB1RSTR_FLASHRST                //bit08/ n( P2 T* V4 ?* f# h+ L5 X4 n6 y# A
  18.         //        &~RCC_AHB1RSTR_FMACRST                //bit04
    7 d; z7 p6 D) F$ y0 T
  19.         //        &~RCC_AHB1RSTR_CORDICRST        //bit03
    2 W9 d8 d* O* e5 ~* c
  20.         //        &~RCC_AHB1RSTR_DMAMUX1RST        //bit02
    * X9 d5 d- O  h
  21.         //        &~RCC_AHB1RSTR_DMA2RST                //bit011 j/ @3 E/ _: G3 l4 q# y& l
  22.         //        &~RCC_AHB1RSTR_DMA1RST                //bit00
    1 i, k* O5 j/ ]5 Q, X# ]0 P
  23.         ;1 b, G1 x5 E* }! {; c$ X
  24.         ( ]$ ?# y  C8 i
  25.         RCC->AHB1ENR |= 0                        //default: 0x0000 0100
    6 M6 e" B3 I) i+ j7 g
  26.         //        |RCC_AHB1ENR_CRCEN                        //bit12  `2 H( I2 s+ T4 f) d
  27.         //        |RCC_AHB1ENR_FLASHEN                //bit080 y' f2 A2 t" D( }* C0 S( W
  28.         //        |RCC_AHB1ENR_FMACEN                        //bit04
    # i& C$ I. j  y) }6 z: o
  29.         //        |RCC_AHB1ENR_CORDICEN                //bit03
    5 y0 n& \% M  e7 s8 ]
  30.         //        |RCC_AHB1ENR_DMAMUX1EN                //bit02) q5 n7 ?; ^* Y& [" a) D
  31.         //        |RCC_AHB1ENR_DMA2EN                        //bit01) q! t+ g7 ~9 f
  32.         //        |RCC_AHB1ENR_DMA1EN                        //bit006 M" Y6 t" C  H* }
  33.         ;, D( r' G8 K  v1 ]) ~
  34.         //--------------------------------------------------------------------------------------//
    8 I# j2 J; r3 T$ y- P3 R
  35.         //---------------------------------------- AHB2 ----------------------------------------//0 C( Y8 u- ?# G, _6 j- N$ L6 D5 d
  36.         //--------------------------------------------------------------------------------------//! _! v+ [+ v% r$ j/ i6 V
  37.         RCC->AHB2RSTR |= 0                        //defualt: 0x0000 0000# u4 T. }2 y8 `: p
  38.         //        |RCC_AHB2RSTR_RNGRST                //bit26
    5 x3 K- y+ L% f: ~2 c
  39.         //        |RCC_AHB2RSTR_RNGRST                //bit24
    0 C' g1 c9 ?* }0 c" N
  40.         //        |RCC_AHB2RSTR_DAC4RST                //bit19
    0 F- |/ x) _, H  `! N3 _+ r$ j
  41.         //        |RCC_AHB2RSTR_DAC3RST                //bit18
    $ d6 Y" @" @) Q. W% K1 Y) V
  42.         //        |RCC_AHB2RSTR_DAC2RST                //bit17
    5 ~8 ^2 F! o  Y! t
  43.         //        |RCC_AHB2RSTR_DAC1RST                //bit164 |7 l& a/ t, t8 N
  44.         //        |RCC_AHB2RSTR_ADC345RST                //bit14$ C5 W, W/ K- m! X' J- q
  45.         //        |RCC_AHB2RSTR_ADC12RST                //bit13; Q# G7 k& R: ]* Q& K  a8 t+ z$ X
  46.         //        |RCC_AHB2RSTR_GPIOGRST                //bit06
    ; u/ W% b+ p# P; `1 T5 t7 a! o
  47.         //        |RCC_AHB2RSTR_GPIOFRST                //bit053 S/ E' C$ p5 E" L
  48.         //        |RCC_AHB2RSTR_GPIOERST                //bit047 {0 a4 o2 d' O
  49.         //        |RCC_AHB2RSTR_GPIODRST                //bit03+ E5 H- Z# t  W' j, H
  50.                 |RCC_AHB2RSTR_GPIOCRST                //bit02
    / p! Z. X& Y( e* f5 R
  51.         //        |RCC_AHB2RSTR_GPIOBRST                //bit01* J6 x5 u6 W; r. n
  52.         //        |RCC_AHB2RSTR_GPIOARST                //bit00
    ! I3 i7 F% K3 ~, @. D+ x1 s
  53.         ;: [3 O% a! p+ s$ L( V
  54.         RCC->AHB2RSTR &= 0xffffffff        //defualt: 0x0000 0000
    ) ]& _! F5 e, G7 N, P) P
  55.         //        &~RCC_AHB2RSTR_RNGRST                //bit264 p5 s2 I5 M) X4 [* T' [  A
  56.         //        &~RCC_AHB2RSTR_RNGRST                //bit24
    4 e( W. A" B6 d6 b  R
  57.         //        &~RCC_AHB2RSTR_DAC4RST                //bit19
    ( t9 y/ S( Y2 @' T, c8 N. z
  58.         //        &~RCC_AHB2RSTR_DAC3RST                //bit18
      M2 p+ w3 C5 v/ q
  59.         //        &~RCC_AHB2RSTR_DAC2RST                //bit17
    6 _' c, L/ _0 k' F
  60.         //        &~RCC_AHB2RSTR_DAC1RST                //bit16
    1 ]! c2 I6 G( Q  E  h- K! |: \+ V
  61.         //        &~RCC_AHB2RSTR_ADC345RST        //bit144 r4 h0 D3 ]9 b$ e' U
  62.         //        &~RCC_AHB2RSTR_ADC12RST                //bit13
    9 W3 M' g8 q- z8 o$ [# }6 ~
  63.         //        &~RCC_AHB2RSTR_GPIOGRST                //bit06
    * L/ T& N. M. c7 I! F) d
  64.         //        &~RCC_AHB2RSTR_GPIOFRST                //bit05
    + ]% D  D, y4 z& G
  65.         //        &~RCC_AHB2RSTR_GPIOERST                //bit04
    * I; o8 J, o2 W! d/ w& U/ n
  66.         //        &~RCC_AHB2RSTR_GPIODRST                //bit03$ ?# a2 S$ v2 ]& @% ^
  67.                 &~RCC_AHB2RSTR_GPIOCRST                //bit02
    . x% e/ w; F6 v3 q* H, F
  68.         //        &~RCC_AHB2RSTR_GPIOBRST                //bit01
    ' g$ q6 N: z  |+ B5 j5 d) K
  69.         //        &~RCC_AHB2RSTR_GPIOARST                //bit00
    : s& w1 Y* C) u7 O+ {! }
  70.         ;
    4 |4 B$ X" `* ]* O9 K1 P7 F# r8 n# D
  71.         RCC->AHB2ENR = 0                        //default: 0x0000 0000
    $ d2 i  C3 h1 y/ E  G
  72.         //        |RCC_AHB2ENR_RNGEN                        //bit26
    ) S: _, T1 i" b# @; [* @9 \
  73.         //        |RCC_AHB2ENR_DAC4EN                        //bit19
    , E- h) D2 i! C) |$ p$ a9 k
  74.         //        |RCC_AHB2ENR_DAC3EN                        //bit18
    % Q$ t; L5 {  g! y* s- |9 o. B3 j  c2 o/ `
  75.         //        |RCC_AHB2ENR_DAC2EN                        //bit17: d1 R4 H5 N/ ^9 {
  76.         //        |RCC_AHB2ENR_DAC1EN                        //bit168 c: d* Z0 A  ]2 P& w6 f
  77.         //        |RCC_AHB2ENR_ADC345EN                //bit14
    $ x5 j, I/ ~2 w5 M9 l& ~% ^( A
  78.         //        |RCC_AHB2ENR_ADC12EN                //bit13
    ! L, _! i# B& U1 Q
  79.         //        |RCC_AHB2ENR_GPIOGEN                //bit06
    7 T- z3 `) `, r7 c1 a8 e, l
  80.         //        |RCC_AHB2ENR_GPIOFEN                //bit05
    9 q( c1 B+ E: U+ u7 Y, ]6 ~
  81.         //        |RCC_AHB2ENR_GPIOEEN                //bit04
    9 e' B+ p8 h; u+ H
  82.         //        |RCC_AHB2ENR_GPIODEN                //bit03, ?9 D' u/ Z) G# X
  83.                 |RCC_AHB2ENR_GPIOCEN                //bit022 n, Y: ]( g$ F8 N- ~9 k: D$ Q
  84.         //        |RCC_AHB2ENR_GPIOBEN                //bit01
    ) `* n: }# w$ h! X: a
  85.         //        |RCC_AHB2ENR_GPIOAEN                //bit00* a9 x8 E. g" D' |8 E/ u0 l2 Z
  86.         ;! M3 i- U$ V) \/ J# |$ a* r& u
  87.         //--------------------------------------------------------------------------------------//' a  `, ^  f2 F! o/ ~3 \5 L2 U
  88.         //---------------------------------------- AHB3 ----------------------------------------//6 i1 n4 m% L: ~7 A
  89.         //--------------------------------------------------------------------------------------//8 c* t7 m5 Z  g
  90.         RCC->AHB3RSTR |= 0                        //default:0x0000 0000, j% V# w0 |- M2 `3 W: m2 c
  91.         //        |RCC_AHB3RSTR_QSPIRST                //bit083 w2 c& ^8 n& v2 f; k) ^
  92.         //        |RCC_AHB3RSTR_FMCRST                //bit005 v6 a7 i. Z+ K9 }. V* x
  93.         ;  f6 D) \! \5 Y
  94.         RCC->AHB3RSTR &= 0xffffffff        //default:0x0000 00000 Q# _; c' `, M
  95.         //        &~RCC_AHB3RSTR_QSPIRST                //bit08
    6 C4 s6 Y* @' q1 X
  96.         //        &~RCC_AHB3RSTR_FMCRST                //bit00/ K3 L$ h" ^. k6 F9 P
  97.         ;  Z9 G# j6 t) C2 m" e) q

  98. # P- }2 C; z* A8 y$ D" j2 {
  99.         RCC->AHB3ENR |= 0                        //default: 0x0000 0000  a3 `- f$ Z0 i" d0 l- E' f
  100.         //        |RCC_AHB3ENR_QSPIEN                        //bit08
    5 X: H$ V7 n( X; L9 n
  101.         //        |RCC_AHB3ENR_FMCEN                        //bit00
    , V" `( z: z$ w* A
  102.         ;5 Z0 d* ~& m% H  U) {' P. |  h
  103.         //--------------------------------------------------------------------------------------//4 \, i% d: |, B
  104.         //---------------------------------------- APB1 ----------------------------------------//
    , ]; G7 ]& M# [" F6 N' ^! t0 J0 _$ h
  105.         //--------------------------------------------------------------------------------------//
    $ P5 z9 y6 e+ U% ?  G7 J
  106.         RCC->APB1RSTR1 |= 0                        //default: 0x0000 0000
    9 C* q5 d4 q1 [+ u0 Y1 {/ _( \7 l, i
  107.         //        |RCC_APB1RSTR1_LPTIM1RST        //bit31
    + W' j% _8 X( h- z& ?% D/ e
  108.         //        |RCC_APB1RSTR1_I2C3RST                //bit30
    / e( Y( Y% I2 p9 m& ?- b9 V4 A9 E3 H' h
  109.         //        |RCC_APB1RSTR1_PWRRST                //bit289 J% k, p9 O# S$ @, v' }
  110.         //        |RCC_APB1RSTR1_FDCANRST                //bit25
    / l% c3 n  O/ A& R/ U7 L
  111.         //        |RCC_APB1RSTR1_USBRST                //bit23$ |7 x2 \  n. w$ h6 r" A' b
  112.         //        |RCC_APB1RSTR1_I2C2RST                //bit22! V; h( @5 n: y& G, |/ G. B2 U) g0 [
  113.         //        |RCC_APB1RSTR1_I2C1RST                //bit21
    3 a' d, f/ G) _0 \- ?
  114.         //        |RCC_APB1RSTR1_UART5RST                //bit206 F/ u7 L  s; q- I
  115.         //        |RCC_APB1RSTR1_UART4RST                //bit19
    2 P. t- X% g+ b. W% S1 V; N
  116.         //        |RCC_APB1RSTR1_USART3RST        //bit18
    ) p6 ^: d' j. N- K/ _' H
  117.         //        |RCC_APB1RSTR1_USART2RST        //bit177 H1 B' ^) k+ o( w
  118.         //        |RCC_APB1RSTR1_SPI3RST                //bit15
    3 p% \" b/ s5 l. v% R9 H" R
  119.         //        |RCC_APB1RSTR1_SPI2RST                //bit143 n6 W" [2 k2 n1 T; b1 V# Z
  120.         //        |RCC_APB1RSTR1_CRSRST                //bit08
    7 @9 O! E. k- V) h
  121.                 |RCC_APB1RSTR1_TIM7RST                //bit05/ R3 d' x/ |$ N5 f8 Q7 U
  122.         //        |RCC_APB1RSTR1_TIM6RST                //bit04
    . L$ r  X1 t6 {- j$ P; s" P/ x. @
  123.         //        |RCC_APB1RSTR1_TIM5RST                //bit03
    ) `9 ]/ M( _6 }, P& l8 V8 s. {
  124.         //        |RCC_APB1RSTR1_TIM4RST                //bit02
    7 n0 u3 _2 Y- M3 S0 r' _8 y- C
  125.         //        |RCC_APB1RSTR1_TIM3RST                //bit01: L, e, `1 N: E! z( B
  126.         //        |RCC_APB1RSTR1_TIM2RST                //bit00
    : J5 D. U/ H5 }3 g
  127.         ;
    0 j- {* V: W2 S1 n# A
  128.         RCC->APB1RSTR1 &= 0xffffffff//default: 0x0000 0000
    * d3 M* @! L& I; A' G9 a
  129.         //        &~RCC_APB1RSTR1_LPTIM1RST        //bit31. s% ~9 m- o0 W$ A9 [+ K4 k
  130.         //        &~RCC_APB1RSTR1_I2C3RST                //bit30$ q4 d5 \- W3 U! S0 a9 D) D5 H
  131.         //        &~RCC_APB1RSTR1_PWRRST                //bit28  v7 `4 i2 E0 c) N
  132.         //        &~RCC_APB1RSTR1_FDCANRST        //bit254 _+ b- }1 u2 G- q6 t
  133.         //        &~RCC_APB1RSTR1_USBRST                //bit23
    , s& ]% W/ y9 j% a# D" X# _
  134.         //        &~RCC_APB1RSTR1_I2C2RST                //bit22: F- d# p2 S+ M5 d/ V
  135.         //        &~RCC_APB1RSTR1_I2C1RST                //bit21
    $ Z3 @% H" {) U& t- R# \4 E) h% I
  136.         //        &~RCC_APB1RSTR1_UART5RST        //bit20
    - M+ M& `  R6 k' H) w. B; Q* ]
  137.         //        &~RCC_APB1RSTR1_UART4RST        //bit19
    6 _5 n8 O; S- X  l) r1 t  h5 o
  138.         //        &~RCC_APB1RSTR1_USART3RST        //bit18
    4 `) w' ]  @$ M! W- p% J+ w8 c
  139.         //        &~RCC_APB1RSTR1_USART2RST        //bit17
    0 N1 d! n) f1 c* I' d
  140.         //        &~RCC_APB1RSTR1_SPI3RST                //bit15! Y+ E* q( Y) C7 F
  141.         //        &~RCC_APB1RSTR1_SPI2RST                //bit14
    5 v* d" q. I5 v: q! {
  142.         //        &~RCC_APB1RSTR1_CRSRST                //bit082 E0 q9 y3 \; s3 I1 J' {4 O
  143.                 &~RCC_APB1RSTR1_TIM7RST                //bit05  G' e0 n( c8 |& k% P6 r) [
  144.         //        &~RCC_APB1RSTR1_TIM6RST                //bit04
    ; \( U1 j3 Q, y; q4 Y3 N
  145.         //        &~RCC_APB1RSTR1_TIM5RST                //bit03
      r8 B: v0 s- Z8 u4 ?& M
  146.         //        &~RCC_APB1RSTR1_TIM4RST                //bit02
    ( o  M' x# w, T: `3 p
  147.         //        &~RCC_APB1RSTR1_TIM3RST                //bit010 Z& n0 P- u. J, ~
  148.         //        &~RCC_APB1RSTR1_TIM2RST                //bit00
    ( J2 c$ E* }3 n- r- o
  149.         ;
    3 q, U( K  y: @
  150. 9 S5 p+ ?3 r0 L( B
  151.         RCC->APB1ENR1 |= 0                        //default: 0x0000 0400
    " D4 V& k! ^6 [& X6 N$ W, z
  152.         //        |RCC_APB1ENR1_LPTIM1EN                //bit316 u2 V' S5 h4 H) d' b$ R: o/ }+ h& j
  153.         //        |RCC_APB1ENR1_I2C3EN                //bit30
    6 y1 q7 B$ X- D. {3 N% ]# d
  154.         //        |RCC_APB1ENR1_PWREN                        //bit28
    # n( |0 P+ ?. Z
  155.         //        |RCC_APB1ENR1_FDCANEN                //bit259 Z* F; s% ?" }! Y' f
  156.         //        |RCC_APB1ENR1_USBEN                        //bit23
      S+ i2 @; d: C5 u1 Y2 R" D
  157.         //        |RCC_APB1ENR1_I2C2EN                //bit22
    % c6 t' Z& Q/ g; j" F" s# R. F
  158.         //        |RCC_APB1ENR1_I2C1EN                //bit21" k: p/ @* i/ [, p  u$ T
  159.         //        |RCC_APB1ENR1_UART5EN                //bit20
    9 O9 ?/ L( G& C" u4 k) B- O
  160.         //        |RCC_APB1ENR1_UART4EN                //bit19. N' g; E6 Q, f; Q9 \5 Q
  161.         //        |RCC_APB1ENR1_USART3EN                //bit18( D% ~& d+ q/ O- y: C
  162.         //        |RCC_APB1ENR1_USART2EN                //bit172 V9 n# ?2 X# z. E& K4 F
  163.         //        |RCC_APB1ENR1_SPI3EN                //bit159 i7 N& D8 z3 b! z/ ^! y  r$ |; J& e
  164.         //        |RCC_APB1ENR1_SPI2EN                //bit14) B. l, H" G' r7 C7 R
  165.         //        |RCC_APB1ENR1_WWDGEN                //bit111 _3 T2 L8 d+ B
  166.         //        |RCC_APB1ENR1_RTCAPBEN                //bit101 y" ]" o) \% e  K3 F+ L+ B
  167.         //        |RCC_APB1ENR1_CRSEN                        //bit083 G, P2 Q, ~3 x4 }
  168.                 |RCC_APB1ENR1_TIM7EN                //bit05
    % ~- w- p  m$ e) `* ^, b! J
  169.         //        |RCC_APB1ENR1_TIM6EN                //bit04& C8 e( x0 I( @  l' G
  170.         //        |RCC_APB1ENR1_TIM5EN                //bit03& y: _. l' R. f) g% E5 L0 \9 B* ]
  171.         //        |RCC_APB1ENR1_TIM4EN                //bit02
    7 w; f# J# e  d! c
  172.         //        |RCC_APB1ENR1_TIM3EN                //bit01
    $ c- N4 R, Y) W' O5 k# Z
  173.         //        |RCC_APB1ENR1_TIM2EN                //bit00( n+ B/ w( g* G7 Q& [  {
  174.         ;
    ! L( F) |) b4 u. j  e. W( Q
  175. " a+ g4 ^$ q& T3 O* x0 r; V1 k- p
  176. ( N, U3 Z# P, _+ ^0 P% c- Y3 U. G
  177.         RCC->APB1RSTR2 |= 0                        //default: 0x0000 0000% U$ {/ W/ L" W9 f9 [! ~4 N+ {
  178.         //        |RCC_APB1RSTR2_UCPD1RST                //bit08
    % k, e5 J9 `% p- Z" [* V
  179.         //        |RCC_APB1RSTR2_I2C4RST                //bit01
    2 K# @( N4 \. j' n
  180.         //        |RCC_APB1RSTR2_LPUART1RST        //bit00
    / v( z8 [& B, F( U/ n+ H# ?! o
  181.         ;! f1 s: V. c% ?* T/ _
  182.         RCC->APB1RSTR2 &= 0xffffffff//default: 0x0000 0000. v! B8 E  J' r  U' H
  183.         //        &~RCC_APB1RSTR2_UCPD1RST        //bit08, f& }: @, j5 m# A
  184.         //        &~RCC_APB1RSTR2_I2C4RST                //bit01
    ! \% M; c( w2 a2 {0 A4 B
  185.         //        &~RCC_APB1RSTR2_LPUART1RST        //bit009 R( W3 c5 ?& R: s
  186.         ;
    ' A- q( C: [& s' U3 S
  187.   \" W" k3 N' v8 P& S
  188.         RCC->APB1ENR2 |= 0                        //default: 0x0000 0000
    0 o: ]8 I% s% y; G3 _
  189.         //        |RCC_APB1ENR2_UCPD1EN                //bit08
    6 n# [; {; P0 l9 S
  190.         //        |RCC_APB1ENR2_I2C4EN                //bit01# s5 W# }  d1 e& `; k
  191.         //        |RCC_APB1ENR2_LPUART1EN                //bit00( J, R9 N% r3 }
  192.         ;
    ! O& _1 V1 C* L( _. q  c
  193.         //--------------------------------------------------------------------------------------//. X" }7 w* E; q0 t' A# \1 O
  194.         //---------------------------------------- APB2 ----------------------------------------//: x' }' u$ c( k: A' C4 Z# k5 N4 [
  195.         //--------------------------------------------------------------------------------------//
      U% e( ~5 ~2 p7 k7 h; u
  196.         RCC->APB2RSTR |= 0                        //default: 0x0000 0000- E- @. D+ W4 z; p0 H
  197.         //        |RCC_APB2RSTR_HRTIM1RST                //bit26' A: n7 O4 T, n3 ~& S) }
  198.         //        |RCC_APB2RSTR_SAI1RST                //bit212 x- U0 Y: @7 E( y" [4 [
  199.         //        |RCC_APB2RSTR_TIM20RST                //bit209 O$ B( h( ^1 @1 s( J7 K
  200.         //        |RCC_APB2RSTR_TIM17RST                //bit18
    ) b7 W* D, F4 w/ Y
  201.         //        |RCC_APB2RSTR_TIM16RST                //bit17
    ; {* j' ]9 A2 C& t. F- m3 r. B! F
  202.         //        |RCC_APB2RSTR_TIM15RST                //bit16
    3 v  u9 z# [/ Q& A
  203.         //        |RCC_APB2RSTR_SPI4RST                //bit15
    " W5 D/ w7 e  z1 g; n$ N3 ]3 Z
  204.         //        |RCC_APB2RSTR_USART1RST                //bit146 d/ V+ ?2 `* B; @8 Q9 t* `
  205.         //        |RCC_APB2RSTR_TIM8RST                //bit13. C' t3 e% S+ j% [& J2 a/ u0 W
  206.         //        |RCC_APB2RSTR_SPI1RST                //bit12
    + |! W6 u+ W2 |6 D
  207.         //        |RCC_APB2RSTR_TIM1RST                //bit11
    # a: E, \. _, U: ]9 V% X
  208.         //        |RCC_APB2RSTR_SYSCFGRST                //bit00
    7 A1 ?: j, ~9 f/ O1 D) g7 u
  209.         ;0 |: U( M( W7 @; [- K) m
  210.         RCC->APB2RSTR &= 0xffffffff        //default: 0x0000 00007 o( w7 B/ `% ~7 c, N# M
  211.         //        &~RCC_APB2RSTR_HRTIM1RST        //bit26/ B" ]" F6 Y. d8 ]5 F
  212.         //        &~RCC_APB2RSTR_SAI1RST                //bit21. K, L+ j  c2 W
  213.         //        &~RCC_APB2RSTR_TIM20RST                //bit20: |' q" c; t& D# Y. B. i& p
  214.         //        &~RCC_APB2RSTR_TIM17RST                //bit18
    5 e* U1 A% s5 O) S- Q
  215.         //        &~RCC_APB2RSTR_TIM16RST                //bit17
    0 `5 f7 F( m5 W& f0 X5 c) R
  216.         //        &~RCC_APB2RSTR_TIM15RST                //bit16$ [; ?) E$ G9 M* U4 G9 U
  217.         //        &~RCC_APB2RSTR_SPI4RST                //bit15
    7 t9 y$ m" y, D
  218.         //        &~RCC_APB2RSTR_USART1RST        //bit142 G4 Q, [$ ^% u
  219.         //        &~RCC_APB2RSTR_TIM8RST                //bit13
    - G9 v! R3 k: s6 X) D' j7 a, I
  220.         //        &~RCC_APB2RSTR_SPI1RST                //bit12
      o! L% g  ?; c4 C
  221.         //        &~RCC_APB2RSTR_TIM1RST                //bit113 \3 W. @* `/ t7 c- }* w$ j* K: E. m
  222.         //        &~RCC_APB2RSTR_SYSCFGRST        //bit00. ?  L7 }5 f' f! W& x/ h
  223.         ;
    ( q- X3 h# `# i7 e# c# \! V3 \
  224. $ P# h2 g- x2 q( W' j2 J/ i% O
  225.         RCC->APB2ENR |= 0                        //default: 0x0000 0000
    5 j* U9 w6 b1 ?0 m9 @( t. `
  226.         //        |RCC_APB2ENR_HRTIM1EN                //bit267 S- h( Q  w! N( Z3 n* P
  227.         //        |RCC_APB2ENR_SAI1EN                        //bit21
    ! a# \5 M# @5 Z, Z; ?5 n
  228.         //        |RCC_APB2ENR_TIM20EN                //bit207 Q6 \7 o# j3 D9 ^( S0 D
  229.         //        |RCC_APB2ENR_TIM17EN                //bit18$ }" @* ?" c% X4 g/ O
  230.         //        |RCC_APB2ENR_TIM16EN                //bit17
    5 u1 w2 A/ e: L7 M, D1 W- y" c  E
  231.         //        |RCC_APB2ENR_TIM15EN                //bit16
    # y  Z# s$ F% x& D. }  {& g6 S
  232.         //        |RCC_APB2ENR_SPI4EN                        //bit154 U6 [2 v% D$ F; H
  233.         //        |RCC_APB2ENR_USART1EN                //bit14" Q# {/ E3 \! I& }
  234.         //        |RCC_APB2ENR_TIM8EN                        //bit13
    7 |8 X" e' W& O9 t% t* K6 L: z
  235.         //        |RCC_APB2ENR_SPI1EN                        //bit12) ]# ~; c, U+ R5 f" {: E/ h$ }' \
  236.         //        |RCC_APB2ENR_TIM1EN                        //bit11
    # o1 R9 [& U6 j3 T+ k5 d- Q) O
  237.         //        |RCC_APB2ENR_SYSCFGEN                //bit00
    3 y) Q0 K& u. f& J# f& g& ]' O: D
  238.         ;" @0 I0 V% b4 u2 O, x: E$ |- t
  239. }- h! m: U5 A, ~/ I: L0 Q
复制代码

6 U; }$ F4 }' _+ i' ]' c1 k. M, t0 w8 b$ H( e! A: Y+ j0 Q8 p3 Z
* _& c$ w. d! M

$ V0 K/ s! w8 Z; ~/ Q  W
4_meitu_4.jpg
收藏 评论0 发布时间:2020-9-18 10:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版