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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。
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
3abfd84a31744e26becb5fac0ecf553d.png
: 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
15651841425044cfb9c3695a9017a21f.png
$ 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
51791e66d6cb45ddabcd4982bac9425b.png 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
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用
    ' |8 i2 C3 J4 r# E7 L9 o
  2. void SystemInit ( void )
    # D: N, X: I7 f3 R& \: L
  3. {& D( z5 U4 h2 H) s' J* m
  4. $ l& i* l* T5 @
  5. #if USE_HSI
    + ~0 Q, |. o# c/ ~
  6.     {
    % V6 S# _8 ?+ R5 N7 i" D
  7. //设置使用内部晶振6 z: z# q0 E: S) w' L
  8.         /* 开启HSI 即内部晶振时钟 */
    # L. t& H/ K6 ?. {% w0 i. Y0 H
  9.         RCC->CR |= ( uint32_t ) 0x00000001;0 K3 e8 K; H5 R9 \" T8 `
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/
    ) T8 @8 Z7 ^; F/ m3 O9 Y
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
    : a* m( I9 P! u& l. \
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/* }6 E7 E8 K& ^* a. p( F1 S
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率% d2 b/ L+ E( F5 a1 z& G3 w* M* y
  14.         /* PLL不分频输出 ?*/  I/ v/ S& r+ I2 k# S
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;
    , w" }3 t7 y) h  \, K* c/ C
  16.         /* 使能 PLL时钟 */$ K  l8 t% y7 l& _* r
  17.         RCC->CR |= RCC_CR_PLLON;
    1 B- d( g0 s; H' b
  18.         /* 等待PLL时钟就绪*/- u" s; f! Z* c& b" C5 v9 ~
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )% U; A: i8 f5 l: _8 T2 E( m3 K
  20.         {
    4 s3 s9 }2 O. b! }0 \  e1 n! _
  21.         }
    : C/ B9 E6 S5 _) s# B; s
  22.         /* 选择PLL为系统时钟的时钟源 */
      ^# E) @/ I4 b
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );5 Q* J1 d( x/ f- H/ S# s
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;" G$ d0 ^" t: d. p( {. k9 y
  25.         /* 等到PLL成为系统时钟的时钟源*/
    ! \  B8 I* c) u0 Z0 A' |8 R2 f; n, \
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )2 l" A6 a, x5 v7 D5 J+ c+ [
  27.         { }
    # N$ {3 d; {6 T
  28.     }
    ! o& \! M* ^  m4 `: _6 P' A
  29. #else# h; ]% R9 ]) o9 |# }2 c% ~" E
  30.     {: N! i/ T2 ?0 R/ |" ]& s) _) t
  31. //设置使用外部8M晶振
    * f0 q+ ~& ]) x, a
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    1 \* e- }7 p; S2 {4 H! @
  33.         /* Set HSION bit */
    ; }8 ^4 N5 E& E5 ~9 X
  34.         RCC->CR |= ( uint32_t ) 0x00000001;
    4 |5 a1 f0 A7 f& R; `, [, D
  35. ' l' l' e# G; g. S5 [' R
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */
    + I* r% W/ M9 R' ~7 I% [
  37. #ifndef STM32F10X_CL' l1 J5 s6 c% n+ Y& f
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;
    0 @+ z5 K# m7 H6 R% ~
  39. #else
    2 h9 ~- X; ]* G1 H/ s0 T( k- y2 v
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;4 z, u/ u  ]" B' O8 J! x- I' x
  41. #endif /* STM32F10X_CL */, a  [& _: Y" p' J, W4 o1 ~3 f  G
  42. / D, S  N) z5 B: Z1 H  |
  43.         /* Reset HSEON, CSSON and PLLON bits */6 \4 V. J' c8 q1 o, R) R  M+ x  F5 T
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;
    ' d( Y2 t8 Y/ p3 |' r- {( R) |( l

  45. - i  b* s7 S5 B) r9 ]
  46.         /* Reset HSEBYP bit */9 q; A5 _' s& q$ i1 E5 O- ^
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;. X" m) ]9 O2 |' S0 M

  48. * i. G, Z5 D( \2 O
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */: P6 q! a& G. t- p* _4 T
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;
    , D2 Y& S! k9 B+ {, M
  51. ( U8 v/ H1 @9 `
  52. #ifdef STM32F10X_CL
    8 ?7 t8 L& Q/ M1 x/ ~* o$ S
  53.         /* Reset PLL2ON and PLL3ON bits */
    : `! X4 g) H9 ?8 I/ q
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
    9 O' b: @  g) ]6 R6 ]0 M! O+ e2 B" B

  55. 4 p- p* F6 C7 W( c1 h
  56.         /* Disable all interrupts and clear pending bits  */# s8 v2 R$ }* w5 g
  57.         RCC->CIR = 0x00FF0000;
    - O, @6 D& n9 A& P6 ^9 S( {
  58. 0 |( b$ o  v3 ^" r  ^, V
  59.         /* Reset CFGR2 register */
    & P; S* u0 w; w/ w2 A
  60.         RCC->CFGR2 = 0x00000000;
    ( V* y# S9 O1 O4 @7 I; r6 B* i
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)" H1 q7 ]7 G/ K, [% Z1 C
  62.         /* Disable all interrupts and clear pending bits  */! n7 N4 M: D- _! L% G: ~
  63.         RCC->CIR = 0x009F0000;
    , F; E% W8 B: @
  64. # U( p! Z% `7 b: P  e/ I; {
  65.         /* Reset CFGR2 register */0 I; ~* A3 {) r8 w
  66.         RCC->CFGR2 = 0x00000000;
    / x2 F  ^) o( Q. X. L
  67. #else2 X0 ^% r" d) d3 q! [: L' L( z
  68.         /* Disable all interrupts and clear pending bits  */) k6 [- F) r# d$ @. a+ n/ }
  69.         RCC->CIR = 0x009F0000;
      n/ \' V0 N# O  r5 S
  70. #endif /* STM32F10X_CL */
      q3 }. R9 R" j- z4 V3 ]3 l
  71.   }5 t: A3 Y( s0 }1 h$ [
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)% e7 \) w6 V& B+ q
  73. #ifdef DATA_IN_ExtSRAM' y2 g0 n/ p6 w) p; t8 H; ~
  74.         SystemInit_ExtMemCtl();. ~7 X- p2 v1 N' Y( r
  75. #endif /* DATA_IN_ExtSRAM */
    $ g; c' W5 }* y  b
  76. #endif
    ! a/ B8 W( i0 T; g
  77. / u0 |7 A# I  Y; x. m
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */# F! E) n6 {2 ?) e- ]5 i
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */
    2 M, O; g3 z# w6 _  X
  80.         SetSysClock();
    # L+ {+ k! p, q, \

  81.   r$ b$ u9 J% `* B
  82. #ifdef VECT_TAB_SRAM
    & `, e5 \# s2 }# g
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    + g" \( f5 T/ P/ a
  84. #else7 H0 ^  L- v2 {+ l7 ~
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    9 U0 s  R3 w5 `3 L1 M- r
  86. #endif( D# F) ?* X" M: I: n1 f" q6 @
  87.     }# w; Z1 g* g7 \( K4 Q! _$ K
  88. ; S" X% Z! c+ ^; _' |
  89. #endif
    # v9 m  D4 V5 Q) [8 m/ C
  90. }$ 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
收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似技术帖

官网相关资源

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