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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。# E# U  K5 K: O9 k6 ?
  1. void SystemInit (void). V# |6 Q4 s: O( t; U7 G+ [  t
  2. {$ w! @' E/ j6 A
  3.   /* 使能内部高速时钟 */
    1 M$ p7 \3 ~' i
  4.   RCC->CR |= (uint32_t)0x00000001;  s$ F% ]/ H1 M) N' w
  5. : D( j- k7 E; I* b

  6. - U+ c' h! c/ b
  7. #ifndef STM32F10X_CL7 F3 f, B4 j3 K5 @' k
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;
    + w7 W" y% U) P& B. K8 u
  9. #else
    $ |; B0 R4 ^$ j7 E
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;
    4 Q0 p6 P! `, Z/ t/ L9 t$ X
  11. #endif& c* B5 \2 e! I5 a2 l  p
  12. 2 Z& J4 u( M+ p; l& ^. n8 G
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */0 f; ~2 |$ ]+ `4 }# ~7 k, c
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;8 R# |, G# w" m: z

  15. # k* |. M! F2 O, N" d1 T; {
  16.   /* 外部1-25M振荡器未被绕过 *// V. u9 t# d; X7 D: _! n5 A
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    2 c5 n) \/ J- R8 g# d) {" V

  18. 5 n+ b( E# d& b1 M6 r
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */
    ) T- C2 D* d: n0 T- @3 l! i
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;
    ( r7 ~) S( w. v! b! J  ]; v
  21. $ |9 r' u$ _* i
  22. 5 W$ V, |! V9 ~- G% ^/ h, R
  23. /* 禁用时钟中断寄存器 */& o2 Y6 O8 ?$ z6 |
  24. 2 X* ^3 S7 N  e1 e6 g- Q" A
  25. #ifdef STM32F10X_CL4 }, ^) {, Z5 h7 D1 t
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;
      [3 B; N# r+ k2 \8 P
  27. " r9 J# O1 O( B
  28.   RCC->CIR = 0x00FF0000;
    7 ~: J5 M, g+ s# P

  29. 0 _$ W$ d) c; K2 L! k
  30.   RCC->CFGR2 = 0x00000000;
    ! D) w5 ?. B/ Z/ S
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)9 ?0 b( A. t5 ?- m6 C' }1 S
  32.   RCC->CIR = 0x009F0000;" [! @% v% Q$ P
  33. 9 m8 m  o- H; k$ |2 ]
  34.   /* Reset CFGR2 register */$ G0 r1 [7 ]& k: v! G, m
  35.   RCC->CFGR2 = 0x00000000;        s! ]1 L  W4 i3 r
  36. #else# Q/ A8 O3 ^$ I1 p, \$ f
  37.   RCC->CIR = 0x009F0000;; i: _" F" J1 V# O% ]; z5 g( ~' u
  38. #endif /* STM32F10X_CL */9 [4 H: s; u* n( J8 f8 D. \& v
  39. / ~! \* V; q8 k5 y

  40. # ^7 p, ?7 d: z* g2 d; H9 C
  41. /* 设置外部SRAM */. @2 \: R( |, t8 v" q
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)7 N5 c* @: S7 K7 C
  43.   #ifdef DATA_IN_ExtSRAM
    ' {' R5 X$ t  Q' c; P
  44.     SystemInit_ExtMemCtl(); % O0 I- w, l+ r% V
  45.   #endif /* DATA_IN_ExtSRAM */
    , n8 c% a" Q& F/ o6 ^0 ?4 P
  46. #endif5 }  h5 m# F8 w% u9 J& ?

  47. + I! h' K: @' j2 m) K$ {

  48. 6 h) d* p& z" _8 w/ A
  49. /* 配置系统时钟 */* l; j4 N* D0 j. r9 u) H: K
  50.   SetSysClock();
    % }% x$ d$ S9 o; f
  51. & p1 J6 t8 ^* L1 L/ R, Z

  52.   O7 }: h  ^. g+ h6 A
  53. /*中断向量偏移地址设置 */- u8 B, G8 T5 d

  54. 4 a+ ~, R' L+ T3 \
  55. #ifdef VECT_TAB_SRAM8 o9 e" M1 j8 K9 k
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    $ S% S, x, p" ^5 d
  57. #else
    0 f# Z& y, w# E6 L5 S/ A1 b
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */. y8 h! k8 }% A, n7 T' w7 b- |
  59. #endif - C* [( m+ j4 I: D; S+ c0 `' }1 G7 I
  60. }
复制代码
! z2 J7 O& B" P1 B1 H% ^, G
) j, y7 f2 M+ U' b

1 O& Y& N) B$ z1 ~$ p$ N. j
收藏 评论0 发布时间:2021-11-28 22:00

举报

0个回答

所属标签

相似技术帖

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