首先说明一下芯片内部并没有时钟, 而是内部振荡。
6 k: y$ r2 `5 S7 @- I使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。
4 I' F4 I; K1 B/ }3 R书归正传 直接开始配置+ S) |) c# E* ^4 M- e; r
4 n8 g2 y ~5 z) D" w) C8 _/ c打开任意keli工程
" J1 g& r, V2 o4 h6 v1 p/ y% }% w
: b5 W M" V. @* }6 P2 p; R/ i
- L+ R! [+ x) `( Y打开system_stm32f10x.c
4 L& m% {4 Q7 Z/ F9 g# w$ C9 G9 w
$ S& u7 ]/ u) U6 ]# O* S9 i
. c6 ?+ J/ Z( ^2 U2 a! y: f7 w& H3 a找到systeminit函数 全部注释掉! D0 Z$ J: O; [& H' E
* U4 ~ D |- s
6 t/ j% j5 {- @$ i/ {
- I7 S* ^* O' L' i6 t# U& H
然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)
% \+ D! D! H$ d4 q: q, q/ ^ U2 r2 O
直接替换就可以用了: \/ ~; K5 L6 |1 k
- #define USE_HSI 1 // 是否使用内部晶振 0 不使用 1使用
' |8 i2 C3 J4 r# E7 L9 o - void SystemInit ( void )
# D: N, X: I7 f3 R& \: L - {& D( z5 U4 h2 H) s' J* m
- $ l& i* l* T5 @
- #if USE_HSI
+ ~0 Q, |. o# c/ ~ - {
% V6 S# _8 ?+ R5 N7 i" D - //设置使用内部晶振6 z: z# q0 E: S) w' L
- /* 开启HSI 即内部晶振时钟 */
# L. t& H/ K6 ?. {% w0 i. Y0 H - RCC->CR |= ( uint32_t ) 0x00000001;0 K3 e8 K; H5 R9 \" T8 `
- /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
) T8 @8 Z7 ^; F/ m3 O9 Y - RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
: a* m( I9 P! u& l. \ - /*PLLCLK=8/2*9=36MHz 设置倍频得到时钟源PLL的频率*/* }6 E7 E8 K& ^* a. p( F1 S
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6; //设置倍频后的频率% d2 b/ L+ E( F5 a1 z& G3 w* M* y
- /* PLL不分频输出 ?*/ I/ v/ S& r+ I2 k# S
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
, w" }3 t7 y) h \, K* c/ C - /* 使能 PLL时钟 */$ K l8 t% y7 l& _* r
- RCC->CR |= RCC_CR_PLLON;
1 B- d( g0 s; H' b - /* 等待PLL时钟就绪*/- u" s; f! Z* c& b" C5 v9 ~
- while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )% U; A: i8 f5 l: _8 T2 E( m3 K
- {
4 s3 s9 }2 O. b! }0 \ e1 n! _ - }
: C/ B9 E6 S5 _) s# B; s - /* 选择PLL为系统时钟的时钟源 */
^# E) @/ I4 b - RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );5 Q* J1 d( x/ f- H/ S# s
- RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;" G$ d0 ^" t: d. p( {. k9 y
- /* 等到PLL成为系统时钟的时钟源*/
! \ B8 I* c) u0 Z0 A' |8 R2 f; n, \ - while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )2 l" A6 a, x5 v7 D5 J+ c+ [
- { }
# N$ {3 d; {6 T - }
! o& \! M* ^ m4 `: _6 P' A - #else# h; ]% R9 ]) o9 |# }2 c% ~" E
- {: N! i/ T2 ?0 R/ |" ]& s) _) t
- //设置使用外部8M晶振
* f0 q+ ~& ]) x, a - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
1 \* e- }7 p; S2 {4 H! @ - /* Set HSION bit */
; }8 ^4 N5 E& E5 ~9 X - RCC->CR |= ( uint32_t ) 0x00000001;
4 |5 a1 f0 A7 f& R; `, [, D - ' l' l' e# G; g. S5 [' R
- /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
+ I* r% W/ M9 R' ~7 I% [ - #ifndef STM32F10X_CL' l1 J5 s6 c% n+ Y& f
- RCC->CFGR &= ( uint32_t ) 0xF8FF0000;
0 @+ z5 K# m7 H6 R% ~ - #else
2 h9 ~- X; ]* G1 H/ s0 T( k- y2 v - RCC->CFGR &= ( uint32_t ) 0xF0FF0000;4 z, u/ u ]" B' O8 J! x- I' x
- #endif /* STM32F10X_CL */, a [& _: Y" p' J, W4 o1 ~3 f G
- / D, S N) z5 B: Z1 H |
- /* Reset HSEON, CSSON and PLLON bits */6 \4 V. J' c8 q1 o, R) R M+ x F5 T
- RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
' d( Y2 t8 Y/ p3 |' r- {( R) |( l
- i b* s7 S5 B) r9 ]- /* Reset HSEBYP bit */9 q; A5 _' s& q$ i1 E5 O- ^
- RCC->CR &= ( uint32_t ) 0xFFFBFFFF;. X" m) ]9 O2 |' S0 M
* i. G, Z5 D( \2 O- /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */: P6 q! a& G. t- p* _4 T
- RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;
, D2 Y& S! k9 B+ {, M - ( U8 v/ H1 @9 `
- #ifdef STM32F10X_CL
8 ?7 t8 L& Q/ M1 x/ ~* o$ S - /* Reset PLL2ON and PLL3ON bits */
: `! X4 g) H9 ?8 I/ q - RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
9 O' b: @ g) ]6 R6 ]0 M! O+ e2 B" B
4 p- p* F6 C7 W( c1 h- /* Disable all interrupts and clear pending bits */# s8 v2 R$ }* w5 g
- RCC->CIR = 0x00FF0000;
- O, @6 D& n9 A& P6 ^9 S( { - 0 |( b$ o v3 ^" r ^, V
- /* Reset CFGR2 register */
& P; S* u0 w; w/ w2 A - RCC->CFGR2 = 0x00000000;
( V* y# S9 O1 O4 @7 I; r6 B* i - #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)" H1 q7 ]7 G/ K, [% Z1 C
- /* Disable all interrupts and clear pending bits */! n7 N4 M: D- _! L% G: ~
- RCC->CIR = 0x009F0000;
, F; E% W8 B: @ - # U( p! Z% `7 b: P e/ I; {
- /* Reset CFGR2 register */0 I; ~* A3 {) r8 w
- RCC->CFGR2 = 0x00000000;
/ x2 F ^) o( Q. X. L - #else2 X0 ^% r" d) d3 q! [: L' L( z
- /* Disable all interrupts and clear pending bits */) k6 [- F) r# d$ @. a+ n/ }
- RCC->CIR = 0x009F0000;
n/ \' V0 N# O r5 S - #endif /* STM32F10X_CL */
q3 }. R9 R" j- z4 V3 ]3 l - }5 t: A3 Y( s0 }1 h$ [
- #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)% e7 \) w6 V& B+ q
- #ifdef DATA_IN_ExtSRAM' y2 g0 n/ p6 w) p; t8 H; ~
- SystemInit_ExtMemCtl();. ~7 X- p2 v1 N' Y( r
- #endif /* DATA_IN_ExtSRAM */
$ g; c' W5 }* y b - #endif
! a/ B8 W( i0 T; g - / u0 |7 A# I Y; x. m
- /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */# F! E) n6 {2 ?) e- ]5 i
- /* Configure the Flash Latency cycles and enable prefetch buffer */
2 M, O; g3 z# w6 _ X - SetSysClock();
# L+ {+ k! p, q, \
r$ b$ u9 J% `* B- #ifdef VECT_TAB_SRAM
& `, e5 \# s2 }# g - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
+ g" \( f5 T/ P/ a - #else7 H0 ^ L- v2 {+ l7 ~
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
9 U0 s R3 w5 `3 L1 M- r - #endif( D# F) ?* X" M: I: n1 f" q6 @
- }# w; Z1 g* g7 \( K4 Q! _$ K
- ; S" X% Z! c+ ^; _' |
- #endif
# v9 m D4 V5 Q) [8 m/ C - }$ V; e: C. [3 [
复制代码
. p1 y2 b2 U' }" M然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
. w2 A( J1 w; l, c& ], U$ e————————————————
2 O$ L$ E) R2 c0 p4 C T1 P5 ~4 K版权声明:文某9
* w+ l, p1 [! F4 t# m如有侵权请联系删除) s' I4 O: W4 @4 F! ^5 n
. I4 d# B: L$ Y- S& O3 f
) f/ E, D0 _% g9 [, u |