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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
- n( ]/ L, U9 @6 h% Z
  1. void SystemInit (void)' E, w2 b+ ~3 e. ?5 w
  2. {
    / M6 {* m: _" Z, N3 ?
  3.   /* 使能内部高速时钟 */, S7 O" F& X$ u2 x" B) d9 g
  4.   RCC->CR |= (uint32_t)0x00000001;
      c# k8 Q9 N, F: i4 ?$ S* d& ~6 W
  5. 4 {! x3 N( D% E  Z3 K/ O2 V: ~8 D

  6. ) z* c+ ^4 h4 `3 f1 }5 y" Z% H
  7. #ifndef STM32F10X_CL
    7 ?; m; m& e' Z& P
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;
    # K2 h7 _7 I3 u" v+ d
  9. #else
    4 }% I+ L& O4 T$ _! L
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;4 S+ A' E! K5 _4 N  `
  11. #endif
    ' ^! q1 H  G3 A& ^" L) F' O/ R& `) F

  12. 4 K! I3 a* g% `! Z+ W
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */
    2 m* k) r' y; \/ [3 b
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    ; f& z: W' {' F  D8 }6 J. s% ]7 |

  15. ' _( @6 O7 X3 i) ^
  16.   /* 外部1-25M振荡器未被绕过 */
    8 Y8 `% u! D, j- Q0 E
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;; Z8 g+ S2 r- ^, `& o# H
  18. 7 _- Q7 j% s) |# w5 [0 @
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */
      Q$ M: f0 Q0 i
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;  A% T5 g6 F- w2 L" A% x* g
  21. ( @8 l& Y9 O7 D6 D5 f2 x
  22. 6 e* w( Q8 T% ~; B, a5 R+ f
  23. /* 禁用时钟中断寄存器 */  B4 f- l3 ]1 C4 A; G! u. W
  24. 6 z9 Z$ v" |- b
  25. #ifdef STM32F10X_CL
    2 K! n6 d2 u1 r- V; l1 X1 f4 X  ^) T
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;7 e% D! D4 u9 T7 m- u& F
  27. # e* @1 A) o4 q( O
  28.   RCC->CIR = 0x00FF0000;
    ( W0 @7 Z! G+ X" D) w% a( b. h

  29. 4 {' C& j8 H. h$ v% p7 U
  30.   RCC->CFGR2 = 0x00000000;
    ) G" x; x" h& z4 w3 C8 l% C
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
    : i9 k) T, @" _" E* x3 w
  32.   RCC->CIR = 0x009F0000;/ o4 K0 e+ i4 U6 I" n* j$ o

  33. % q: z7 a* G; C8 C+ K' w
  34.   /* Reset CFGR2 register */; M! O/ Y: y3 N' I8 g* b  c
  35.   RCC->CFGR2 = 0x00000000;      
    & ]; f, c' U& ?  ?
  36. #else
    # w+ u  ~2 h" J0 U! K
  37.   RCC->CIR = 0x009F0000;
    ' f, r4 U# X5 q3 N8 O. n, K
  38. #endif /* STM32F10X_CL */) m, U/ a3 h* X) f/ ^/ n

  39. 0 K# j" z' v  V6 G6 D

  40.   z1 N' T9 L) R) A6 `
  41. /* 设置外部SRAM */
    5 M) `  W% c9 i9 [; G: ]2 v5 f
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    7 F, @  r. s2 q& T
  43.   #ifdef DATA_IN_ExtSRAM
    5 `" k7 s! e8 [; K
  44.     SystemInit_ExtMemCtl();
    # [# ?) n, n5 a
  45.   #endif /* DATA_IN_ExtSRAM */$ H: h& |2 f& n( x% n2 B" J
  46. #endif
    0 V, ~' r; t7 ~+ d* P+ v
  47. . |  F* \" D: j8 k( t6 R, }5 |

  48. ( V+ Y  D) A# k! e4 _0 V
  49. /* 配置系统时钟 */* Q  v' d- }) k
  50.   SetSysClock();
    4 j) k" o" R- l3 y. P

  51. 4 x2 e7 M* ?: t% S8 V
  52. ; B/ v' U+ }" o
  53. /*中断向量偏移地址设置 */
    - J. l; M1 a8 \; [; \

  54. 9 q  b* G- G' E  n( P
  55. #ifdef VECT_TAB_SRAM
    " K: }, q$ w. a" [6 ]
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    1 |: K) V' m9 Z$ r: b) S: _7 B
  57. #else
    ; E' U9 p, _' N- e2 x/ z
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    ( y' X4 \0 L) b
  59. #endif # L. Z, W9 s2 w
  60. }
复制代码

2 L. m9 h& o' b
$ d5 j8 a6 ?- S  l
! B2 ~6 G$ {) R5 d. S
收藏 评论0 发布时间:2021-11-28 22:00

举报

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