首先说明一下芯片内部并没有时钟, 而是内部振荡。! d. g! J3 B) Z3 L
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。! \/ g( g% Z, }* q0 Y9 q3 H
书归正传 直接开始配置
- O6 V* {. T# M. b, V
- Z! L4 ?4 \0 |& B打开任意keli工程
- f- {- M& I# m- ^0 R1 d* p
1 R3 ~) b; E0 I# h; \
! b* J9 {- J% d( ?+ P
/ E/ \8 M( X- `- n: v) ^* f打开system_stm32f10x.c& Y9 a, n& T8 u: [+ \$ {
' f# i3 ^" q) @/ G: V5 V7 }
3 Q4 b7 Y1 J# g8 C! D$ L( b
, o. G3 v) u7 { u3 E* H2 V$ h% A" R) n找到systeminit函数 全部注释掉' l+ E! F: W. R
% x: _% ~# E! @. h7 S
2 @6 t+ Z8 r$ L7 w# u3 c6 d3 J
0 T+ c' q3 }! H$ W% A$ ]% K/ l2 O$ h然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)
0 p! {+ a0 i- p& L3 `: |( b3 c
5 ]6 z: k$ I7 f/ N: U7 V直接替换就可以用了
8 o3 P7 F T T6 l- #define USE_HSI 1 // 是否使用内部晶振 0 不使用 1使用) X2 ]1 k* w- \$ I) R) }( f
- void SystemInit ( void )$ F% j" n7 d3 j" E1 F' b
- {
6 f9 g- Y# E3 N, L% q+ u6 g' h- r - 4 u1 e) ]* }* P" x& l7 S7 w
- #if USE_HSI
0 I# M$ ^1 c9 t' Z - {
( S# R+ i- ~% r! T3 w! w - //设置使用内部晶振; s& B) U4 P; o( A3 j7 j
- /* 开启HSI 即内部晶振时钟 */$ `$ g6 V: x+ Y6 H( g" P
- RCC->CR |= ( uint32_t ) 0x00000001;1 c( S- J" J, a7 k$ x+ a: q6 X
- /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/ B' A9 C# _4 N6 Q+ R
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
" Y) Q7 U7 d: x - /*PLLCLK=8/2*9=36MHz 设置倍频得到时钟源PLL的频率*/
1 c: r6 B$ {7 |$ W! q$ e1 T0 L/ n+ k - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6; //设置倍频后的频率9 {* [) P& K! [. G
- /* PLL不分频输出 ?*/
( r5 t7 r4 ?$ W* A# s) j- @: k - RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;* y& E h {' _, I; {% L* S
- /* 使能 PLL时钟 */5 _' n, Y% H- q0 O7 q- T
- RCC->CR |= RCC_CR_PLLON;
( c& U' G1 V7 e8 F. ], V3 v - /* 等待PLL时钟就绪*/
* u* Q* w0 }1 M/ P0 t. F) ^ - while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )
+ U) ~% I$ i( ] - {
) i4 [8 O; ^) x M - }% |" U$ C6 n& C0 ^- N
- /* 选择PLL为系统时钟的时钟源 */
m# p; s! I5 I- l - RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );8 G! L" U; w5 l
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;2 Z" g+ I: `& E2 R0 a! u2 E/ _
- /* 等到PLL成为系统时钟的时钟源*/
+ m: ~* V( ~( O/ S8 o; `, i - while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )- h' a. K( {& m$ o' {+ J5 ~( u# j
- { }
. I0 W9 z$ y) R1 Q: F - }8 M! H( R/ ~" v
- #else- ^& u: M, |' Y: \% T
- {2 R. G ?7 k; I5 v. `8 ?6 i
- //设置使用外部8M晶振& I+ x. L% i1 G6 I7 E3 F
- /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
/ Z3 E; x) Z6 d" b: V8 E8 u( Q8 S - /* Set HSION bit */# k/ l: K* {* g6 Z6 ]- M
- RCC->CR |= ( uint32_t ) 0x00000001;: r0 M- {. {/ D6 f6 j6 w
- 5 R& N* I- N# J" X0 o
- /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */- z, y% I2 B, f6 E& A' C. E
- #ifndef STM32F10X_CL
$ `$ B3 L! [2 ^% F( l) i - RCC->CFGR &= ( uint32_t ) 0xF8FF0000;* T! f1 }& Y/ f6 y
- #else0 O5 b& `" C6 d, E' w- [
- RCC->CFGR &= ( uint32_t ) 0xF0FF0000;: U9 c. ^; ]! d" |
- #endif /* STM32F10X_CL */
9 E: O. j" C& d' f- ~1 ]
% d/ g5 L+ u8 Z2 |- /* Reset HSEON, CSSON and PLLON bits */' R3 V0 s1 ^& ?% f: I
- RCC->CR &= ( uint32_t ) 0xFEF6FFFF;# e8 h1 s$ k9 n3 z* ^* k. A
6 G8 \5 y& r& p: @- H2 C1 n- /* Reset HSEBYP bit */4 A* }, j f9 j5 C' @3 P
- RCC->CR &= ( uint32_t ) 0xFFFBFFFF;8 U/ u" u: m% W3 Z6 O) T( q
! R ~; M2 c" [6 r9 K' h- /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */: L4 N0 y0 T K9 S8 \
- RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;& \* B5 p0 y/ a, |4 W! b
- ' l& d6 i1 @% P& H" G4 G
- #ifdef STM32F10X_CL
9 {) P9 G7 S: A" c4 N0 @' t" f - /* Reset PLL2ON and PLL3ON bits */1 {+ f: F9 Y% t5 t, i4 u! A
- RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
0 H9 J- B, Z) K9 t7 r2 b4 F' n - 3 L2 R& ^+ t% {
- /* Disable all interrupts and clear pending bits */% P' C2 \5 R" ^2 Z
- RCC->CIR = 0x00FF0000;
# k4 L$ G& O) P5 h' n
4 W3 d3 ?/ v2 F7 [- w/ y- i9 i- /* Reset CFGR2 register */
0 x/ R- P9 \- M0 B, P4 a' l - RCC->CFGR2 = 0x00000000;
4 h4 ^/ g* K4 t; ^* P% \7 p - #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL): A( y* l7 J7 u* J, L' R* G; e
- /* Disable all interrupts and clear pending bits */
# v' Y/ x" w& L - RCC->CIR = 0x009F0000;& e0 Q. k s' x% b5 [0 X. j! c
- `9 _( D) w% {& J$ O" u+ \' @
- /* Reset CFGR2 register */! \, H/ U9 v) {
- RCC->CFGR2 = 0x00000000;
4 [" B5 o3 \4 N) x - #else- v( ~' o7 T3 O8 P
- /* Disable all interrupts and clear pending bits */
0 H6 x8 m2 d U& ~5 w- x - RCC->CIR = 0x009F0000;5 T* m+ t$ G4 ?/ F
- #endif /* STM32F10X_CL */2 W# h8 Z, t9 H6 A5 [
* a$ N5 [8 b+ a. U! \% G- #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
5 w8 @3 p+ l6 C" b5 X - #ifdef DATA_IN_ExtSRAM
7 G3 @. W# f! o9 x, m3 p - SystemInit_ExtMemCtl();6 \0 s5 B6 X5 E2 ]/ P
- #endif /* DATA_IN_ExtSRAM */
+ J+ B* `2 f; n% K$ \( k( n - #endif
, ` X, x, x) [8 h - ! a: T+ x, ]' [* ]& L" Y, f
- /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */0 k9 o; x. P2 g9 ]! r% e+ ?0 ]0 t
- /* Configure the Flash Latency cycles and enable prefetch buffer */
1 @" S* Z5 f7 H3 |& B2 u4 `+ i) l; k - SetSysClock();
# x/ `0 I# y' E0 \+ E2 x0 P
* y$ O& w% H9 S9 ?- #ifdef VECT_TAB_SRAM8 R6 u7 X2 e8 B7 s" z) i* s
- SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
. G [8 u; p* u$ R6 Q - #else
& z. W" P- J1 i! ? - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */; l d1 A1 Y3 \4 y' w
- #endif' i9 ~1 i! n- R2 r* |
- }. F9 N. _8 X+ X
" \0 E+ V9 T+ x) b. i- #endif
^% x7 Y+ S ] - }
6 f: q0 j- J1 k! X) f
复制代码 9 x# r1 R( b, P, X: `( _# ^
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
$ B* i1 |# T- Z————————————————; q" h% ]- [8 ]; ]( V
版权声明:文某9/ X5 F( N$ ^: g4 u( F
如有侵权请联系删除
- y/ M4 q. B1 _1 U
3 f( b& S7 J2 I
* h$ {5 z5 ^& \: X; \- i% ^; p) G |