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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。* p  i& ?# o8 Q' y+ u
  1. void SystemInit (void)7 M4 a0 O( d: d8 @  d3 h& l/ N
  2. {* f$ V1 |! r4 T% C
  3.   /* 使能内部高速时钟 */
    . i% f' [6 O& N( m2 P" H
  4.   RCC->CR |= (uint32_t)0x00000001;+ \; H& f2 M# c7 U7 k9 c( e
  5. ) D% c3 Y  L4 c1 i! U0 M
  6. : v: U6 Z" k; ~& e( _+ w$ `
  7. #ifndef STM32F10X_CL
    / w0 s8 j" b* Q5 D/ C
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;# f! i" d1 T2 z) `7 |( ~4 R
  9. #else' M& x1 D0 u5 @: t) J) Z
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;
    , y! m) J+ {3 F6 e  Z  N/ G! b$ C
  11. #endif
    ) L' \8 M, H7 n) v3 r. S. A' c8 Y
  12. # h& C6 j' E9 R7 m$ I9 i3 _
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */7 ]6 L  C& G1 _
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    2 A% r- a0 {) w' Y  V# G

  15. 8 M" h5 S* W# i! j& @
  16.   /* 外部1-25M振荡器未被绕过 */
    1 u- u4 K; r' b- L! P
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;+ h5 X% _/ W0 A; p

  18. 9 L7 @" X' m! w( D7 N
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */! R! B4 c' H1 J/ S$ J, _1 N( _
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;- S5 m% u% o/ X3 w$ L  y( P
  21. * W* O2 u/ O; X! v

  22. 5 G  w, L* t( C; h+ W
  23. /* 禁用时钟中断寄存器 */
      X4 j! v7 T5 w
  24. + `+ E/ S5 k: ]+ p  }! P$ B
  25. #ifdef STM32F10X_CL, H. ^, Q* D; @8 y4 N
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;
    1 R7 G( ?# x4 s1 t
  27. % n0 O6 j% ~  u# w
  28.   RCC->CIR = 0x00FF0000;7 c  u+ \. x" y1 S/ J$ c
  29. : X& c8 j3 y/ ?* F, R0 L; G
  30.   RCC->CFGR2 = 0x00000000;( N1 ~2 _( R4 {* k5 \9 b6 _9 X
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    " |$ u7 k9 V$ N1 l6 [( k
  32.   RCC->CIR = 0x009F0000;
    . ~0 w+ g! Q9 J5 Q5 [
  33.   c. i# b3 s; {) o. p: v9 C8 F
  34.   /* Reset CFGR2 register */# y/ U* @5 V7 N8 p" C  z
  35.   RCC->CFGR2 = 0x00000000;      
    1 r0 G4 L- b2 w2 X
  36. #else
    3 E* ^- l7 I% J) a: L0 R3 i# B* L: i5 z
  37.   RCC->CIR = 0x009F0000;+ P' `/ Q1 e$ I  P4 [6 i
  38. #endif /* STM32F10X_CL */
    $ r, }  s- Z$ F/ D
  39. ' U+ c8 P  `# R8 z
  40.   p( g; C- J# h% n/ x8 D, P
  41. /* 设置外部SRAM */
    ! Y( r; i6 T: ~6 O
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)3 l( j7 G+ p* D, g
  43.   #ifdef DATA_IN_ExtSRAM+ f( h0 b  x4 B2 l5 p4 l" b
  44.     SystemInit_ExtMemCtl();
    9 S' E$ T. y9 k# r1 [8 P
  45.   #endif /* DATA_IN_ExtSRAM */2 `- ?  U8 I& R, B$ y. j9 U* |0 a
  46. #endif* O7 e; y( Q" }; R; g
  47. 3 N5 }; X$ C' z. |# l: Q
  48. 4 ^, V6 b' F4 Z# R
  49. /* 配置系统时钟 */8 j+ \9 a5 o; K5 R7 c/ f
  50.   SetSysClock();
      B2 u/ H) W' ]8 @) l8 A
  51. 3 K- q& z5 b( A0 B1 f6 d
  52. + y  m1 Z; N; c/ i2 a
  53. /*中断向量偏移地址设置 */7 S* F4 _- U" U( p) F, C5 z
  54. ( q7 |6 T) _' s5 J% \: H
  55. #ifdef VECT_TAB_SRAM6 R4 S" m: X- ^) E8 x0 `. |6 N
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. *// c9 ]5 }$ v' M6 l) Y
  57. #else
    ; D. _! O' h1 t# y$ v
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */% f" Y- u0 R/ G% Y) \$ t' [" P
  59. #endif
    ) T+ j# v* x5 a
  60. }
复制代码

3 [# ^7 c9 \, Q. q$ J2 i. n+ y' Z8 _) c4 U5 e

% X% Q/ S* F3 h7 t/ e. v" b" ~
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版