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

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

[复制链接]
STMCU小助手 发布时间:2021-11-28 22:00
startup_stm32f10x_md.s文件中,调用了一个叫SystemInit的函数,该函数其实在system_stm32f10x.c中定义,旨在初始化系统时钟、初始化外部SRAM、设置中断向量表地址。
+ ~% N( `6 r& A' x; n6 d0 c
  1. void SystemInit (void)
    ' J$ D+ u; I$ r. r7 o
  2. {
    7 Y$ a! C1 A% P; z$ q7 h0 i
  3.   /* 使能内部高速时钟 */: v2 K/ l' B6 \
  4.   RCC->CR |= (uint32_t)0x00000001;
    8 C7 E2 q* h! U2 l
  5. : N! X& \/ n% i8 b3 N$ G+ w

  6. " F) ^& g: x9 L. m. B
  7. #ifndef STM32F10X_CL
    ! l( L2 h+ [+ I: W; A! a  M; V' ~
  8.   RCC->CFGR &= (uint32_t)0xF8FF0000;
    + N& R" D* F0 |$ E
  9. #else
    5 R8 s+ D5 r* C  _2 j: H' W
  10.   RCC->CFGR &= (uint32_t)0xF0FF0000;: Y1 O" l& M* w0 c
  11. #endif
    ! S: ^" f; S9 M- }6 N+ r

  12. 7 e! f! P2 i; J6 B9 ~6 P+ C
  13.   /* 禁用PLL、禁用始时钟检测、禁用外部高速时钟 */
    8 Z- @5 @/ `2 O: U
  14.   RCC->CR &= (uint32_t)0xFEF6FFFF;
    * J) p/ O# V" U: W9 F7 ]7 B- [
  15. & A! j" C& K# f0 N. x, B
  16.   /* 外部1-25M振荡器未被绕过 */
    ; W: D% H/ b  S0 ^$ T" \
  17.   RCC->CR &= (uint32_t)0xFFFBFFFF;
    7 T1 `0 ]+ Z  ~
  18. & ]) K1 K- f# [9 N' z
  19.   /* USB预分频器PLL未分频、PLL倍频2、HSE未被分频、HSI/2作为PLL频率 */
    + C3 H  T( q5 o& b9 {/ X/ N+ S3 ~
  20.   RCC->CFGR &= (uint32_t)0xFF80FFFF;6 r0 Y( V9 X5 H( H% G) g

  21. : h( T4 z( j: ?

  22. 6 {5 M3 _( M0 Q; w3 U2 ^) I  H2 v
  23. /* 禁用时钟中断寄存器 */
      `+ W) Z5 ^: t" D9 D) R

  24. # w- `; S# u$ B
  25. #ifdef STM32F10X_CL/ O! |, ]; V) i3 s
  26.   RCC->CR &= (uint32_t)0xEBFFFFFF;) p8 V1 c. ?! g  _
  27. * s% G) Q- b9 p$ N5 j  v+ U
  28.   RCC->CIR = 0x00FF0000;, I" H' e8 d9 Q" r& `8 a
  29. ; q3 f% X- X+ ]) y0 U0 p' j" t
  30.   RCC->CFGR2 = 0x00000000;* x, p. _! g  a' C: a1 A; g' W
  31. #elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)/ B$ T' A9 k4 B
  32.   RCC->CIR = 0x009F0000;
    & A% G% W* d! _$ S$ |% b
  33. * O0 [4 {. Q4 d" b7 ]
  34.   /* Reset CFGR2 register */" A& A  K* l2 v; a
  35.   RCC->CFGR2 = 0x00000000;      0 J  k4 s1 _) m0 B
  36. #else2 k! e$ K4 o% Z9 Q. z
  37.   RCC->CIR = 0x009F0000;* O. z! ?7 t3 s$ f+ E
  38. #endif /* STM32F10X_CL */( K6 L- D0 l3 l! X: j2 W' J

  39. 6 P! n, A1 ]7 R* @1 ?2 h
  40. 7 V: X+ R; {3 Z4 ~  M  y
  41. /* 设置外部SRAM */- \; h& }5 r1 e: k) [0 s
  42. #if defined (STM32F10X_HD) || (defined STM32F10X_XL) || (defined STM32F10X_HD_VL)2 J- l* v& `5 g# m; C2 U9 d
  43.   #ifdef DATA_IN_ExtSRAM4 P' ^0 {9 f8 Z
  44.     SystemInit_ExtMemCtl(); 2 `1 N8 [# X+ H9 ~/ ?
  45.   #endif /* DATA_IN_ExtSRAM */  B+ e+ a5 j1 a* q" m  R
  46. #endif
    5 v8 \# F0 u+ B1 S& Y/ f0 X4 w" J
  47. / L0 Z( v5 v. L
  48. & m, F. e+ d: ~0 `! w. `( p9 C9 b( a
  49. /* 配置系统时钟 */. n* L, _% G) F7 [, h4 P
  50.   SetSysClock();
    ; N1 f  ~6 H2 i1 R* {7 Z. p

  51. 3 z0 t. C  e; \) a6 E" `& p
  52. 9 \) P( d8 L2 U' m
  53. /*中断向量偏移地址设置 */
    ( @2 k0 P* G. h; X: p' K# z

  54. 7 o6 q. ~$ U. n9 ]& Y7 K* j+ j
  55. #ifdef VECT_TAB_SRAM
    0 }; D0 ]' ^3 {) g
  56.   SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
    * I/ G& U( i3 _, x- U2 S
  57. #else
      U2 j, _( i- l4 {1 X, I9 i! a
  58.   SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
    : B* i0 X% C$ f/ z
  59. #endif / g2 D7 v  |& c% w
  60. }
复制代码
# N1 a4 r: c1 `; a+ U7 t

1 x8 z$ t" e9 I  f( q' q! r) U% n$ [4 {# y9 S5 F. t  N' N
收藏 评论0 发布时间:2021-11-28 22:00

举报

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