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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。8 W# l5 [) ]6 I9 M: T" ?
  1. void SystemInit (void)
    # d: }$ g: }. `0 ?! g0 A/ V
  2. {! d- l$ U( n6 c+ f! O! ]  ~' X8 Q
  3.   /* 使能内部高速时钟 */
    ' c  Q5 W% ~+ D5 o/ g
  4.   RCC->CR |= (uint32_t)0x00000001;
    ; S, r2 Z/ i9 l$ H+ Y+ z( ~8 z
  5. 6 W3 d8 |  E/ ]" w

  6. $ N$ A& {' A5 ^- Q; R' Y
  7. #ifndef STM32F10X_CL; e/ H/ x7 G1 z
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;9 `+ k9 ~; |; o1 V$ ?' w' H5 e
  9. #else
    . a. L  q) [0 p8 z6 q
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;9 z- l4 j3 ?+ y2 n- n: [# l4 _
  11. #endif
    6 S7 r. |% G# q8 t1 J( y

  12. $ K  _- g9 X* q. L5 _1 p  d
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */9 f# X  p# U1 E" j. b
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    ' U- ^; l2 i4 z3 ^" J
  15. / C( H! C8 E6 d  L1 @
  16.   /* 外部1-25M振荡器未被绕过 */
    ! G4 f+ `! B2 q! b1 U) a
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    / C" x' v: {9 a7 T. Z
  18. " R4 b6 @' H) {. S
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */
    1 T; @. m0 p  b3 X# z, W1 c- c) x8 A
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;- E& n- d9 ?' C. D

  21. : P: m+ T7 `# w+ n2 V$ K  `, q$ {
  22. ; @+ d* Z! y( w% y# L7 R
  23. /* 禁用时钟中断寄存器 */4 s  R! E/ o! v2 S( w9 g8 Q! `
  24. / y: m/ y5 W6 E
  25. #ifdef STM32F10X_CL
      c/ [5 Y+ Z0 N, x" a" s* ]( I
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;
    ' I5 z, Q& X3 X
  27. 8 S3 m: A6 J4 t. u1 `& |. v
  28.   RCC->CIR = 0x00FF0000;
    3 X" F) g4 U' I9 ]% @8 g# s

  29. - ?; R( e9 z8 [! W* W# M
  30.   RCC->CFGR2 = 0x00000000;
    8 a3 q' l# b" w# I
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    ) d- z2 w6 t3 s1 H2 y* P
  32.   RCC->CIR = 0x009F0000;
    1 k, E% v, G) d6 i1 Q3 u9 z+ h* o
  33. 9 U% p* f# ~$ a! W- l
  34.   /* Reset CFGR2 register */+ C$ w7 w8 F% B6 V% h$ O4 ~
  35.   RCC->CFGR2 = 0x00000000;      % z; {5 V- i) Y# _& N  i( H
  36. #else4 i! i4 b/ u6 j3 _$ v
  37.   RCC->CIR = 0x009F0000;8 U+ D; E) v+ g  B
  38. #endif /* STM32F10X_CL */3 E3 O% A) U; {% w: U8 x
  39. * t; T& C2 U+ T" u2 H
  40. & C2 F/ n4 F. [1 ~+ A) X
  41. /* 设置外部SRAM */  K, h$ Q6 O% r5 }9 A7 h" n
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)9 U' G! C2 p5 ?6 a0 d, G
  43.   #ifdef DATA_IN_ExtSRAM
    2 H/ {- ]- i$ R9 C
  44.     SystemInit_ExtMemCtl();
    ) N& ]* y* A" `, [2 K
  45.   #endif /* DATA_IN_ExtSRAM */
    " z& f& m8 b) V1 V
  46. #endif
    + ]* L! t2 q3 ~! G5 I6 X5 o# L, Z) q
  47. - L  i5 m9 Z6 |8 k" H

  48. 0 P) b8 ]2 |* Y3 n
  49. /* 配置系统时钟 */
    ) i$ ^% w$ N' e3 k' G" E5 L, s7 L
  50.   SetSysClock();7 v6 Q; j+ E  |
  51. 1 j$ J9 \7 e4 j4 [7 O

  52. - F/ [. u/ X( a! ]
  53. /*中断向量偏移地址设置 */
    9 d* y! T1 r# }, b% L" s. p3 s. f# D

  54. # O; P9 Y0 E! n
  55. #ifdef VECT_TAB_SRAM
    , Y9 R2 ?) ^7 g; z$ m4 h
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */6 O$ T/ a, v; E% @- ^
  57. #else
    : c6 M- _1 M& L+ ]1 D6 P
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */6 J9 S0 v3 d, h9 F
  59. #endif
    # v9 `8 G4 m7 m, m3 v
  60. }
复制代码
, Y5 G1 b- N( Y7 K* o

2 p# @  x* ~6 [5 e+ m
: e' S  W" j3 l5 N; B
赞 收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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