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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。* l& w. s  S3 v+ F9 z) n  r) ^
  1. void SystemInit (void)% O0 _) n& Y0 @" R1 I4 c/ ~# L
  2. {
    , N! o& o' {) [
  3.   /* 使能内部高速时钟 */
    / s, c2 o: U4 v. V% o' C
  4.   RCC->CR |= (uint32_t)0x00000001;
    ; L5 K% y$ u- F0 Y3 A$ A

  5. ( T7 d; x# Z$ C$ O, Z4 n
  6. * d9 a) w  q" ^
  7. #ifndef STM32F10X_CL# B: }( N4 J( p, i" i6 E) ]
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;
    * L3 E" ~" f4 d/ u4 z: p6 f& M
  9. #else4 _8 |. t* R) d  J* r+ e' I
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;/ H5 I% f7 g1 M3 @: F
  11. #endif. y- X' ~" ?. f% M, B$ r# s' c

  12. , E. [: v7 }6 h' u
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */
      u; T; Q1 s2 w1 O' b( d+ \! b
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;9 j6 q1 v, p; U, j6 H( j/ G5 Z" f% C
  15. : m4 m" \, X' U  Y( t
  16.   /* 外部1-25M振荡器未被绕过 */* v/ E/ U: ^" V' }: M+ k, R
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    $ K! `6 J0 s2 d1 X  @3 b6 n
  18. ) r2 x; H# G# T* x
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */* t! h: d* ^% q& K3 k
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;" C% [0 b; I1 f  w
  21. 5 S4 D" J* H* ^9 T5 x: N' _$ U

  22. , `- g  R1 [& Q" p' F
  23. /* 禁用时钟中断寄存器 */5 j7 g* ]$ l& G5 m; S
  24. , }6 Z8 S) b% @3 E; l( d6 I% W. w( L/ v8 c
  25. #ifdef STM32F10X_CL
    9 _8 w+ w" d0 b' w( e9 ^/ {9 T- A' T
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;  f5 Z4 B, ?3 g; _: i( j7 B
  27. $ `) v2 s: M' i
  28.   RCC->CIR = 0x00FF0000;
    1 p. t4 @( M3 f! F; V5 Z

  29. 3 U+ s3 l! I. \8 c2 E6 x
  30.   RCC->CFGR2 = 0x00000000;
    ( _  X/ C' s/ C& h* Y3 {# A- \
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)* @; f+ A5 w' }0 l  Z3 e/ c& F% L
  32.   RCC->CIR = 0x009F0000;; t1 W1 Z( J0 z6 h7 f- w1 M

  33. ) ?1 r/ G4 i! i0 m2 _
  34.   /* Reset CFGR2 register */
    4 a4 Y% p; V* b& F: ^
  35.   RCC->CFGR2 = 0x00000000;        y6 q- ?0 K/ O8 H9 G+ T% i
  36. #else
    & n* Y: |, D9 v
  37.   RCC->CIR = 0x009F0000;
    1 F) A4 J& q: O' ?0 K- F$ e& U  t9 }: [
  38. #endif /* STM32F10X_CL */
    9 ~, {4 l* v1 P6 f6 C  i( `! |
  39. 4 c  z& Y, M6 B9 [

  40. ' y4 e5 M' }+ h6 D) p$ t# ^
  41. /* 设置外部SRAM */& a' W) i  B: j: ~$ M
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)
    " P* O  T5 @! |5 v- U! g
  43.   #ifdef DATA_IN_ExtSRAM! V3 k9 M5 _0 [/ M' _2 t2 _
  44.     SystemInit_ExtMemCtl(); 1 \1 I( A# J/ B
  45.   #endif /* DATA_IN_ExtSRAM */
    9 d/ L$ Q# K9 L, Q( g
  46. #endif4 k) O0 g- e9 t! g, j% F
  47. 2 t- s# L4 f$ W: \' N# E0 X4 j

  48. 9 I5 A! Q& ?6 L, k% @" k5 {* b+ k( B2 g* b
  49. /* 配置系统时钟 */
    ( u; P# k5 i/ c) I. o% E
  50.   SetSysClock();
    0 R  N$ ~2 c2 o0 E. V- J- z( o
  51. . ?0 Q1 i$ M9 U7 x

  52. - j( Q) Y& z% q9 j! x: Y, a
  53. /*中断向量偏移地址设置 */% \- D9 n) \6 l# [$ v, Q+ i

  54. 1 X5 U$ v% q4 T4 @% X3 O- V6 c
  55. #ifdef VECT_TAB_SRAM
    2 W/ ?! J; ^/ f) q
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
      K, H8 n9 a% `/ y
  57. #else! e  x3 w2 n7 ~5 F- a" `
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    ! u! g& V) O* _, y* a
  59. #endif
      z* S4 `1 |* K  ?! N
  60. }
复制代码

, w& z  F" d1 o7 t$ f! }$ d+ Q" P4 u. g4 U, m- o7 E
6 O0 Z/ t1 x/ O8 [
收藏 评论0 发布时间:2021-11-28 22:00

举报

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