首先说明一下芯片内部并没有时钟, 而是内部振荡。$ S" o) G2 C) e. j5 z' o8 ]9 A9 O9 B
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。6 K( `2 b: R5 w! l' c% I# H
书归正传 直接开始配置
8 M5 u: t$ q5 [0 E5 Y& \5 R- t5 V1 Y9 y" |' [" G' N
打开任意keli工程
3 a! w2 \3 \# y3 U2 F
b* M3 ?( D0 p. Y" c v
7 K/ F% G* v" `
& b7 \6 D! P2 w% q% Z# u
打开system_stm32f10x.c
! F5 G0 Y" g, _ D& O7 ~ `1 ^; _ V5 d' y& r" F
$ E& g: t) q+ |: w2 P2 ~7 Z- N$ ~' M+ H: Y; f2 b8 `" d
找到systeminit函数 全部注释掉* P7 h' L" V6 _2 A% t: W
4 @7 d, p, {$ B
8 s& O( b _9 j
1 W2 I3 F* A& |) u3 N0 N* c ?+ m然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)8 R& r: e# i4 R( C! f0 w3 ~
3 J" R* t+ m6 q4 B( s9 S, ~/ D2 k直接替换就可以用了
4 J- I9 }. M0 \- #define USE_HSI 1 // 是否使用内部晶振 0 不使用 1使用! v# S6 Q: s: h) p6 U3 y
- void SystemInit ( void )
" O) v1 p, t( O- s! k - {) `; G+ R0 M! I, c
3 ]2 q; e, Q$ G4 k) O& R2 G- #if USE_HSI+ G& G' i3 @# ?. n+ c
- {
4 y6 A$ E. _" y4 L, J8 v! h3 t - //设置使用内部晶振
% U! ~. l0 C( b' B+ {+ p1 G1 }, Z - /* 开启HSI 即内部晶振时钟 */
# ]% ]( o" Y% l |/ f - RCC->CR |= ( uint32_t ) 0x00000001;, C7 t$ Y# }# k+ ^2 p$ ]- F7 R/ c
- /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
: |6 K7 g% a7 I* R - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
2 U0 W' c+ W* }) O/ b. l - /*PLLCLK=8/2*9=36MHz 设置倍频得到时钟源PLL的频率*/9 k5 f% Y* v# k/ a0 L, w6 m
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6; //设置倍频后的频率. M1 M' s! P. H3 E
- /* PLL不分频输出 ?*/
$ L( E) Y; u( ^9 D& o - RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
) h# [: ^6 B! j+ }( {5 w. b& S - /* 使能 PLL时钟 */
b3 }# E" }, o0 E1 @ - RCC->CR |= RCC_CR_PLLON;9 Q' z3 m, |' q
- /* 等待PLL时钟就绪*/, M$ Q* h7 R1 V8 z; a5 h8 d; B
- while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )$ _9 l; E0 W2 I5 ?- |1 L; N7 P
- {) a; J+ t1 t( l$ x, ~6 ?
- }
2 i' U, Y! U7 { - /* 选择PLL为系统时钟的时钟源 */% u( v8 v$ S3 n! }1 S5 {2 v
- RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
6 P0 u0 M# D- ^1 D - RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
9 W( D( S) E% C, P - /* 等到PLL成为系统时钟的时钟源*/: i/ c! X- m* m9 C2 G( i) V
- while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )
5 p( L9 a, h$ H5 C- P2 W/ @ - { }9 @' {4 u% c3 h2 _% U, G! N
- }
4 K. v2 Y& a. H& o% @3 R1 X - #else
' C* }0 A$ l, [ - {7 x& o6 z2 d+ e& V, e9 U5 v
- //设置使用外部8M晶振
6 G: q A- a3 C* V - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */( N& k/ ]& l" o2 i6 v0 ?* f# O7 |6 _
- /* Set HSION bit */( M% W1 L/ ?/ h3 G4 _/ r
- RCC->CR |= ( uint32_t ) 0x00000001;% ?& G' w# W7 S6 N8 |, k4 z4 H
# s( e4 @* S, J6 Y3 }1 H- /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */8 n8 z" l. Y2 ?- U* _3 r+ N
- #ifndef STM32F10X_CL
& S0 g# ^6 _$ q( l! ]0 p - RCC->CFGR &= ( uint32_t ) 0xF8FF0000;3 w8 K7 {4 |9 A2 o+ d
- #else
/ w# P. x1 {* x4 F ]4 T/ O7 C2 n - RCC->CFGR &= ( uint32_t ) 0xF0FF0000;2 P4 |; B9 a8 O$ T3 B
- #endif /* STM32F10X_CL */) E0 ]6 _/ I% ~" ~
- : i; v" m/ ]; k+ B5 x( k+ y3 A
- /* Reset HSEON, CSSON and PLLON bits */
. ?3 Y* O6 m6 |) R - RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
! Y1 f! u/ y4 ?$ ~/ D5 \' O - * p/ V7 Q3 f P' I4 F7 A2 b
- /* Reset HSEBYP bit */
g' Z3 z6 I2 D$ V. c - RCC->CR &= ( uint32_t ) 0xFFFBFFFF;3 m# u7 D+ S" q7 q; \
9 u* f5 m i8 e z, B$ n6 L- L- /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */; ~0 U% C( D# `$ I# G' {
- RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;
8 T( V( l; v6 `; V6 i& m' \3 _ - E W6 E! I+ o& J' Y' y/ u
- #ifdef STM32F10X_CL; V" h( w a- H* g2 i* b. J/ h
- /* Reset PLL2ON and PLL3ON bits */
) A+ Q9 @1 G" Q: t - RCC->CR &= ( uint32_t ) 0xEBFFFFFF;! D$ H4 x9 p3 S9 d
( R+ \9 d" I1 t! u5 a- /* Disable all interrupts and clear pending bits */
! i- x) z) ]5 U) P, n0 M - RCC->CIR = 0x00FF0000;+ P- W) n, a/ A
( C6 V. e) A" A. v- /* Reset CFGR2 register */& B P! {5 U! w2 R* O1 P+ N6 `& O6 ]
- RCC->CFGR2 = 0x00000000;
5 K" I5 s% S6 C* [6 J6 Q4 O0 Z2 M - #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
" n+ H! [$ v2 @8 W - /* Disable all interrupts and clear pending bits */
& w* Q" Y. }4 \6 L6 p& s f2 J - RCC->CIR = 0x009F0000;
# P& a+ x0 r) P1 a" B8 g - 6 }8 m- V# b$ w
- /* Reset CFGR2 register */
, [) ~1 R1 U4 p; L( p' n - RCC->CFGR2 = 0x00000000; Z: T" K9 Z8 R- J; D7 T
- #else( F' f1 u# m6 d9 m' w' g) O
- /* Disable all interrupts and clear pending bits */
^$ {2 _7 H3 `% C' P - RCC->CIR = 0x009F0000;% |, E! e) N7 G' o( ]$ Q( v
- #endif /* STM32F10X_CL */
' r$ _+ G& M! @- s. W( t- S
4 @9 E2 U$ W; G5 l- #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL); H/ F* d1 o+ Q# G
- #ifdef DATA_IN_ExtSRAM
% K) r3 t$ n8 [$ S9 E' N' o) g; R - SystemInit_ExtMemCtl();
# \ @ I. i% q- L - #endif /* DATA_IN_ExtSRAM */& a* ]5 _6 C4 s( E8 _0 D
- #endif
" X a$ B4 S* L' N, y - + _7 I. W! v/ j& W. W5 q# Q
- /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */* }0 ~1 B! ? k( _3 u: C w4 Z0 o
- /* Configure the Flash Latency cycles and enable prefetch buffer */
) U/ W+ n+ |3 m" L' n - SetSysClock();& M l+ \% C/ Z9 m* i m
- - `9 p# ?* e- K5 J0 H2 A
- #ifdef VECT_TAB_SRAM
8 [2 Q/ J9 Y4 K' e/ I8 H - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */# e2 y5 D7 V _+ X7 Z: @
- #else1 Y' c; p, t3 w
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */6 E0 X& T3 f: x! d0 u& Q V% S
- #endif# p3 Q) h4 l5 x: t: Q& y
- }
( P# y% f: p: t C7 N8 V+ K9 y
. X, Q4 d' _' m/ ^7 w. M: T$ o- #endif
# L2 L6 X/ r) s2 Y, e$ h" m - }% e7 }$ v* ], L- [8 u' j K& ?3 Q2 w& g
复制代码 6 z8 s) ?) G) w; n
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
' y1 ?! i5 u+ q5 z————————————————
7 L+ R8 g) ?# L$ ]5 d8 y, ^+ z版权声明:文某95 j. P9 x' j) J) L5 h9 V2 I5 x0 t
如有侵权请联系删除
8 y, h4 _0 n: ]9 @! ~2 b/ v( U: R* _. ?. C1 u
# L/ k m" o4 v! f+ ~& r) P; g% _ |