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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
5 G; p7 L4 \, d( r! p
  1. void SystemInit (void)+ P; V# D7 Q- @4 k
  2. {$ o/ E0 {7 G6 v
  3.   /* 使能内部高速时钟 */
    ' R6 _& y2 F* s8 I% C% p: A
  4.   RCC->CR |= (uint32_t)0x00000001;9 |0 [$ m6 V% g* d
  5. 4 K  M6 p2 G' [( p# H4 X* B

  6. . V5 c" X$ B1 m5 P- S+ d& |
  7. #ifndef STM32F10X_CL
    * Z1 r5 U7 L+ ~  }
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;& I& R; Z: R, s8 g- R
  9. #else6 k, I& N: Q, }* s9 u9 |
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;6 T$ N! m/ `$ I3 X, f) j: J
  11. #endif
    " ?' V4 b. D7 b) M9 c/ @

  12. % p1 c  P! P+ `. ?
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */* D( z+ p9 _* z' t4 N% g& i
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    1 I% @$ g5 |6 i

  15. ' v9 B- H1 O/ s* m) L4 c0 ?
  16.   /* 外部1-25M振荡器未被绕过 */
    4 C/ V* z4 m. y7 C' l
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;$ Z% j/ A- w" q  s) h& n

  18. 7 `$ f  q. r2 P% O( G1 K
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */5 a' l0 W3 N& q1 \9 f
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;
    6 |3 e' ]# V6 c5 ^
  21. : ~, _( C7 ?. F% g$ g4 D

  22. 2 R8 |' a& c8 }! p2 {
  23. /* 禁用时钟中断寄存器 */
    - o, N8 y  A* g$ W

  24. & e8 j/ @1 W2 c
  25. #ifdef STM32F10X_CL
    8 j# A- E, r4 f8 T" G# X3 f
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;
    / b( A4 D4 d. f0 A8 D5 P. @

  27. ( z! U% x8 q% w
  28.   RCC->CIR = 0x00FF0000;
    ) H! ?5 e6 U4 w% s' N! {! u7 j
  29. * l9 b/ M4 \7 z1 z7 o* T3 M' |
  30.   RCC->CFGR2 = 0x00000000;0 a7 k) w; p: F
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    2 @) O/ |, |: I
  32.   RCC->CIR = 0x009F0000;
    9 j. |9 E. [5 z) S
  33. " z& m# q- `4 L! A6 e
  34.   /* Reset CFGR2 register */
    & n+ w# j; |+ @# r
  35.   RCC->CFGR2 = 0x00000000;      . f3 l+ [, m% G/ E4 J4 X( f. i
  36. #else. u8 Q! y$ R7 o& X0 h; L6 y
  37.   RCC->CIR = 0x009F0000;6 o5 T1 t) ]% y
  38. #endif /* STM32F10X_CL */& p3 l/ O0 y& z) B

  39. 6 j( S4 `9 x4 _4 Y: V2 X6 ^/ j6 {

  40. & G' W2 t. W+ X6 \
  41. /* 设置外部SRAM */
    ) E2 T* k) _% Q) }/ F1 B
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)( k. o$ X) j" y, A( D
  43.   #ifdef DATA_IN_ExtSRAM9 Q$ m+ V5 }8 f& _: S5 N
  44.     SystemInit_ExtMemCtl(); 6 r* o. Y4 ?* ]0 k# O2 }
  45.   #endif /* DATA_IN_ExtSRAM */
    5 r. x0 D8 d+ b1 W
  46. #endif7 g6 H! i) v5 g6 ~2 x

  47. ' \; q- [& \, b3 v5 S

  48. # b2 R2 L3 E7 {" f
  49. /* 配置系统时钟 */1 q- v2 r+ p- L" i  d4 ?; g6 E$ ^
  50.   SetSysClock();
    2 D4 c! i" e3 z
  51. - l' \9 ^. j4 A& p  c1 P' t, j+ U

  52. ( M0 o5 m1 N# a3 e: t
  53. /*中断向量偏移地址设置 */
    8 Q: u: \7 Q, C& _
  54. & I0 i" Y% \' v& C1 A* O
  55. #ifdef VECT_TAB_SRAM
    3 A, g4 H9 Y  V; |
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    7 s; `4 R- D2 k$ N5 Z
  57. #else
    4 V' Z! U  Y" x4 T
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    % D2 }8 [4 b& ]$ P" b- l/ l! R7 v: {! r
  59. #endif
    * j' f$ [) j% B
  60. }
复制代码

6 e' S9 y7 x" t8 [3 G2 @$ O& D5 O+ J6 G' h  R

: U( j  }( D* E% j
赞 收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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