你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32F103C8T6内部时钟作为系统时钟经验分享

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。" v" o4 T1 D1 X% V( \' c# Z* r. t; }
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。+ j9 p+ J$ J) j# t
书归正传 直接开始配置
4 t* r+ h; @8 z' f% ^/ s" v

8 s" e8 p; z% p/ e  U5 c  W打开任意keli工程
9 G( ]+ M+ c% Y2 b9 b" ?5 D2 Q0 h/ T4 J
3abfd84a31744e26becb5fac0ecf553d.png
/ z' f* S7 M% y6 m7 n

( \! J. ~1 }+ A7 j. K打开system_stm32f10x.c
: l& o8 P1 ^2 |, R! x. t" o4 c& ?# G3 u; _! u: ~
15651841425044cfb9c3695a9017a21f.png " P1 L- P% e; V; ~" J% }
6 ]' A, ~  r; \4 _( l
找到systeminit函数 全部注释掉
6 X( Q* W) ^: X# H$ g
) V: R4 U0 j2 V9 N
51791e66d6cb45ddabcd4982bac9425b.png
0 d" k$ E7 |+ f$ Y8 P5 \  F

8 O/ H+ ^0 i  m& _; \# }然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)
& ~. D% S. ^' {2 a7 s) N; }% L/ C' @% W! L
直接替换就可以用了
9 u3 O# f% s" C) b7 [; V
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用2 ?- W; {, y4 ]. d! h8 d
  2. void SystemInit ( void )
    - s/ N# H1 ]  [% a
  3. {3 S  a. ^6 f, }  |* _# V
  4. $ M, C3 N5 B/ W; {  W
  5. #if USE_HSI
    ! c* _$ X5 O4 w7 A8 k" a  U9 n
  6.     {
    / v- F5 D& Y2 c6 d  J: E
  7. //设置使用内部晶振9 {! @4 `" G! A4 U" O. {4 |3 B! ]
  8.         /* 开启HSI 即内部晶振时钟 */
    ( p. R% @4 r, }4 S4 o. {9 L
  9.         RCC->CR |= ( uint32_t ) 0x00000001;1 v. Y* _) O0 e% }: ~
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/* g6 Z  g* i+ _. S5 Z6 U) |4 B
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
    ) ]7 K% A$ I  c0 I) x* q% r1 O
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/
    0 x' g1 F2 \; ^' M/ B
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率7 E* q' E! P: `$ x$ L% I) w
  14.         /* PLL不分频输出 ?*/
    * a" g( ]+ c1 Z
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
    % O( |- ^0 I- m3 t8 i! C
  16.         /* 使能 PLL时钟 */
    * Y* e  J' l( u& p) q
  17.         RCC->CR |= RCC_CR_PLLON;
    , G' Z! H( X$ O6 A* ]+ d
  18.         /* 等待PLL时钟就绪*/+ T/ ^) O0 u% s0 W! l
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )' P, R+ R' u- `1 z1 q- B
  20.         {
    7 g, h; }& t" ~1 v1 j/ d4 a5 Z9 d
  21.         }
    3 S  K6 @% n8 t( T
  22.         /* 选择PLL为系统时钟的时钟源 */
    / n5 ]# ?( c* ?2 Z3 R: P
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );7 \: l2 {8 V  x& V
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;: L- a3 \, Z% l% [( A
  25.         /* 等到PLL成为系统时钟的时钟源*/3 H# \4 w" @$ D
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )
    " H3 d0 n* w: k- R
  27.         { }
    # }: Z! a! f8 c1 g2 e0 J
  28.     }/ X0 r) Z9 l; a2 F" K" [" l0 W
  29. #else+ n# k% _% y' Y0 ?1 }
  30.     {
      C5 U& [# P" C% M/ Y/ F
  31. //设置使用外部8M晶振
    5 P! u" G- A3 ?# Z. b. ?
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */) M- F" q- c/ q6 |: N
  33.         /* Set HSION bit */! z( M1 i# E: h* w. Z: j
  34.         RCC->CR |= ( uint32_t ) 0x00000001;
    0 F8 Z% c' T* x
  35. - w+ N0 j" L' {4 R5 G" x" x
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
    + E1 G# x& w: B, u' E3 `# ~
  37. #ifndef STM32F10X_CL, Y# O( v) J/ Z# a' P
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;' e9 ?5 S8 L: h( q
  39. #else
    $ ^! k  M, r4 w, F. s
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;, V& [  p8 A) F0 U/ j; M/ I
  41. #endif /* STM32F10X_CL */. y4 E0 J. F; M+ S5 I4 i* }2 r* O9 l1 B

  42. 4 A: R/ A1 i' [" t9 f- A+ f- i
  43.         /* Reset HSEON, CSSON and PLLON bits */
    9 q' c& U) M7 v& j) n
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;( C! Z( b$ v" u3 z; \
  45. 9 c3 R3 \6 B" X
  46.         /* Reset HSEBYP bit */
    : l  M. g; y- S1 I
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;
    4 m5 Z, b& O6 I6 D

  48. ) n* q* w. w. E) K  {
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */7 ^+ v! |0 d+ p7 r# Q2 }& X  t
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;: C' X) a4 F" p) ?
  51. 9 r/ o7 ~# t3 Z; T1 I. P
  52. #ifdef STM32F10X_CL, K1 l: c6 q  J6 o
  53.         /* Reset PLL2ON and PLL3ON bits */
    6 G6 W& L  O# d, M0 `: I6 s
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;7 N( v' ~, g4 P8 F7 k% o/ @* s

  55. 5 q! G( O' J6 O7 O" y
  56.         /* Disable all interrupts and clear pending bits  */
    3 ^3 [! o# g0 d7 R- c3 I4 Z
  57.         RCC->CIR = 0x00FF0000;
    ( L- J1 \- l" z8 g, O- \' t
  58. 0 y0 n( Z4 `; R( L6 S1 R
  59.         /* Reset CFGR2 register */
    * a# ]" Y) H" \6 q5 V
  60.         RCC->CFGR2 = 0x00000000;+ M- b, p1 @! v5 q  D
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    ! g& C5 ?; G! a/ s1 R6 \
  62.         /* Disable all interrupts and clear pending bits  */- E) B% m" m& [; a
  63.         RCC->CIR = 0x009F0000;
    1 h# t# z7 H/ x8 e( ^1 k2 h

  64. " |% w& `/ l+ O6 ^8 Z0 B" Y
  65.         /* Reset CFGR2 register *// n% ~) }1 U1 J6 A% x( A" L& d, l/ {- l
  66.         RCC->CFGR2 = 0x00000000;
    7 ^* D0 m4 C6 b+ M  J- e0 F
  67. #else2 |2 g% g& [) `* t, p) U- V- b& ^% n
  68.         /* Disable all interrupts and clear pending bits  */' E7 ^# u! L8 g1 ^. X7 t% l
  69.         RCC->CIR = 0x009F0000;* q' ?2 K# |& j; C$ S: Q2 g
  70. #endif /* STM32F10X_CL */8 M$ s/ p) V9 K& o$ [  I% k
  71. 6 E- f) `5 n" T: w1 h& y3 S
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    $ S* N* W7 _, a" R
  73. #ifdef DATA_IN_ExtSRAM
    . ]' X# h8 I. v3 `8 J
  74.         SystemInit_ExtMemCtl();
    / u# I# W. M" v( o+ _; s
  75. #endif /* DATA_IN_ExtSRAM */
    - j/ I* Q+ I0 |. c
  76. #endif1 ]4 {/ Y, ^5 G$ B9 o" g0 _
  77. - f( p7 s. f# O) W
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */4 @4 G9 V3 ]- P8 B# o, _; ~  ^9 Y
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */
    9 [, m" F! W* R3 u" u/ T$ X( g$ c$ @( x
  80.         SetSysClock();9 b- X0 _1 U# k! P# H0 B0 k
  81. " V' R4 @% t: c! m1 l, [- d. m
  82. #ifdef VECT_TAB_SRAM! v- H6 E3 D: _
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    6 ~# a  r; s& q9 Y
  84. #else
    1 X8 V8 ?# Z# Y+ y( x* @
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */$ `4 H! d) h, Y! p6 k
  86. #endif
    * g$ K, x. ^# E+ @( t
  87.     }; V! @$ a" r: n# g1 k3 E1 {9 m8 v
  88. - z6 R& ~# G+ [% D  Y
  89. #endif) d9 P1 P3 o- d* d* s! H4 M6 }
  90. }4 t" \4 \  M; c
复制代码

  ]1 ^5 O! u! b7 F! T然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
$ _+ P  D) @2 I, O9 U————————————————
8 s  r. X5 ?& H版权声明:文某9/ G* O, P( J- Q' ^
如有侵权请联系删除+ Z- b: l  E) i

1 l9 A* @2 [, [. b  W$ G8 i) N  h* }1 l' I* Y7 z' @
收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版