STM32 工程模板没有统一的格式,可以参考 ST 官方的示例模板或者根据自己的开发经验和使用习惯总结。
文档以库函数工程模板为例,HAL 库工程模板对应参考即可。
ST 发布的标准外设库 (STM32 Standard Peripheral Libraries) 中都会包含示例工程模板。以笔者正在使用的 STM32L151RET6 为例,截止在写这篇文档的时候最新的版本为 1.4.0。
示例工程模板路径为 en.stsw-stm32077_v1-4-0\STM32L1xx_StdPeriph_Lib_V1.4.0\Project\STM32L1xx_StdPeriph_Templates
。用 KEIL v5 打开后如下:
整个工程被分为了 4 部分:
User
下是一些和用户有关的源文件;StdPeriph_Driver
下是标准外设库源文件;CMSIS
下是和系统有关的源文件(主要是和系统时钟有关);MDK-ARM
下是启动文件。
参考 ST 官方示例模板,自定义工程模板一般包含 6 个目录,一个批处理文件,一个说明文档:
Clean.bat 内容如下:
del /Q Project\*.bak
del /Q Project\*.dep
del /Q Project\JLink*
del /Q Project\*.scvd
del /Q Project\*.user
del /Q Project\Objects\*.dep
del /Q Project\Objects\*.lnp
del /Q Project\Objects\*.htm
del /Q Project\Objects\*.o
del /Q Project\Objects\*.d
del /Q Project\Objects\*.crf
del /Q Project\Objects\*.iex
Core
目录下包含 5 个文件,这 5 个文件对应 ST 官方示例模板中的文件:
其中启动文件 startup_stm32l1xx_hd.s 要根据使用的 MCU 的 Flash 大小区分,笔者使用的 STM32L151RET6 的 Flash 的大小为 512KB,所以这里选择 高密度 类型的启动文件。
Libraries
目录下暂时只有 CMSIS 和 STM32L1xx_StdPeriph_Driver 连个目录,这两个目录均拷贝于标准外设驱动库
User
目录下包含 2 个文件,这 2 个文件对应 ST 官方示例模板中的文件:
整个自定义工程模板如下:
Define
定义以下两个宏:
STM32L1XX_HD 是根据所使用的芯片来的,参考对应工程的 stm32l1xx.h
头文件,里面会有宏的定义。其它型号的 MCU 参考即可:
#if !defined (STM32L1XX_MD) && !defined (STM32L1XX_MDP) && !defined (STM32L1XX_HD) && !defined (STM32L1XX_XL)
#error "Please select first the target STM32L1xx device used in your application (in stm32l1xx.h file)"
#endif
C99 Mode
:Enable
Include Paths
: 指定包含的头文件路径
仿真器选择对应的即可。
设置编译后产生 bin 文件。
命令:fromelf --bin -o "$L@L.bin" "#L"
对于启动文件 startup_stm32l1xx_hd.s
来说,可以直接拷贝 ST 官方示例模板中的文件,也可以通过 KEIL 自带的包管理直接下载。
下载成功后显示绿色
不过对比 KEIL 下载的 startup_stm32l151xe.s
和拷贝于 ST 官方示例模板中的启动文件 startup_stm32l1xx_hd.s
发现,KEIL 自动下载的启动文件日期为 11-July-2014,拷贝于 ST 官方示例模板中的启动文件日期为 17-November-2021。所以建议一般还是直接从 ST 官方示例模板中拷贝文件。