首先说明一下芯片内部并没有时钟, 而是内部振荡。" M& p/ L( h; X
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。
7 N. [; Z6 }- m6 J* ~: G书归正传 直接开始配置
0 N0 c8 p7 Z% f' v& X/ C; q& S2 H* F" W4 Y& v& v8 v; T( L
打开任意keli工程2 K3 ]- ^. ]2 u: f# ~
) S7 B' A5 [0 i: \5 Y, K
, ?$ |( s# O. E( g% q* S
- e$ C: t+ ~/ ]
打开system_stm32f10x.c
9 ]7 T0 O& ~# R* o" `5 l. m6 e2 \$ x
! ]' Z; G: U7 o) w
- A$ H; y5 \# Q6 U7 }7 P2 S
找到systeminit函数 全部注释掉
) o2 I- n$ e- B
4 H5 e/ K! {3 }6 o- @/ [5 g' U6 c
' p9 C9 X( l3 n4 g4 @) g8 Q! S: W4 _4 j4 F6 X7 L5 a
然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)8 `7 s) i* `( H( g9 |- o. g0 U/ a
7 N4 c- h+ G6 j; d
直接替换就可以用了
; b& y6 O4 R) j# ]) K- #define USE_HSI 1 // 是否使用内部晶振 0 不使用 1使用
* l8 u! E8 O! ? - void SystemInit ( void )
! E2 P( t1 c) H+ v0 L - {
; ^, H1 \2 `; s- R - P- {8 |. x. i1 {+ g/ s3 J
- #if USE_HSI$ A6 X2 s/ i; J! Y" F" P
- {
2 u8 Z, M q& x4 ` - //设置使用内部晶振5 z/ C% G, u1 ^! s3 v
- /* 开启HSI 即内部晶振时钟 */
5 T( l' Q q9 o: }" B - RCC->CR |= ( uint32_t ) 0x00000001;
* W, N- x: B9 B9 E$ S( V - /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
; n( K; _+ a' N# a0 h) m! v - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
9 b4 X# l* s; X- |2 P% E8 ^ - /*PLLCLK=8/2*9=36MHz 设置倍频得到时钟源PLL的频率*/
. \% s6 c' ?* `0 o) S: [. J4 w4 S4 A( i - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6; //设置倍频后的频率. t4 C9 f! p9 x: E2 ^9 i
- /* PLL不分频输出 ?*/6 i& m" g$ l9 ~+ W6 ^+ `* r. G, G
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
6 U' ]: v5 e* o x - /* 使能 PLL时钟 */
9 t0 N. Z) h. |1 A - RCC->CR |= RCC_CR_PLLON;+ S; t- Z6 `* B4 u8 o
- /* 等待PLL时钟就绪*/$ M% i, ~4 g& D0 ~6 v6 f$ c- k
- while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )
- N* U5 K) W9 j# I) ^ - {
7 R$ c7 u4 S4 u" P0 ?' k - }9 i% e B8 G! r3 L/ Q
- /* 选择PLL为系统时钟的时钟源 */
- C8 D( @# V5 K' ~! j+ L- C - RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
# W# ?. H+ q H( t, @) `" G - RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
& G5 A/ ^, Y0 i7 x - /* 等到PLL成为系统时钟的时钟源*/+ J& Q) W8 x7 z9 y
- while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )
2 a% Q& H, B. k" @5 L - { }+ f8 {* b8 S5 R2 k7 O9 I/ n
- }7 V* Q) r& T7 Z X# T
- #else0 y( Z6 U9 G, j2 W1 M
- {3 y9 u, t* @- j s# `
- //设置使用外部8M晶振
2 j7 @9 e4 S' j+ V! ]$ L. k8 I - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
: \0 S2 }3 D( h - /* Set HSION bit */! c6 h) f' \' I% t
- RCC->CR |= ( uint32_t ) 0x00000001;6 r$ S) s3 l, E# Y
1 t) Q R& H6 X0 B% C4 E, U" c8 t- /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */) g5 Y& `# w9 X- N! |
- #ifndef STM32F10X_CL
4 a8 t. ` @% U+ c9 l - RCC->CFGR &= ( uint32_t ) 0xF8FF0000;' a9 d- [+ }$ }6 S" A( o& q+ R
- #else
1 a# e. O$ y6 `$ t( F! c - RCC->CFGR &= ( uint32_t ) 0xF0FF0000;
8 e2 e% K, l' c b/ Q- K# A3 B - #endif /* STM32F10X_CL */
7 [$ a9 g! e, i4 X - - x: ?* s( P& u8 z8 E9 }
- /* Reset HSEON, CSSON and PLLON bits */! \2 P1 O* z( m) {) \
- RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
$ z' r2 W9 r; M. e6 |0 i) o - 8 C$ O& ^6 F+ X& o* A$ [# U( t) |
- /* Reset HSEBYP bit */* \$ ^: u$ o* Y" G" y* D6 @
- RCC->CR &= ( uint32_t ) 0xFFFBFFFF;
, A) o$ `2 G. z- Q
: M0 G4 A v; M* o5 W2 ~9 q% N7 q- /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
# Q) ?7 t# L9 T7 m& u - RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;; b* G; x4 y, A' [ A7 L4 B, a
- 9 v' W( E4 Z/ D! ^ E
- #ifdef STM32F10X_CL
6 o4 Q/ e) U+ |. Y7 p0 z - /* Reset PLL2ON and PLL3ON bits */
) J) ? M5 q5 K1 r9 ? - RCC->CR &= ( uint32_t ) 0xEBFFFFFF;* `4 M4 o0 |% [2 Q2 o' q; B
- 5 B2 I" K9 n5 ^
- /* Disable all interrupts and clear pending bits */
7 d( R7 H# \, K0 U+ _8 u - RCC->CIR = 0x00FF0000;
# }% u; W5 Y7 ]
* K f+ ~' U/ k. M$ T3 k- j- /* Reset CFGR2 register */
) t' v0 n8 m$ |7 |6 K - RCC->CFGR2 = 0x00000000;
0 v9 C* x% d* L H9 H H - #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)+ q6 R# w1 C) I" J8 K
- /* Disable all interrupts and clear pending bits */
4 @; `- @6 b, s3 N2 V- {" h - RCC->CIR = 0x009F0000;
3 X; w* Z2 R y! t% e - $ |9 K: \" b9 ~9 s
- /* Reset CFGR2 register */
+ f8 y |9 I2 `% S7 ] - RCC->CFGR2 = 0x00000000;4 R1 w6 Z, Z( A$ Q( z6 }. R
- #else9 r0 y/ y2 ?+ B" X/ x! }1 j& w2 y
- /* Disable all interrupts and clear pending bits */$ J8 D- I; f( B& B: J
- RCC->CIR = 0x009F0000;
) `5 @( r8 G0 |3 a8 P6 |! E4 J$ } - #endif /* STM32F10X_CL */& w9 ?, X0 X1 r4 N5 }. k
- 1 l2 v4 r* k7 ~/ |9 w( f
- #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
1 ? P( \( r& ]7 K- } - #ifdef DATA_IN_ExtSRAM X& K# o7 V* v
- SystemInit_ExtMemCtl();
- _1 a4 q- r6 ~' o - #endif /* DATA_IN_ExtSRAM */
8 t, W- e( h9 ~ i: M( k) ^0 Q: u/ v - #endif
, ^$ D3 n( m% P2 X1 Z; o1 |& O& x
! m$ q/ s; z0 H" B$ n/ Q' }- /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */; s1 c& `) W) F. s1 [, @* P" y
- /* Configure the Flash Latency cycles and enable prefetch buffer */$ x8 b% q3 z# q& u' M
- SetSysClock();
7 n( |" r% X$ e" W5 ]1 a4 P - & J: J! P5 j% \8 w! A
- #ifdef VECT_TAB_SRAM
) }. T1 t( s4 P" f4 E4 i - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */3 C8 e' e1 X; V5 P! X$ g
- #else
2 f; w$ J7 M) f+ O - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
: _( b0 D% b. Q" }8 d - #endif
/ Z/ V9 ]% U0 G4 u - }- B6 L4 ?4 v8 @8 l+ D _
- 6 _8 q {- n) w/ Z) |9 c6 }3 r5 Y" n
- #endif y2 r* C4 ]- P) F" q C3 V e
- }, S Q$ p9 |0 ?& x! M/ f& p
复制代码 4 q; z% V* v+ Y9 M1 d4 ~
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试% g7 H4 t$ f& O1 ]" f8 [
————————————————3 b0 U# N2 m! N) P) u) U
版权声明:文某9
7 h4 r" @) z" K6 v9 C4 c/ ?/ D9 k如有侵权请联系删除
8 g* F v" m0 v) x- r. ?9 O) H* G; t6 h( d m
, G. p' T. ~6 A; `; Q- l
|