这些启动文件一般位于这个路径下面:
HAL库提供的位置:
./STM32Cube_FW_F1_V1.8.5\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates
标准库提供的位置:
.\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup
启动文件选择
启动文件是针对不同 STM32F1 系列芯片(这里我的库是F1系列的)的。这些启动文件的适用芯片型号和选择方法:
1. 启动文件与芯片型号对应关系
启动文件 | 适用芯片型号 | Flash 大小 | RAM 大小 |
---|---|---|---|
startup_stm32f100xb.s | STM32F100C4, STM32F100R4, STM32F100C6 | 16-32 KB | 4-6 KB |
startup_stm32f100xe.s | STM32F100C8, STM32F100R8, STM32F100RC | 64-128 KB | 8-10 KB |
startup_stm32f101x6.s | STM32F101C4, STM32F101R4, STM32F101T4 | 16-32 KB | 4-6 KB |
startup_stm32f101xb.s | STM32F101C6, STM32F101R6, STM32F101T6 | 32-128 KB | 6-10 KB |
startup_stm32f101xe.s | STM32F101C8, STM32F101R8, STM32F101RC | 256-512 KB | 32-48 KB |
startup_stm32f101xg.s | STM32F101RE, STM32F101RG, STM32F101VE | 512-1024 KB | 48-80 KB |
startup_stm32f102x6.s | STM32F102C4, STM32F102R4, STM32F102T4 | 16-32 KB | 4-6 KB |
startup_stm32f102xb.s | STM32F102C6, STM32F102R6, STM32F102T6 | 32-128 KB | 6-10 KB |
startup_stm32f103x6.s | STM32F103C4, STM32F103R4, STM32F103T4 | 16-32 KB | 6-10 KB |
startup_stm32f103xb.s | STM32F103C6, STM32F103R6, STM32F103T6 | 32-128 KB | 10-20 KB |
startup_stm32f103xe.s | STM32F103C8, STM32F103R8, STM32F103RC | 256-512 KB | 48-64 KB |
startup_stm32f103xg.s | STM32F103RE, STM32F103RG, STM32F103VE | 512-1024 KB | 64-96 KB |
startup_stm32f105xc.s | STM32F105R8, STM32F105RC, STM32F105V8 | 64-256 KB | 64-80 KB |
startup_stm32f107xc.s | STM32F107RB, STM32F107RC, STM32F107VB | 128-256 KB | 64-80 KB |
2.STM32 链接脚本(Linker Script)
STM32F<系列><型号><Flash大小>_FLASH.ld
STM32F<系列><型号><Flash大小>_FLASH.ld
-
系列:如
100
、101
、102
、103
等。 -
型号:如
C
、R
、V
等。 -
Flash 大小:如
B
(128 KB)、E
(512 KB)、G
(1 MB)等。 -
链接脚本的作用:定义程序的内存布局,包括 Flash 和 RAM 的起始地址和大小。
-
选择链接脚本:根据芯片型号和 Flash 大小选择合适的链接脚本。
-
使用链接脚本:在 Makefile 中指定链接脚本,并编译项目。
编译之前应该选择合适的链接脚本,否则可能出现一下问题:
问题1:链接脚本与芯片不匹配
-
现象:程序无法正常运行,或运行时进入 HardFault。
-
解决方案:确保链接脚本与芯片型号和 Flash 大小匹配。
问题2:内存不足
-
现象:编译时提示内存不足。
-
解决方案:检查链接脚本中的 Flash 和 RAM 大小,确保其与芯片规格一致。
芯片型号 | Flash 大小 | 链接脚本 |
---|---|---|
STM32F100 系列 | ||
STM32F100C4 | 16 KB | STM32F100XB_FLASH.ld |
STM32F100C6 | 32 KB | STM32F100XB_FLASH.ld |
STM32F100R8 | 64 KB | STM32F100XE_FLASH.ld |
STM32F100RC | 256 KB | STM32F100XE_FLASH.ld |
STM32F101 系列 | ||
STM32F101C4 | 16 KB | STM32F101X6_FLASH.ld |
STM32F101C6 | 32 KB | STM32F101XB_FLASH.ld |
STM32F101R6 | 32 KB | STM32F101XB_FLASH.ld |
STM32F101R8 | 64 KB | STM32F101XB_FLASH.ld |
STM32F101RE | 512 KB | STM32F101XE_FLASH.ld |
STM32F101RG | 1 MB | STM32F101XG_FLASH.ld |
STM32F102 系列 | ||
STM32F102C4 | 16 KB | STM32F102X6_FLASH.ld |
STM32F102C6 | 32 KB | STM32F102XB_FLASH.ld |
STM32F102R6 | 32 KB | STM32F102XB_FLASH.ld |
STM32F102R8 | 64 KB | STM32F102XB_FLASH.ld |
STM32F103 系列 | ||
STM32F103C4 | 16 KB | STM32F103X6_FLASH.ld |
STM32F103C6 | 32 KB | STM32F103XB_FLASH.ld |
STM32F103C8 | 64 KB | STM32F103XB_FLASH.ld |
STM32F103R6 | 32 KB | STM32F103XB_FLASH.ld |
STM32F103R8 | 64 KB | STM32F103XB_FLASH.ld |
STM32F103RE | 512 KB | STM32F103XE_FLASH.ld |
STM32F103RG | 1 MB | STM32F103XG_FLASH.ld |
STM32F103V8 | 64 KB | STM32F103XB_FLASH.ld |
STM32F103VE | 512 KB | STM32F103XE_FLASH.ld |
STM32F103VG | 1 MB | STM32F103XG_FLASH.ld |
STM32F103ZET6 | 512 KB | STM32F103XE_FLASH.ld |
STM32F103ZGT6 | 1 MB | STM32F103XG_FLASH.ld |
STM32F105 系列 | ||
STM32F105R8 | 64 KB | STM32F105XC_FLASH.ld |
STM32F105RC | 256 KB | STM32F105XC_FLASH.ld |
STM32F105V8 | 64 KB | STM32F105XC_FLASH.ld |
STM32F105VC | 256 KB | STM32F105XC_FLASH.ld |
STM32F107 系列 | ||
STM32F107RB | 128 KB | STM32F107XC_FLASH.ld |
STM32F107RC | 256 KB | STM32F107XC_FLASH.ld |
STM32F107VB | 128 KB | STM32F107XC_FLASH.ld |
STM32F107VC | 256 KB | STM32F107XC_FLASH.ld |