首先说明一下芯片内部并没有时钟, 而是内部振荡。
. M2 G ?3 Y& A* Q2 U使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。, f! z2 ^8 A+ f7 R
书归正传 直接开始配置' Q. q3 C# P1 b; Z V
: }# m# i2 C. `: p打开任意keli工程5 k$ z1 D" v% s( E
0 t; C9 _& @+ J: N8 o
: Y |9 n9 W6 ?2 P/ b9 y- ~' y
# \3 m2 u" \% s8 K; V打开system_stm32f10x.c
7 u) v3 A$ Q: G, w' e3 Q* }8 F. n$ i: f
4 O' g2 G3 ^6 N0 k8 W% F0 Z& [; d
: V5 j2 l0 I9 B" V; _7 a9 D( e$ P
找到systeminit函数 全部注释掉
/ @' d# u! z6 {0 ]
6 t" s; D4 N u6 H# _
- m% Q4 S5 ]% O2 c9 t- t: C
- q; b" c" O' c6 ~然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)3 s6 P6 Z6 |( Z9 ?- S
: @* u9 V) f! h直接替换就可以用了
. `3 |) ~6 R j1 k- #define USE_HSI 1 // 是否使用内部晶振 0 不使用 1使用% h" G+ R) l! V% P, `: o' Z0 k. |
- void SystemInit ( void )
( o* H1 a+ K* P! b$ w - {3 g+ |+ V9 m+ O: k1 X, d, s
- % |* L- K/ \) r% w( a' u B
- #if USE_HSI( a: ~) h- K# S |0 k
- {
* x+ M7 a; D9 @5 V: b2 ] L) n8 n& J - //设置使用内部晶振
% c, l9 ~; b/ Q* f( I: X B& u - /* 开启HSI 即内部晶振时钟 */! q2 k$ e, s1 X; r: D+ k* r
- RCC->CR |= ( uint32_t ) 0x00000001;
/ W2 N4 [! D3 f0 n% W - /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/6 W9 p3 e& D2 S- _9 A
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;6 c# A6 S6 {7 ^( A) \6 y7 i5 F
- /*PLLCLK=8/2*9=36MHz 设置倍频得到时钟源PLL的频率*/
6 {9 t( X: I X4 ]% p! ?& D$ e- @ - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6; //设置倍频后的频率5 p, X) y# r& Z7 A* S3 h/ ~) `
- /* PLL不分频输出 ?*/' ]2 H! _ G; B
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
" l }; K p( F+ ?1 L - /* 使能 PLL时钟 *// d( y5 \2 V( @! ]- {5 x4 c
- RCC->CR |= RCC_CR_PLLON;! e7 S( e9 I, }7 c* W* j
- /* 等待PLL时钟就绪*/
# f. @- o9 Z4 L# J2 M% `" o - while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )* x: }$ @* |) [# U: i7 N% ]
- {+ D( G- n- p8 c( G3 A1 \, x
- }/ {7 _9 N' W& o) J
- /* 选择PLL为系统时钟的时钟源 */
; T& S3 g5 Y5 I- V - RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
* w. _9 C0 k# O7 \+ B T y - RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
, |! m T1 @& z - /* 等到PLL成为系统时钟的时钟源*/
* A& {0 b6 p0 C: _" X* H% R - while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )% w( e% E/ X: O
- { }4 I! z% l( r) [0 h. h* Y
- }& k) A: K2 H/ N& b3 P
- #else
- b0 l1 @, S& J+ \" i/ l - {2 K$ G( I2 f6 i. [, G
- //设置使用外部8M晶振1 }. o! t* p* v& w
- /* Reset the RCC clock configuration to the default reset state(for debug purpose) */+ a# p1 \$ \1 {& O
- /* Set HSION bit */0 E6 j3 A# G0 |1 y, t
- RCC->CR |= ( uint32_t ) 0x00000001;& H" Y' K, p: J
- " I& B5 y5 b$ |* c
- /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */6 f2 E: F+ _; N9 s- G `: U; f
- #ifndef STM32F10X_CL
5 v; M# w' p0 w& L& B% o - RCC->CFGR &= ( uint32_t ) 0xF8FF0000;# B+ t: W3 n& E a
- #else
1 h6 h7 Y: D$ L6 l" V$ n6 w - RCC->CFGR &= ( uint32_t ) 0xF0FF0000;, b; c5 O5 y: d0 f5 w' x( g/ ]" o
- #endif /* STM32F10X_CL *// C% P% t8 s: k+ ?$ J, I
- 0 C8 Y! Q+ N c: ~# }8 }
- /* Reset HSEON, CSSON and PLLON bits */
& Z* k- X D7 b9 P - RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
9 a! ^1 z6 G9 |2 ~ - - i3 T2 m. j( m" c# y! }8 p( F: f
- /* Reset HSEBYP bit */& Y8 O7 [0 U0 u$ E
- RCC->CR &= ( uint32_t ) 0xFFFBFFFF;
1 l$ b7 Y' \6 ~$ M4 p# B
7 ]/ C1 b: f! u- /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */9 [" f6 L0 b( Q$ A+ Z' b
- RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;. s0 u9 D. S) n `3 G4 a& T
" d$ \% b" m- i& z( h$ E- #ifdef STM32F10X_CL
/ x/ Q2 K# J" [0 J - /* Reset PLL2ON and PLL3ON bits */
N5 w( \- d3 P$ j - RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
- S6 M2 F7 l6 O9 p) y# {( | - 6 j$ S7 ^: }2 Z/ q/ y) T+ }
- /* Disable all interrupts and clear pending bits */- }& H5 w! C _. V/ V
- RCC->CIR = 0x00FF0000;
3 |* c; T: M1 H, I% l. h - + M4 l- R* U1 ^6 {3 v: X
- /* Reset CFGR2 register */9 X4 \6 X* P& i2 w) x
- RCC->CFGR2 = 0x00000000;
7 v; b& d2 z- } d; W; t9 @ N - #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)' ^8 D: C2 A: g, H6 x
- /* Disable all interrupts and clear pending bits */
% r; n$ Y& \" w5 Y6 J - RCC->CIR = 0x009F0000;& F* {2 e9 S. }
1 N' @" r I$ m' m( t- /* Reset CFGR2 register */
7 T# r) `( g9 J( k$ Y - RCC->CFGR2 = 0x00000000;
1 G4 |/ s5 f$ j0 G - #else0 y- A0 `& `$ @
- /* Disable all interrupts and clear pending bits */! J4 s( e# S' \
- RCC->CIR = 0x009F0000;
( o) v% a/ d5 y9 s' `# P, p - #endif /* STM32F10X_CL */
I+ T2 N# y; o - * b& E" ]4 ^3 M* O8 c: y7 N, B
- #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
1 ~! f+ a8 X# b; g' G# i4 v - #ifdef DATA_IN_ExtSRAM7 q, U5 _- g# l8 S5 U) P
- SystemInit_ExtMemCtl();2 ?# F: W7 X) i7 D% j4 Q
- #endif /* DATA_IN_ExtSRAM */2 p0 {) X5 i# F
- #endif
: x( O+ f% k9 J% s! n - 0 L2 M( n6 V+ i% U
- /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
8 `8 P' w( [4 u& ?6 m) [' O - /* Configure the Flash Latency cycles and enable prefetch buffer */
g6 z, P- |6 [4 C - SetSysClock();
1 |$ b% m1 o- v* J* f
. t, l5 T1 {+ h3 g* p- #ifdef VECT_TAB_SRAM$ Q* ?1 D1 f; h9 S/ q* U
- SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */. M, o. _! e: w j2 M
- #else
; L$ `* _, I2 B6 d0 _ - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */7 c, J5 L1 \* |9 Z: y% m
- #endif
# Y: g8 g# {& O$ K2 ~+ Z - }, |! N: w" H: D
" p& a( m, T! a- |$ F- #endif2 y! y2 X) Y, T" I0 `
- }
/ K$ J9 J: U* ~0 `$ _" v* U/ c
复制代码 7 j% D& K. J+ c3 ^, }: \3 [
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
/ }( }9 G4 z- k; l) B/ ^4 |( {————————————————. `% z& j$ ]1 v% g8 A
版权声明:文某9
; X2 E9 ?, S* U. X; l. ]如有侵权请联系删除
8 z( J+ i- e6 G o- `' }5 J
% D9 B/ e0 r( S9 v6 j) j
6 ^; E! K, I6 q/ {% ]+ m |