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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
& G( J) \- ~: g9 m
  1. void SystemInit (void)$ n( T( |8 l9 {3 B7 H
  2. {& K: h1 X$ P/ H
  3.   /* 使能内部高速时钟 */
    ) G4 ^3 X! ?1 y4 F: ]6 Y; }: s# b$ \
  4.   RCC->CR |= (uint32_t)0x00000001;
    0 A) `5 D: x, H( j4 g# W& P2 t1 Y* B
  5. " u# ?  h1 E  n$ y- I
  6. 0 x# U3 |/ v! ]% J( K* b" `  v
  7. #ifndef STM32F10X_CL
    / e1 y  @8 T) E8 L1 k
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;  n2 ]; F/ m. d: W% Y5 w2 y
  9. #else
    . m, N9 b9 e  I$ h; T
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;
    5 \7 x, O/ b; O/ d
  11. #endif& u+ e0 ]' \" u

  12. ; v' }% D# `- G+ i: I
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 *// x. D% t) M% `7 {0 H- i
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;, ^6 v8 y* \! u, y7 W

  15. * a5 y+ f9 |- o) g- g
  16.   /* 外部1-25M振荡器未被绕过 */
    " M' ]% @: U" r: b
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;! M# ]; q+ C! w
  18. 3 \7 B  R- M( u! w, M
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */
    * d2 j' E$ \$ H) b2 ^! V+ a3 h& c
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;
    , c/ F  y0 ~% u! Q+ _. m
  21. 0 z$ U' _; d$ W

  22. 7 T% B% e3 h" x+ i. o( n0 R
  23. /* 禁用时钟中断寄存器 */
    7 T# I2 M0 u" F' l

  24. % W2 s/ {7 p& Z
  25. #ifdef STM32F10X_CL, l# h. |6 m: V9 m, ^, F6 b
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;+ y& x; K- x# w+ B, `

  27. 7 s1 m, ?2 \; k" {- n
  28.   RCC->CIR = 0x00FF0000;
    9 r! H, [6 |9 w) e  q
  29. ( v! ^; s6 Q3 X# ]3 E+ \
  30.   RCC->CFGR2 = 0x00000000;
    . @. b! s* K( ~% \& |  U
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)* k* j6 }1 L& W" Z( w
  32.   RCC->CIR = 0x009F0000;3 @0 m2 u4 p# `' F3 ]! k+ @

  33. 7 J1 O& ]1 M; A; S, ~$ ^
  34.   /* Reset CFGR2 register */
    + U0 @& d& z0 t- `* g( j# R
  35.   RCC->CFGR2 = 0x00000000;      
    : y% s8 Y0 L2 Y+ }+ p; j0 v* |3 P
  36. #else! ^# U6 [* |, b$ Y# V7 d
  37.   RCC->CIR = 0x009F0000;
    ( i0 R# p2 Q6 I3 S
  38. #endif /* STM32F10X_CL */
    4 Y% c/ l* k8 }8 ?

  39. : [' v9 g% r# A3 n' O" y! @, t( c! V
  40. , p# B! l  @  r9 ^
  41. /* 设置外部SRAM */
    2 M. G2 V" f2 i; ?) P
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)6 F3 |2 I; g2 Q# o
  43.   #ifdef DATA_IN_ExtSRAM
    9 N4 Q1 N9 O$ G/ N: k" q
  44.     SystemInit_ExtMemCtl(); ) }2 l4 G6 B1 |* h: M9 O2 F
  45.   #endif /* DATA_IN_ExtSRAM */
    1 K# N* B) Y- ?2 {  \
  46. #endif3 R& l. [+ ^5 n, R+ B7 g

  47. $ c$ T6 r, h9 m% X- x
  48. " z) Y) y+ H! d  g1 E% ]8 V" k" b
  49. /* 配置系统时钟 */1 N" g6 I% j' o+ C" \' J! e' x2 }
  50.   SetSysClock();, K# H; o0 @; c

  51. # Q5 ^. B; Z  A- z4 t" n/ |

  52.   q7 B) z+ P# |7 W9 F! S
  53. /*中断向量偏移地址设置 *// R! Y9 V( |6 g# j( n4 l( b/ [

  54. # U; e0 f  F! i0 q# S- g
  55. #ifdef VECT_TAB_SRAM: V$ l' r8 B( Q( }9 e
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */0 l4 t8 W6 A4 X' P- S; e* s& U$ C- i
  57. #else
    # K+ f/ r) W( F' }- c+ K( ~
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    3 t- a" i$ P2 f
  59. #endif ' m  J5 \6 V; k1 y. t! M
  60. }
复制代码

* B1 ]7 c* a- H' N$ h
$ k1 ~  q  ?7 r
) T0 a. p9 U( b. W( m
收藏 评论0 发布时间:2021-11-28 22:00

举报

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