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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-1 17:15
首先说明一下芯片内部并没有时钟, 而是内部振荡。! d. g! J3 B) Z3 L
使用内部振荡的好处是外部无需设计晶振电路 ,再说的简单点 ,不用外部晶振依然可以让单片机正常运转。! \/ g( g% Z, }* q0 Y9 q3 H
书归正传 直接开始配置
- O6 V* {. T# M. b, V

- Z! L4 ?4 \0 |& B打开任意keli工程
- f- {- M& I# m- ^0 R1 d* p
1 R3 ~) b; E0 I# h; \
3abfd84a31744e26becb5fac0ecf553d.png
! b* J9 {- J% d( ?+ P

/ E/ \8 M( X- `- n: v) ^* f打开system_stm32f10x.c& Y9 a, n& T8 u: [+ \$ {

' f# i3 ^" q) @/ G: V5 V7 }
15651841425044cfb9c3695a9017a21f.png 3 Q4 b7 Y1 J# g8 C! D$ L( b

, o. G3 v) u7 {  u3 E* H2 V$ h% A" R) n找到systeminit函数 全部注释掉' l+ E! F: W. R

% x: _% ~# E! @. h7 S
51791e66d6cb45ddabcd4982bac9425b.png 2 @6 t+ Z8 r$ L7 w# u3 c6 d3 J

0 T+ c' q3 }! H$ W% A$ ]% K/ l2 O$ h然后在下面粘贴以下代码(这段代码来自CSDN的一位大佬,我不是原作者)
0 p! {+ a0 i- p& L3 `: |( b3 c
5 ]6 z: k$ I7 f/ N: U7 V
直接替换就可以用了
8 o3 P7 F  T  T6 l
  1. #define  USE_HSI   1                        // 是否使用内部晶振  0 不使用  1使用) X2 ]1 k* w- \$ I) R) }( f
  2. void SystemInit ( void )$ F% j" n7 d3 j" E1 F' b
  3. {
    6 f9 g- Y# E3 N, L% q+ u6 g' h- r
  4. 4 u1 e) ]* }* P" x& l7 S7 w
  5. #if USE_HSI
    0 I# M$ ^1 c9 t' Z
  6.     {
    ( S# R+ i- ~% r! T3 w! w
  7. //设置使用内部晶振; s& B) U4 P; o( A3 j7 j
  8.         /* 开启HSI 即内部晶振时钟 */$ `$ g6 V: x+ Y6 H( g" P
  9.         RCC->CR |= ( uint32_t ) 0x00000001;1 c( S- J" J, a7 k$ x+ a: q6 X
  10.         /*选择HSI为PLL的时钟源HSI必须2分频给PLL*/  B' A9 C# _4 N6 Q+ R
  11.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLSRC_HSI_Div2;
    " Y) Q7 U7 d: x
  12.         /*PLLCLK=8/2*9=36MHz  设置倍频得到时钟源PLL的频率*/
    1 c: r6 B$ {7 |$ W! q$ e1 T0 L/ n+ k
  13.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_PLLMULL6;                         //设置倍频后的频率9 {* [) P& K! [. G
  14.         /* PLL不分频输出 ?*/
    ( r5 t7 r4 ?$ W* A# s) j- @: k
  15.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_HPRE_DIV1;* y& E  h  {' _, I; {% L* S
  16.         /* 使能 PLL时钟 */5 _' n, Y% H- q0 O7 q- T
  17.         RCC->CR |= RCC_CR_PLLON;
    ( c& U' G1 V7 e8 F. ], V3 v
  18.         /* 等待PLL时钟就绪*/
    * u* Q* w0 }1 M/ P0 t. F) ^
  19.         while ( ( RCC->CR & RCC_CR_PLLRDY ) == 0 )
    + U) ~% I$ i( ]
  20.         {
    ) i4 [8 O; ^) x  M
  21.         }% |" U$ C6 n& C0 ^- N
  22.         /* 选择PLL为系统时钟的时钟源 */
      m# p; s! I5 I- l
  23.         RCC->CFGR &= ( uint32_t ) ( ( uint32_t ) ~ ( RCC_CFGR_SW ) );8 G! L" U; w5 l
  24.         RCC->CFGR |= ( uint32_t ) RCC_CFGR_SW_PLL;2 Z" g+ I: `& E2 R0 a! u2 E/ _
  25.         /* 等到PLL成为系统时钟的时钟源*/
    + m: ~* V( ~( O/ S8 o; `, i
  26.         while ( ( RCC->CFGR & ( uint32_t ) RCC_CFGR_SWS ) != ( uint32_t ) 0x08 )- h' a. K( {& m$ o' {+ J5 ~( u# j
  27.         { }
    . I0 W9 z$ y) R1 Q: F
  28.     }8 M! H( R/ ~" v
  29. #else- ^& u: M, |' Y: \% T
  30.     {2 R. G  ?7 k; I5 v. `8 ?6 i
  31. //设置使用外部8M晶振& I+ x. L% i1 G6 I7 E3 F
  32.         /* Reset the RCC clock configuration to the default reset state(for debug purpose) */
    / Z3 E; x) Z6 d" b: V8 E8 u( Q8 S
  33.         /* Set HSION bit */# k/ l: K* {* g6 Z6 ]- M
  34.         RCC->CR |= ( uint32_t ) 0x00000001;: r0 M- {. {/ D6 f6 j6 w
  35. 5 R& N* I- N# J" X0 o
  36.         /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */- z, y% I2 B, f6 E& A' C. E
  37. #ifndef STM32F10X_CL
    $ `$ B3 L! [2 ^% F( l) i
  38.         RCC->CFGR &= ( uint32_t ) 0xF8FF0000;* T! f1 }& Y/ f6 y
  39. #else0 O5 b& `" C6 d, E' w- [
  40.         RCC->CFGR &= ( uint32_t ) 0xF0FF0000;: U9 c. ^; ]! d" |
  41. #endif /* STM32F10X_CL */
    9 E: O. j" C& d' f- ~1 ]

  42. % d/ g5 L+ u8 Z2 |
  43.         /* Reset HSEON, CSSON and PLLON bits */' R3 V0 s1 ^& ?% f: I
  44.         RCC->CR &= ( uint32_t ) 0xFEF6FFFF;# e8 h1 s$ k9 n3 z* ^* k. A

  45. 6 G8 \5 y& r& p: @- H2 C1 n
  46.         /* Reset HSEBYP bit */4 A* }, j  f9 j5 C' @3 P
  47.         RCC->CR &= ( uint32_t ) 0xFFFBFFFF;8 U/ u" u: m% W3 Z6 O) T( q

  48. ! R  ~; M2 c" [6 r9 K' h
  49.         /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */: L4 N0 y0 T  K9 S8 \
  50.         RCC->CFGR &= ( uint32_t ) 0xFF80FFFF;& \* B5 p0 y/ a, |4 W! b
  51. ' l& d6 i1 @% P& H" G4 G
  52. #ifdef STM32F10X_CL
    9 {) P9 G7 S: A" c4 N0 @' t" f
  53.         /* Reset PLL2ON and PLL3ON bits */1 {+ f: F9 Y% t5 t, i4 u! A
  54.         RCC->CR &= ( uint32_t ) 0xEBFFFFFF;
    0 H9 J- B, Z) K9 t7 r2 b4 F' n
  55. 3 L2 R& ^+ t% {
  56.         /* Disable all interrupts and clear pending bits  */% P' C2 \5 R" ^2 Z
  57.         RCC->CIR = 0x00FF0000;
    # k4 L$ G& O) P5 h' n

  58. 4 W3 d3 ?/ v2 F7 [- w/ y- i9 i
  59.         /* Reset CFGR2 register */
    0 x/ R- P9 \- M0 B, P4 a' l
  60.         RCC->CFGR2 = 0x00000000;
    4 h4 ^/ g* K4 t; ^* P% \7 p
  61. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL): A( y* l7 J7 u* J, L' R* G; e
  62.         /* Disable all interrupts and clear pending bits  */
    # v' Y/ x" w& L
  63.         RCC->CIR = 0x009F0000;& e0 Q. k  s' x% b5 [0 X. j! c
  64.   `9 _( D) w% {& J$ O" u+ \' @
  65.         /* Reset CFGR2 register */! \, H/ U9 v) {
  66.         RCC->CFGR2 = 0x00000000;
    4 [" B5 o3 \4 N) x
  67. #else- v( ~' o7 T3 O8 P
  68.         /* Disable all interrupts and clear pending bits  */
    0 H6 x8 m2 d  U& ~5 w- x
  69.         RCC->CIR = 0x009F0000;5 T* m+ t$ G4 ?/ F
  70. #endif /* STM32F10X_CL */2 W# h8 Z, t9 H6 A5 [

  71. * a$ N5 [8 b+ a. U! \% G
  72. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    5 w8 @3 p+ l6 C" b5 X
  73. #ifdef DATA_IN_ExtSRAM
    7 G3 @. W# f! o9 x, m3 p
  74.         SystemInit_ExtMemCtl();6 \0 s5 B6 X5 E2 ]/ P
  75. #endif /* DATA_IN_ExtSRAM */
    + J+ B* `2 f; n% K$ \( k( n
  76. #endif
    , `  X, x, x) [8 h
  77. ! a: T+ x, ]' [* ]& L" Y, f
  78.         /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */0 k9 o; x. P2 g9 ]! r% e+ ?0 ]0 t
  79.         /* Configure the Flash Latency cycles and enable prefetch buffer */
    1 @" S* Z5 f7 H3 |& B2 u4 `+ i) l; k
  80.         SetSysClock();
    # x/ `0 I# y' E0 \+ E2 x0 P

  81. * y$ O& w% H9 S9 ?
  82. #ifdef VECT_TAB_SRAM8 R6 u7 X2 e8 B7 s" z) i* s
  83.         SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    . G  [8 u; p* u$ R6 Q
  84. #else
    & z. W" P- J1 i! ?
  85.         SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */; l  d1 A1 Y3 \4 y' w
  86. #endif' i9 ~1 i! n- R2 r* |
  87.     }. F9 N. _8 X+ X

  88. " \0 E+ V9 T+ x) b. i
  89. #endif
      ^% x7 Y+ S  ]
  90. }
    6 f: q0 j- J1 k! X) f
复制代码
9 x# r1 R( b, P, X: `( _# ^
然后我简单拉高/低是试了一下引脚的电压 是正常的 大家可以去试试
$ B* i1 |# T- Z————————————————; q" h% ]- [8 ]; ]( V
版权声明:文某9/ X5 F( N$ ^: g4 u( F
如有侵权请联系删除
- y/ M4 q. B1 _1 U
3 f( b& S7 J2 I
* h$ {5 z5 ^& \: X; \- i% ^; p) G
收藏 评论0 发布时间:2023-5-1 17:15

举报

0个回答

所属标签

相似分享

官网相关资源

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