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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。
. M2 G  ?3 Y& A* Q2 U使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。, f! z2 ^8 A+ f7 R
书归正传 直接开始配置' Q. q3 C# P1 b; Z  V

: }# m# i2 C. `: p打开任意keli工程5 k$ z1 D" v% s( E

0 t; C9 _& @+ J: N8 o
3abfd84a31744e26becb5fac0ecf553d.png
: Y  |9 n9 W6 ?2 P/ b9 y- ~' y

# \3 m2 u" \% s8 K; V打开system_stm32f10x.c
7 u) v3 A$ Q: G, w' e3 Q* }8 F. n$ i: f
15651841425044cfb9c3695a9017a21f.png 4 O' g2 G3 ^6 N0 k8 W% F0 Z& [; d
: V5 j2 l0 I9 B" V; _7 a9 D( e$ P
找到systeminit函数 全部注释掉
/ @' d# u! z6 {0 ]
6 t" s; D4 N  u6 H# _
51791e66d6cb45ddabcd4982bac9425b.png
- m% Q4 S5 ]% O2 c9 t- t: C

- q; b" c" O' c6 ~然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)3 s6 P6 Z6 |( Z9 ?- S

: @* u9 V) f! h
直接替换就可以用了
. `3 |) ~6 R  j1 k
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用% h" G+ R) l! V% P, `: o' Z0 k. |
  2. void SystemInit ( void )
    ( o* H1 a+ K* P! b$ w
  3. {3 g+ |+ V9 m+ O: k1 X, d, s
  4. % |* L- K/ \) r% w( a' u  B
  5. #if USE_HSI( a: ~) h- K# S  |0 k
  6.     {
    * x+ M7 a; D9 @5 V: b2 ]  L) n8 n& J
  7. //设置使用内部晶振
    % c, l9 ~; b/ Q* f( I: X  B& u
  8.         /* 开启HSI 即内部晶振时钟 */! q2 k$ e, s1 X; r: D+ k* r
  9.         RCC->CR |= ( uint32_t ) 0x00000001;
    / W2 N4 [! D3 f0 n% W
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/6 W9 p3 e& D2 S- _9 A
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;6 c# A6 S6 {7 ^( A) \6 y7 i5 F
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/
    6 {9 t( X: I  X4 ]% p! ?& D$ e- @
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率5 p, X) y# r& Z7 A* S3 h/ ~) `
  14.         /* PLL不分频输出 ?*/' ]2 H! _  G; B
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
    " l  }; K  p( F+ ?1 L
  16.         /* 使能 PLL时钟 *// d( y5 \2 V( @! ]- {5 x4 c
  17.         RCC->CR |= RCC_CR_PLLON;! e7 S( e9 I, }7 c* W* j
  18.         /* 等待PLL时钟就绪*/
    # f. @- o9 Z4 L# J2 M% `" o
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )* x: }$ @* |) [# U: i7 N% ]
  20.         {+ D( G- n- p8 c( G3 A1 \, x
  21.         }/ {7 _9 N' W& o) J
  22.         /* 选择PLL为系统时钟的时钟源 */
    ; T& S3 g5 Y5 I- V
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
    * w. _9 C0 k# O7 \+ B  T  y
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
    , |! m  T1 @& z
  25.         /* 等到PLL成为系统时钟的时钟源*/
    * A& {0 b6 p0 C: _" X* H% R
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )% w( e% E/ X: O
  27.         { }4 I! z% l( r) [0 h. h* Y
  28.     }& k) A: K2 H/ N& b3 P
  29. #else
    - b0 l1 @, S& J+ \" i/ l
  30.     {2 K$ G( I2 f6 i. [, G
  31. //设置使用外部8M晶振1 }. o! t* p* v& w
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */+ a# p1 \$ \1 {& O
  33.         /* Set HSION bit */0 E6 j3 A# G0 |1 y, t
  34.         RCC->CR |= ( uint32_t ) 0x00000001;& H" Y' K, p: J
  35. " I& B5 y5 b$ |* c
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */6 f2 E: F+ _; N9 s- G  `: U; f
  37. #ifndef STM32F10X_CL
    5 v; M# w' p0 w& L& B% o
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;# B+ t: W3 n& E  a
  39. #else
    1 h6 h7 Y: D$ L6 l" V$ n6 w
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;, b; c5 O5 y: d0 f5 w' x( g/ ]" o
  41. #endif /* STM32F10X_CL *// C% P% t8 s: k+ ?$ J, I
  42. 0 C8 Y! Q+ N  c: ~# }8 }
  43.         /* Reset HSEON, CSSON and PLLON bits */
    & Z* k- X  D7 b9 P
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
    9 a! ^1 z6 G9 |2 ~
  45. - i3 T2 m. j( m" c# y! }8 p( F: f
  46.         /* Reset HSEBYP bit */& Y8 O7 [0 U0 u$ E
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;
    1 l$ b7 Y' \6 ~$ M4 p# B

  48. 7 ]/ C1 b: f! u
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */9 [" f6 L0 b( Q$ A+ Z' b
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;. s0 u9 D. S) n  `3 G4 a& T

  51. " d$ \% b" m- i& z( h$ E
  52. #ifdef STM32F10X_CL
    / x/ Q2 K# J" [0 J
  53.         /* Reset PLL2ON and PLL3ON bits */
      N5 w( \- d3 P$ j
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
    - S6 M2 F7 l6 O9 p) y# {( |
  55. 6 j$ S7 ^: }2 Z/ q/ y) T+ }
  56.         /* Disable all interrupts and clear pending bits  */- }& H5 w! C  _. V/ V
  57.         RCC->CIR = 0x00FF0000;
    3 |* c; T: M1 H, I% l. h
  58. + M4 l- R* U1 ^6 {3 v: X
  59.         /* Reset CFGR2 register */9 X4 \6 X* P& i2 w) x
  60.         RCC->CFGR2 = 0x00000000;
    7 v; b& d2 z- }  d; W; t9 @  N
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)' ^8 D: C2 A: g, H6 x
  62.         /* Disable all interrupts and clear pending bits  */
    % r; n$ Y& \" w5 Y6 J
  63.         RCC->CIR = 0x009F0000;& F* {2 e9 S. }

  64. 1 N' @" r  I$ m' m( t
  65.         /* Reset CFGR2 register */
    7 T# r) `( g9 J( k$ Y
  66.         RCC->CFGR2 = 0x00000000;
    1 G4 |/ s5 f$ j0 G
  67. #else0 y- A0 `& `$ @
  68.         /* Disable all interrupts and clear pending bits  */! J4 s( e# S' \
  69.         RCC->CIR = 0x009F0000;
    ( o) v% a/ d5 y9 s' `# P, p
  70. #endif /* STM32F10X_CL */
      I+ T2 N# y; o
  71. * b& E" ]4 ^3 M* O8 c: y7 N, B
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    1 ~! f+ a8 X# b; g' G# i4 v
  73. #ifdef DATA_IN_ExtSRAM7 q, U5 _- g# l8 S5 U) P
  74.         SystemInit_ExtMemCtl();2 ?# F: W7 X) i7 D% j4 Q
  75. #endif /* DATA_IN_ExtSRAM */2 p0 {) X5 i# F
  76. #endif
    : x( O+ f% k9 J% s! n
  77. 0 L2 M( n6 V+ i% U
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */
    8 `8 P' w( [4 u& ?6 m) [' O
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */
      g6 z, P- |6 [4 C
  80.         SetSysClock();
    1 |$ b% m1 o- v* J* f

  81. . t, l5 T1 {+ h3 g* p
  82. #ifdef VECT_TAB_SRAM$ Q* ?1 D1 f; h9 S/ q* U
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */. M, o. _! e: w  j2 M
  84. #else
    ; L$ `* _, I2 B6 d0 _
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */7 c, J5 L1 \* |9 Z: y% m
  86. #endif
    # Y: g8 g# {& O$ K2 ~+ Z
  87.     }, |! N: w" H: D

  88. " p& a( m, T! a- |$ F
  89. #endif2 y! y2 X) Y, T" I0 `
  90. }
    / K$ J9 J: U* ~0 `$ _" v* U/ c
复制代码
7 j% D& K. J+ c3 ^, }: \3 [
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
/ }( }9 G4 z- k; l) B/ ^4 |( {————————————————. `% z& j$ ]1 v% g8 A
版权声明:文某9
; X2 E9 ?, S* U. X; l. ]如有侵权请联系删除
8 z( J+ i- e6 G  o- `' }5 J
% D9 B/ e0 r( S9 v6 j) j
6 ^; E! K, I6 q/ {% ]+ m
收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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