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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。% E# f1 J& A1 v- H  ]
  1. void SystemInit (void)
    8 n$ y: `& S' y6 E$ x
  2. {% ?3 G, V7 ^. d; Z
  3.   /* 使能内部高速时钟 */  V; K6 E! U" u: h
  4.   RCC->CR |= (uint32_t)0x00000001;
    , B( i; g! k/ t4 ]+ g! n
  5. ; W6 L( }8 w0 L0 J, C/ [4 P( p
  6. , P9 S$ O. |! m3 }4 i
  7. #ifndef STM32F10X_CL
    * {. d2 `" ^6 P" P3 ?& h" ]! q; x
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;6 p+ k- y2 `* F, E
  9. #else
    & c* l6 D' p1 g' h' b# R
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;1 X7 Y7 _4 ~* a# ?' W
  11. #endif
    : X, _/ l" V  C. t4 U! S& r
  12. 4 V3 `" p6 s, R! [
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */) o3 ^) x9 \2 ]9 t- j! K+ w
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    / O3 L. E+ B. R  i; G2 z" I" n
  15. ! n5 [/ g$ N8 x( n
  16.   /* 外部1-25M振荡器未被绕过 */
    # f4 g3 {5 r$ d# D
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    ' E& l! \/ X1 A8 ^8 l

  18. 3 l0 e( E" y1 B" D/ d' R
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */3 r1 U# p- b& _
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;
    9 j1 S) ~1 L% c# f3 p- B
  21. * V: j$ v0 r5 d0 ?3 f

  22. / ?. m& ?3 Q6 J) u& H  g9 @" T7 M
  23. /* 禁用时钟中断寄存器 */
    8 {  G& s* [2 H0 s
  24. $ n8 N+ J1 G  X1 T+ c6 ~) J
  25. #ifdef STM32F10X_CL
    9 ~8 f9 o/ N3 W0 r7 z' t
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;, J9 K/ W/ H0 c' h6 F+ Z+ R

  27. $ d; e* f9 S6 K2 p
  28.   RCC->CIR = 0x00FF0000;
    - t  L8 B, t) H& ~9 _" J: {1 s
  29. ) c9 y6 j5 s! f  E4 |
  30.   RCC->CFGR2 = 0x00000000;  m, |4 l2 M# Q- K5 q! ^
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/ U5 `8 w5 e  f0 o2 O3 q+ N
  32.   RCC->CIR = 0x009F0000;9 H% e! D7 Y4 w/ F  x' C" u
  33. * |: M# i+ x, j/ |1 N. T3 J2 _
  34.   /* Reset CFGR2 register */) T3 `$ Q" z3 W- G
  35.   RCC->CFGR2 = 0x00000000;      
    ) W4 `+ I6 g' P/ Y
  36. #else6 P  T4 u. U* y# a$ ]
  37.   RCC->CIR = 0x009F0000;
    4 J9 k$ y! x3 c0 G
  38. #endif /* STM32F10X_CL */
    / A: y; _8 y5 `8 e5 F- ^

  39. 1 W9 j2 Y; q1 @9 l5 G6 X# [

  40. ) |3 Q, Q0 R. L* s& w; c4 v
  41. /* 设置外部SRAM */- ~/ a2 T! Y( A4 j
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)6 X1 [* p/ J! \, p3 s/ }2 U
  43.   #ifdef DATA_IN_ExtSRAM
    % z8 U' q3 K$ H6 c
  44.     SystemInit_ExtMemCtl();
    # A5 g( J! {' h3 n# N) C
  45.   #endif /* DATA_IN_ExtSRAM */, G' d7 a& z' g  Q2 s
  46. #endif
    5 x% T. [4 q4 m! I
  47. 3 d- F8 R. F! I( C% W

  48. " y; w# \4 A& X3 j$ [2 e
  49. /* 配置系统时钟 *// U) J1 N. F# c+ l
  50.   SetSysClock();
    1 b# W! m$ X) f
  51. / V! a- o) E/ c6 h/ Y9 @

  52. 6 R3 h! s4 A5 f& G
  53. /*中断向量偏移地址设置 */
    5 l& Z& C4 @5 w$ x  `, `% m$ g
  54. / f! z9 ~& k/ S- \
  55. #ifdef VECT_TAB_SRAM. o% ~' k+ J+ E" h
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    $ m$ m0 s- f) @' ^8 H
  57. #else
    + w. q; ?6 C" E& g" J% ?
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */6 i! b* c) |5 w# t5 {" g
  59. #endif $ B+ X- t/ V! Q
  60. }
复制代码
9 G' Z7 `: J7 |

5 ^6 s0 @2 K$ d8 N7 B
& o- q% a2 J! M. [7 \' d
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版