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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
; x1 a( b& H9 e" P* d8 I( u( K
  1. void SystemInit (void); u) ]) @: p: ^3 U
  2. {  w- a* a- g7 Q$ r7 t* K
  3.   /* 使能内部高速时钟 */
    * ]- ?% Q1 T. O# M. z
  4.   RCC->CR |= (uint32_t)0x00000001;
    * Q4 ?1 c' s# H  b0 W7 K

  5. : Z7 ~* P0 O- l% c9 {, H' Z
  6. 8 j9 O* V$ e2 R9 `! q
  7. #ifndef STM32F10X_CL4 o2 L" B1 X4 s9 W
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;! u" S) Z; T  x, G: a4 i: r1 S
  9. #else2 D+ w* a, K' F/ F+ V
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;
    . H* V. R# t+ p) v. T( z
  11. #endif
    1 k. E& `( C$ K& y3 n4 M

  12. * k  _, j8 m9 M! a
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */
    1 p% a/ n" g; j" s
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;- \* v8 T  |" ?6 y5 s

  15. " i; i7 r0 g+ V; N* N) ?0 V
  16.   /* 外部1-25M振荡器未被绕过 */5 F% K& @/ H6 R) ~( F
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;5 t4 K0 D5 [* L

  18. ( V9 W, B0 L+ w& K2 {: \
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */7 Y! I& }2 _* ~) i* G& r9 y: a
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;- Q9 M# b2 w) b  Y5 O3 T
  21. : b9 v: J0 f+ H" n2 H# e" T
  22.   c2 I. b! ]' I$ E9 i
  23. /* 禁用时钟中断寄存器 */9 _, r4 i( Z4 U% G3 C3 ?" f' l# r

  24. ! H4 F, [0 I. l8 v& E
  25. #ifdef STM32F10X_CL
    " N6 t! R6 ?( D) ~
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;2 m& ?' `8 c# d( y8 f4 u
  27. ) ~2 }: B6 q3 n& F$ g1 q
  28.   RCC->CIR = 0x00FF0000;' L$ x" B; c6 P
  29. 0 B  D; g6 v' ~5 S8 X9 V' Y; r; ]
  30.   RCC->CFGR2 = 0x00000000;
      O, ?9 |* Z" j6 `7 ?
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    , I( U3 u3 S/ ?! h+ r6 y: z2 Z1 p
  32.   RCC->CIR = 0x009F0000;
    ! F' p& {4 l3 @+ ?' t) |
  33. 0 \- y+ t2 C: R& K
  34.   /* Reset CFGR2 register */( Q9 U6 M% [- t& a* c6 o4 \' w
  35.   RCC->CFGR2 = 0x00000000;      ; }2 b, l( }) Z% I+ S5 O
  36. #else3 A' g# ]6 S! _) c
  37.   RCC->CIR = 0x009F0000;2 `& W9 }5 s' {& E0 o" @( _0 g
  38. #endif /* STM32F10X_CL */
    9 v3 O9 D& R; Y, Q2 O" R0 r
  39. , b1 s/ V  `0 D2 N1 I/ h

  40. - b& U6 T0 P/ T/ ?+ v9 t
  41. /* 设置外部SRAM */
    ' _0 i8 b7 H) M5 q
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    . @1 F) z4 B* f7 y  {
  43.   #ifdef DATA_IN_ExtSRAM+ F9 L7 k0 D; E5 [* D
  44.     SystemInit_ExtMemCtl();
    5 H$ \* G4 p- {8 y1 w1 o8 i
  45.   #endif /* DATA_IN_ExtSRAM */. w& W) ]. F0 J* x7 z, [6 N
  46. #endif! R2 {* V4 I7 O3 f+ a3 A

  47. $ r9 Z* k, X. C2 W' p5 f" {
  48. + o* d2 I, C6 N/ ~$ d7 O
  49. /* 配置系统时钟 */
    6 E  r' z* [( W7 q7 V
  50.   SetSysClock();' b/ F# }- F# g, Q5 }  a& `
  51. - B3 @' }4 H$ K0 {4 F4 n
  52. - I4 t, x9 U. s/ V
  53. /*中断向量偏移地址设置 */3 y# y( V, R3 W; W( F: J5 }

  54. 9 i+ L) U+ m' l- l, V6 Y; h% W
  55. #ifdef VECT_TAB_SRAM* \7 {- e0 t. `. J' k" I
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    : Q! M# k5 J' M! I/ _) `" K: x
  57. #else3 \1 ^: T# S2 b7 u$ G  ], C! X7 V
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    2 b+ V- J/ D/ V, o/ z7 ^! c: R, {/ w
  59. #endif + c- _+ L1 y# ?4 r) T5 \
  60. }
复制代码

4 K  O/ J/ w  ^' q3 E6 e6 B/ L' U, C6 }! }5 o9 S3 }0 O3 y: i% K6 P" N
, q3 h" K& j5 T, f
收藏 评论0 发布时间:2021-11-28 22:00

举报

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