一、STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。
8 P. A$ Q4 O" p E/ U' z- v' N ①HSI振荡器(RC振荡器)时钟是高速内部时钟,一般很少使用,因为精度没有外部高速时钟(晶振)那么高: D2 E3 k9 ]/ ~8 t% i9 n! o
$ b' F% |7 F5 Q, z! _4 r0 C, ]) l. K
②HSE是高速外部时钟接石英/陶瓷谐振器,或接外部时钟源,频率范围为4MHz~26MHz,M4开发板是8M . w W9 j! N3 D/ i; K
! `- w) ^0 g; l( a1 R7 F
③LSI是低速内部时钟,RC振荡器,频率为32kHz提供低功耗时钟。主要供独立看门狗和自动唤醒单元使用。3 Y# s7 F- H3 J
; W. i& y* b7 O, z
④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。用于驱动 RTC 时钟 (RTCCLK)
! N* q4 A3 K7 x2 y# q5 |3 R+ M$ I( q1 I' W( s
⑤PLL为锁相环倍频输出(倍频时钟)。STM32F4有两个PLL:
~7 R" d! e, W; a7 Q
- b2 l$ {$ h1 R 1、主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。
- K+ D* ~0 P, ]- I; @8 o* l2 X$ v: k4 J, e; A
第一个输出PLLP用于生成高速的系统时钟(最高168MHz)
5 F. r# p9 t' W, C+ A; z; q$ g" K! w
第二个输出PLLQ用于生成USBOTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。7 G/ r' ^# A. c4 {, l
% N x4 F% D. o( M: J" @' V4 {
2、专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。$ p$ D* U! U; f" s
& y4 R2 g% k8 o S8 A# A- ^' {9 u
二、系统时钟SYSCLK可来源于三个时钟源:
- W7 M9 D) i4 X7 C# O: h% \4 ^! I ①、HSI振荡器时钟/ e- t" V, F$ {( c( a- y9 b
2 Y& y0 e( Y' P/ e' b/ S. x2 m ②、HSE振荡器时钟" r* I. W. @9 ?- s9 }1 R# d
& u0 x. d, d- @8 P
③、PLL时钟
) C8 S4 L- k" ~- X3 ]
$ N- z# K \6 o' `5 C5 Z三、时钟树
9 ?) G" ?# a2 ?9 P7 L% i0 _3 t! y L% t0 y9 a; c
8 T' B5 u* F% V9 [. D$ ~* c
" C% X. \; R7 L, R8 {+ b
+ K2 m/ V3 W4 R1 W% N" D3 o; t u( u( q* X8 c4 {3 [3 T: u2 D; q, l* {0 g
四、开发板与系统时钟频率不匹配,如何修改?; S5 y" o! |6 I( R, h- B& _
5 f. K) Y5 t1 V0 O) E# K
- //1.查看汇编文件 startup_stm32f40_41xxx.s的第177行
9 ^6 K& J4 s' G7 H
2 |1 f K: y: h6 J; N$ L/ P* T- Reset_Handler PROC // 复位中断执行
# F) i0 h' S. y# Z, U0 i% o4 q; l9 T - . M+ |) y( v4 X' |3 T& @
- EXPORT Reset_Handler [WEAK] // 复位中断执行
( }$ e7 d8 n" n# N6 l( I" U- o
" B! m' p- p" ^, I- IMPORT SystemInit // 系统时钟初始化的入口
4 U1 l/ U; c1 N7 W$ [# j) p
y. `8 u1 }! @- IMPORT __main
( G# \( K+ M4 |# E0 `) T - LDR R0, =SystemInit // 系统时钟初始化
y4 _# q& d! i5 j, ~0 m( O
, Q+ Z! d5 b2 \- BLX R0
/ M* M( k$ J4 J: a - . S' G9 R2 h# i8 `$ R7 N
- LDR R0, =__main // 启动main
( _5 L" a; S; O8 M - ' W( o3 c$ O3 f
- BX R0
, k1 e2 m; T7 ]7 ?7 J
, }8 G3 m# s+ x6 L2 u! h- ENDP
! p& v9 S) {$ U: S9 z9 o G
7 g6 X+ i$ {* C- J
9 u, K, o0 Y! x2 ~7 L0 g+ \/ `1 j- //2.查看system_stm32f4xx.c的第252行开始
( ?% Y( U& \! Y6 F4 Z7 K2 s - 4 m* d }. u' c7 \8 _' ~ R
- PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N. {. W$ Z( F% \( H' ~5 e
- & B3 O3 W, ^2 J% }4 o8 C1 V& E
- PLL_VCO = (8000000 / 8) * 336. \3 n, ]6 k' V7 p' P% R
- % l* |, g" B7 |
- & _6 B: X9 I' O4 @
- //计算公式:SYSCLK = PLL_VCO / PLL_P = 336*1000000 / 2 == 168000000 == 168000KHz == 168MHz
复制代码
' N7 V+ \) K0 G; Z3 w* P: w& `, Q4 ?; e+ w2 _5 S9 C: P
- 修改:system_stm32f4xx.c第254行# s1 f7 f5 m$ ]" Z& k% V
7 v. f9 i j5 C6 q9 s Z- #define PLL_M 25# l. ?; G0 K; E4 q, D
- [3 ]' b( g$ ]' M# K6 J' U- 修改为:
- d% `8 d- p% ]0 P) v6 I) f2 v
. j" E# p# H5 E2 V, [4 h- #define PLL_M 83 c& Z' a3 q6 u8 r8 f
- l+ ]: h$ `: ^$ p) M) _. n- 修改 stm32f4xx.h第127行$ ?# P6 I2 c- ]7 M$ U
! E/ o1 _0 ]$ q' w- #if !defined (HSE_VALUE)6 J) _7 g P' P ~4 r7 J; C. g$ x
: _# W U4 ]3 {+ y6 Q- #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */1 P \& R |5 d& x! U1 @3 @
" Z: O# ^$ L( L2 v# Y x7 G- L8 ]* j- 修改为:1 _$ v* B- P# U) G0 G
1 D% P) f% p" I& I- #if !defined (HSE_VALUE)
' a X' V' ~# F1 s3 p& D: `
) f; i V* }# O- D- #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz *5 m+ Q' M3 X9 {5 I
- : m$ l+ p. Y/ }. q/ }9 e
- (如遇到无法修改:权限问题:)点击名字那里能看到路径,找到.h修改权限
k$ {/ z2 p8 H
2 J0 M. f8 C* y- ( A I) Z) a9 n: q
2 ~$ Y6 ]: A, J x8 @7 t- 根据文档了解我们的开发板的总线时钟频率:; P1 S. m# a( [9 Q& Z, H
4 e) {' m8 v1 q, g$ j- {4 E- 系统时钟频率:标准频率为168MHz0 D' s5 B! ~3 Y: E
9 y+ x* A: B9 n, {. o. P6 Y0 ~. V, w- AHB时钟频率:168MHz$ c1 t2 k& p9 | W9 P
- , A0 y1 P7 V! X- I, K
- APB1时钟频率:42MHz, @8 b: F- S4 L1 W6 Z6 [
; Q2 s$ N6 L* i* g- APB2时钟频率:84MHz
/ p8 C+ R1 j( v0 B: F! W! L) W6 r3 }# c - " \$ f+ T. S# H1 e8 I7 W; K2 v
* h0 }. b$ x' f) ]# p* }% p
7 m/ V0 j' a" \- 超频:提高cpu运行的时钟频率。
3 g. E+ V; D/ b - ) n u7 C% k L( G, K) T! T/ O6 ?5 M
- 调节PLL_N为432;6 @7 Q" `! P* e& Q- @* b f, S
) c' I* h- Q; o* @/ L& {- 降频:降低CPU运行的时钟频率。
% t8 j# n4 p5 L1 E7 b5 Y4 u5 P2 T
2 H6 T, [& B J, i) K7 _- 调节PLL_N为168;, O2 F: Z) e) x6 B9 ]" }# j3 p
) _6 d0 G+ g( S
复制代码
5 X& {+ ?; k; K# {1 T |