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

【经验分享】STM32 system_stm32f10x.c文件分析

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。1 S" u3 E. M! Y+ j& d
  1. void SystemInit (void)
    2 u+ `2 }/ m4 e/ k+ Y6 O' z# {
  2. {* P6 o" V/ Q- v, K
  3.   /* 使能内部高速时钟 */: j4 n: `7 O1 L* L* s( A/ x
  4.   RCC->CR |= (uint32_t)0x00000001;
    $ ^1 I5 |7 h5 B4 j% ^
  5. ( _- H% n/ F  `# B4 d- f( j# g( o

  6. / E% i! ]: H( ]% }5 H4 v( H
  7. #ifndef STM32F10X_CL0 s! Y2 N+ D: F& i0 S' }
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;) O  l9 {& G; n5 ~( ]) e- u: d# \. Q
  9. #else# h1 o" o. r$ c+ C9 E
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;/ r7 ?" o* T/ d4 D6 M( v
  11. #endif  C, A7 i5 K0 h5 E5 |6 o
  12. 8 m# p9 L4 o9 P( c
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */+ C4 l. I2 @! S
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    # c( W6 P1 }! H  i

  15. 1 `  I4 x  n. g3 }. k
  16.   /* 外部1-25M振荡器未被绕过 */
    # _" J0 e8 ^" k' e; D
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    # }- r# n* }' y0 r9 F+ @/ k, Q

  18. ' e/ }" R1 ^3 Z& Y, T! S) @
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */; B/ l; O. E% z! F$ n' [
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;
    - r( Y  _- f$ Z: I9 T+ n4 S

  21. $ p. q+ v" d. }9 g7 V0 L
  22. , C5 w; j% Q; p& Z0 J0 Q0 J
  23. /* 禁用时钟中断寄存器 */$ D8 J+ ~+ W' R7 |, `1 L
  24. % o* y+ z3 Y) F8 I1 ]$ Z
  25. #ifdef STM32F10X_CL
    0 W8 u) d8 i% ^% [  }! c6 f# M
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;
    9 J2 V! u2 d. ?. K/ ~+ ^9 Y
  27. + K* b' }: T6 P- f& m9 h1 [! a/ f
  28.   RCC->CIR = 0x00FF0000;
    ; O2 p% B2 C- o! B8 I
  29. # z3 U0 t# Z, a( s
  30.   RCC->CFGR2 = 0x00000000;
    : t7 r7 o( L' B
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    ' g! r4 T1 C: X/ t  G) w- j
  32.   RCC->CIR = 0x009F0000;
    " o+ U5 r$ a. V. Y$ U
  33. ) j- I  N8 ]8 g$ _
  34.   /* Reset CFGR2 register */
    0 t. B! c1 p/ Y  ^" q* |
  35.   RCC->CFGR2 = 0x00000000;      
      Z& ^- m8 }; U
  36. #else
    , p3 F7 Y5 y6 m. T9 m; r
  37.   RCC->CIR = 0x009F0000;
    7 c+ w0 B0 W( O' A: |' A
  38. #endif /* STM32F10X_CL */
    9 D2 L8 ^3 u1 H$ a# J2 B
  39. 0 d, N; X8 O- x3 \

  40. ; a. V0 O( d( T4 n) i+ I4 H0 D
  41. /* 设置外部SRAM */# B) e* h8 R) r+ i
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    2 q1 ~% Y8 [& \/ R/ R7 j9 Y
  43.   #ifdef DATA_IN_ExtSRAM
    6 Q% m7 [, n" g4 ~0 L
  44.     SystemInit_ExtMemCtl();
    0 x# L/ t; D6 y: k5 s2 T. i; y
  45.   #endif /* DATA_IN_ExtSRAM */
    * F) H0 B5 o& o! u) I. k' S( p$ r
  46. #endif
    $ n6 d8 j$ s) S0 I4 L/ |% j
  47. 4 D( m/ J. s7 g! j# J+ D

  48. ) F+ a, U  \1 L* ?6 d+ r
  49. /* 配置系统时钟 */
    ( O6 E7 F5 F2 \& A  O  k
  50.   SetSysClock();& E" J" @2 K0 K' e2 l! J# w" R
  51. 0 B7 x9 _! N: k* G
  52. 0 M6 _0 t7 e, e8 l) k; Q2 u
  53. /*中断向量偏移地址设置 */$ P* W! ~& K" h
  54. " n% w) @! k2 p- F, U+ ?, ?4 ^
  55. #ifdef VECT_TAB_SRAM7 |. ^) [0 e( I
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */1 y, N2 j6 L( w" `2 [/ O* m8 r
  57. #else; u" T- D( `4 k, i& B
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    + D! y, G# @/ E/ G8 ?
  59. #endif
    9 ~& i5 Z, Z; h/ `# G, m& e: b. m
  60. }
复制代码
+ X. g# L6 u+ E" H/ ~) M8 X

: N% k0 y$ x. `8 a1 c$ U) F# K* B4 f0 G1 _; C- U) T/ \6 {% x; ?
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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