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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。$ 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 V
1 Y9 y" |' [" G' N
打开任意keli工程
3 a! w2 \3 \# y3 U2 F
  b* M3 ?( D0 p. Y" c  v
3abfd84a31744e26becb5fac0ecf553d.png 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
15651841425044cfb9c3695a9017a21f.png
$ 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
51791e66d6cb45ddabcd4982bac9425b.png 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 \
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用! v# S6 Q: s: h) p6 U3 y
  2. void SystemInit ( void )
    " O) v1 p, t( O- s! k
  3. {) `; G+ R0 M! I, c

  4. 3 ]2 q; e, Q$ G4 k) O& R2 G
  5. #if USE_HSI+ G& G' i3 @# ?. n+ c
  6.     {
    4 y6 A$ E. _" y4 L, J8 v! h3 t
  7. //设置使用内部晶振
    % U! ~. l0 C( b' B+ {+ p1 G1 }, Z
  8.         /* 开启HSI 即内部晶振时钟 */
    # ]% ]( o" Y% l  |/ f
  9.         RCC->CR |= ( uint32_t ) 0x00000001;, C7 t$ Y# }# k+ ^2 p$ ]- F7 R/ c
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
    : |6 K7 g% a7 I* R
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
    2 U0 W' c+ W* }) O/ b. l
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/9 k5 f% Y* v# k/ a0 L, w6 m
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率. M1 M' s! P. H3 E
  14.         /* PLL不分频输出 ?*/
    $ L( E) Y; u( ^9 D& o
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
    ) h# [: ^6 B! j+ }( {5 w. b& S
  16.         /* 使能 PLL时钟 */
      b3 }# E" }, o0 E1 @
  17.         RCC->CR |= RCC_CR_PLLON;9 Q' z3 m, |' q
  18.         /* 等待PLL时钟就绪*/, M$ Q* h7 R1 V8 z; a5 h8 d; B
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )$ _9 l; E0 W2 I5 ?- |1 L; N7 P
  20.         {) a; J+ t1 t( l$ x, ~6 ?
  21.         }
    2 i' U, Y! U7 {
  22.         /* 选择PLL为系统时钟的时钟源 */% u( v8 v$ S3 n! }1 S5 {2 v
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
    6 P0 u0 M# D- ^1 D
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
    9 W( D( S) E% C, P
  25.         /* 等到PLL成为系统时钟的时钟源*/: i/ c! X- m* m9 C2 G( i) V
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )
    5 p( L9 a, h$ H5 C- P2 W/ @
  27.         { }9 @' {4 u% c3 h2 _% U, G! N
  28.     }
    4 K. v2 Y& a. H& o% @3 R1 X
  29. #else
    ' C* }0 A$ l, [
  30.     {7 x& o6 z2 d+ e& V, e9 U5 v
  31. //设置使用外部8M晶振
    6 G: q  A- a3 C* V
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */( N& k/ ]& l" o2 i6 v0 ?* f# O7 |6 _
  33.         /* Set HSION bit */( M% W1 L/ ?/ h3 G4 _/ r
  34.         RCC->CR |= ( uint32_t ) 0x00000001;% ?& G' w# W7 S6 N8 |, k4 z4 H

  35. # s( e4 @* S, J6 Y3 }1 H
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */8 n8 z" l. Y2 ?- U* _3 r+ N
  37. #ifndef STM32F10X_CL
    & S0 g# ^6 _$ q( l! ]0 p
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;3 w8 K7 {4 |9 A2 o+ d
  39. #else
    / w# P. x1 {* x4 F  ]4 T/ O7 C2 n
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;2 P4 |; B9 a8 O$ T3 B
  41. #endif /* STM32F10X_CL */) E0 ]6 _/ I% ~" ~
  42. : i; v" m/ ]; k+ B5 x( k+ y3 A
  43.         /* Reset HSEON, CSSON and PLLON bits */
    . ?3 Y* O6 m6 |) R
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
    ! Y1 f! u/ y4 ?$ ~/ D5 \' O
  45. * p/ V7 Q3 f  P' I4 F7 A2 b
  46.         /* Reset HSEBYP bit */
      g' Z3 z6 I2 D$ V. c
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;3 m# u7 D+ S" q7 q; \

  48. 9 u* f5 m  i8 e  z, B$ n6 L- L
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */; ~0 U% C( D# `$ I# G' {
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;
    8 T( V( l; v6 `; V6 i& m' \3 _
  51.   E  W6 E! I+ o& J' Y' y/ u
  52. #ifdef STM32F10X_CL; V" h( w  a- H* g2 i* b. J/ h
  53.         /* Reset PLL2ON and PLL3ON bits */
    ) A+ Q9 @1 G" Q: t
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;! D$ H4 x9 p3 S9 d

  55. ( R+ \9 d" I1 t! u5 a
  56.         /* Disable all interrupts and clear pending bits  */
    ! i- x) z) ]5 U) P, n0 M
  57.         RCC->CIR = 0x00FF0000;+ P- W) n, a/ A

  58. ( C6 V. e) A" A. v
  59.         /* Reset CFGR2 register */& B  P! {5 U! w2 R* O1 P+ N6 `& O6 ]
  60.         RCC->CFGR2 = 0x00000000;
    5 K" I5 s% S6 C* [6 J6 Q4 O0 Z2 M
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    " n+ H! [$ v2 @8 W
  62.         /* Disable all interrupts and clear pending bits  */
    & w* Q" Y. }4 \6 L6 p& s  f2 J
  63.         RCC->CIR = 0x009F0000;
    # P& a+ x0 r) P1 a" B8 g
  64. 6 }8 m- V# b$ w
  65.         /* Reset CFGR2 register */
    , [) ~1 R1 U4 p; L( p' n
  66.         RCC->CFGR2 = 0x00000000;  Z: T" K9 Z8 R- J; D7 T
  67. #else( F' f1 u# m6 d9 m' w' g) O
  68.         /* Disable all interrupts and clear pending bits  */
      ^$ {2 _7 H3 `% C' P
  69.         RCC->CIR = 0x009F0000;% |, E! e) N7 G' o( ]$ Q( v
  70. #endif /* STM32F10X_CL */
    ' r$ _+ G& M! @- s. W( t- S

  71. 4 @9 E2 U$ W; G5 l
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL); H/ F* d1 o+ Q# G
  73. #ifdef DATA_IN_ExtSRAM
    % K) r3 t$ n8 [$ S9 E' N' o) g; R
  74.         SystemInit_ExtMemCtl();
    # \  @  I. i% q- L
  75. #endif /* DATA_IN_ExtSRAM */& a* ]5 _6 C4 s( E8 _0 D
  76. #endif
    " X  a$ B4 S* L' N, y
  77. + _7 I. W! v/ j& W. W5 q# Q
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */* }0 ~1 B! ?  k( _3 u: C  w4 Z0 o
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */
    ) U/ W+ n+ |3 m" L' n
  80.         SetSysClock();& M  l+ \% C/ Z9 m* i  m
  81. - `9 p# ?* e- K5 J0 H2 A
  82. #ifdef VECT_TAB_SRAM
    8 [2 Q/ J9 Y4 K' e/ I8 H
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */# e2 y5 D7 V  _+ X7 Z: @
  84. #else1 Y' c; p, t3 w
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */6 E0 X& T3 f: x! d0 u& Q  V% S
  86. #endif# p3 Q) h4 l5 x: t: Q& y
  87.     }
    ( P# y% f: p: t  C7 N8 V+ K9 y

  88. . X, Q4 d' _' m/ ^7 w. M: T$ o
  89. #endif
    # L2 L6 X/ r) s2 Y, e$ h" m
  90. }% 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% _
收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似分享

官网相关资源

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