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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。" M& p/ L( h; X
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。
7 N. [; Z6 }- m6 J* ~: G书归正传 直接开始配置
0 N0 c8 p7 Z% f' v& X/ C; q& S2 H* F
" W4 Y& v& v8 v; T( L
打开任意keli工程2 K3 ]- ^. ]2 u: f# ~

) S7 B' A5 [0 i: \5 Y, K
3abfd84a31744e26becb5fac0ecf553d.png , ?$ |( s# O. E( g% q* S
- e$ C: t+ ~/ ]
打开system_stm32f10x.c
9 ]7 T0 O& ~# R* o" `5 l. m6 e2 \$ x
15651841425044cfb9c3695a9017a21f.png ! ]' Z; G: U7 o) w
- A$ H; y5 \# Q6 U7 }7 P2 S
找到systeminit函数 全部注释掉
) o2 I- n$ e- B
4 H5 e/ K! {3 }6 o- @/ [5 g' U6 c
51791e66d6cb45ddabcd4982bac9425b.png
' p9 C9 X( l3 n4 g4 @) g8 Q! S
: W4 _4 j4 F6 X7 L5 a
然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)8 `7 s) i* `( H( g9 |- o. g0 U/ a
7 N4 c- h+ G6 j; d
直接替换就可以用了
; b& y6 O4 R) j# ]) K
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用
    * l8 u! E8 O! ?
  2. void SystemInit ( void )
    ! E2 P( t1 c) H+ v0 L
  3. {
    ; ^, H1 \2 `; s- R
  4.   P- {8 |. x. i1 {+ g/ s3 J
  5. #if USE_HSI$ A6 X2 s/ i; J! Y" F" P
  6.     {
    2 u8 Z, M  q& x4 `
  7. //设置使用内部晶振5 z/ C% G, u1 ^! s3 v
  8.         /* 开启HSI 即内部晶振时钟 */
    5 T( l' Q  q9 o: }" B
  9.         RCC->CR |= ( uint32_t ) 0x00000001;
    * W, N- x: B9 B9 E$ S( V
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
    ; n( K; _+ a' N# a0 h) m! v
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
    9 b4 X# l* s; X- |2 P% E8 ^
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/
    . \% s6 c' ?* `0 o) S: [. J4 w4 S4 A( i
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率. t4 C9 f! p9 x: E2 ^9 i
  14.         /* PLL不分频输出 ?*/6 i& m" g$ l9 ~+ W6 ^+ `* r. G, G
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
    6 U' ]: v5 e* o  x
  16.         /* 使能 PLL时钟 */
    9 t0 N. Z) h. |1 A
  17.         RCC->CR |= RCC_CR_PLLON;+ S; t- Z6 `* B4 u8 o
  18.         /* 等待PLL时钟就绪*/$ M% i, ~4 g& D0 ~6 v6 f$ c- k
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )
    - N* U5 K) W9 j# I) ^
  20.         {
    7 R$ c7 u4 S4 u" P0 ?' k
  21.         }9 i% e  B8 G! r3 L/ Q
  22.         /* 选择PLL为系统时钟的时钟源 */
    - C8 D( @# V5 K' ~! j+ L- C
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );
    # W# ?. H+ q  H( t, @) `" G
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;
    & G5 A/ ^, Y0 i7 x
  25.         /* 等到PLL成为系统时钟的时钟源*/+ J& Q) W8 x7 z9 y
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )
    2 a% Q& H, B. k" @5 L
  27.         { }+ f8 {* b8 S5 R2 k7 O9 I/ n
  28.     }7 V* Q) r& T7 Z  X# T
  29. #else0 y( Z6 U9 G, j2 W1 M
  30.     {3 y9 u, t* @- j  s# `
  31. //设置使用外部8M晶振
    2 j7 @9 e4 S' j+ V! ]$ L. k8 I
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    : \0 S2 }3 D( h
  33.         /* Set HSION bit */! c6 h) f' \' I% t
  34.         RCC->CR |= ( uint32_t ) 0x00000001;6 r$ S) s3 l, E# Y

  35. 1 t) Q  R& H6 X0 B% C4 E, U" c8 t
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */) g5 Y& `# w9 X- N! |
  37. #ifndef STM32F10X_CL
    4 a8 t. `  @% U+ c9 l
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;' a9 d- [+ }$ }6 S" A( o& q+ R
  39. #else
    1 a# e. O$ y6 `$ t( F! c
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;
    8 e2 e% K, l' c  b/ Q- K# A3 B
  41. #endif /* STM32F10X_CL */
    7 [$ a9 g! e, i4 X
  42. - x: ?* s( P& u8 z8 E9 }
  43.         /* Reset HSEON, CSSON and PLLON bits */! \2 P1 O* z( m) {) \
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
    $ z' r2 W9 r; M. e6 |0 i) o
  45. 8 C$ O& ^6 F+ X& o* A$ [# U( t) |
  46.         /* Reset HSEBYP bit */* \$ ^: u$ o* Y" G" y* D6 @
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;
    , A) o$ `2 G. z- Q

  48. : M0 G4 A  v; M* o5 W2 ~9 q% N7 q
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */
    # Q) ?7 t# L9 T7 m& u
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;; b* G; x4 y, A' [  A7 L4 B, a
  51. 9 v' W( E4 Z/ D! ^  E
  52. #ifdef STM32F10X_CL
    6 o4 Q/ e) U+ |. Y7 p0 z
  53.         /* Reset PLL2ON and PLL3ON bits */
    ) J) ?  M5 q5 K1 r9 ?
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;* `4 M4 o0 |% [2 Q2 o' q; B
  55. 5 B2 I" K9 n5 ^
  56.         /* Disable all interrupts and clear pending bits  */
    7 d( R7 H# \, K0 U+ _8 u
  57.         RCC->CIR = 0x00FF0000;
    # }% u; W5 Y7 ]

  58. * K  f+ ~' U/ k. M$ T3 k- j
  59.         /* Reset CFGR2 register */
    ) t' v0 n8 m$ |7 |6 K
  60.         RCC->CFGR2 = 0x00000000;
    0 v9 C* x% d* L  H9 H  H
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)+ q6 R# w1 C) I" J8 K
  62.         /* Disable all interrupts and clear pending bits  */
    4 @; `- @6 b, s3 N2 V- {" h
  63.         RCC->CIR = 0x009F0000;
    3 X; w* Z2 R  y! t% e
  64. $ |9 K: \" b9 ~9 s
  65.         /* Reset CFGR2 register */
    + f8 y  |9 I2 `% S7 ]
  66.         RCC->CFGR2 = 0x00000000;4 R1 w6 Z, Z( A$ Q( z6 }. R
  67. #else9 r0 y/ y2 ?+ B" X/ x! }1 j& w2 y
  68.         /* Disable all interrupts and clear pending bits  */$ J8 D- I; f( B& B: J
  69.         RCC->CIR = 0x009F0000;
    ) `5 @( r8 G0 |3 a8 P6 |! E4 J$ }
  70. #endif /* STM32F10X_CL */& w9 ?, X0 X1 r4 N5 }. k
  71. 1 l2 v4 r* k7 ~/ |9 w( f
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    1 ?  P( \( r& ]7 K- }
  73. #ifdef DATA_IN_ExtSRAM  X& K# o7 V* v
  74.         SystemInit_ExtMemCtl();
    - _1 a4 q- r6 ~' o
  75. #endif /* DATA_IN_ExtSRAM */
    8 t, W- e( h9 ~  i: M( k) ^0 Q: u/ v
  76. #endif
    , ^$ D3 n( m% P2 X1 Z; o1 |& O& x

  77. ! m$ q/ s; z0 H" B$ n/ Q' }
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */; s1 c& `) W) F. s1 [, @* P" y
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */$ x8 b% q3 z# q& u' M
  80.         SetSysClock();
    7 n( |" r% X$ e" W5 ]1 a4 P
  81. & J: J! P5 j% \8 w! A
  82. #ifdef VECT_TAB_SRAM
    ) }. T1 t( s4 P" f4 E4 i
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */3 C8 e' e1 X; V5 P! X$ g
  84. #else
    2 f; w$ J7 M) f+ O
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    : _( b0 D% b. Q" }8 d
  86. #endif
    / Z/ V9 ]% U0 G4 u
  87.     }- B6 L4 ?4 v8 @8 l+ D  _
  88. 6 _8 q  {- n) w/ Z) |9 c6 }3 r5 Y" n
  89. #endif  y2 r* C4 ]- P) F" q  C3 V  e
  90. }, S  Q$ p9 |0 ?& x! M/ f& p
复制代码
4 q; z% V* v+ Y9 M1 d4 ~
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试% g7 H4 t$ f& O1 ]" f8 [
————————————————3 b0 U# N2 m! N) P) u) U
版权声明:文某9
7 h4 r" @) z" K6 v9 C4 c/ ?/ D9 k如有侵权请联系删除
8 g* F  v" m0 v) x- r. ?9 O) H* G; t6 h( d  m
, G. p' T. ~6 A; `; Q- l
赞 收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版