STM32-创建工程模板

STM32 工程模板没有统一的格式,可以参考 ST 官方的示例模板或者根据自己的开发经验和使用习惯总结。

Project Template

文档以库函数工程模板为例,HAL 库工程模板对应参考即可。

Official Project Template

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

User 下是一些和用户有关的源文件;StdPeriph_Driver 下是标准外设库源文件;CMSIS 下是和系统有关的源文件(主要是和系统时钟有关);MDK-ARM 下是启动文件。

Custom Project Template

参考 ST 官方示例模板,自定义工程模板一般包含 6 个目录,一个批处理文件,一个说明文档:

  1. Core:存放和系统有关的源文件
  2. Doc:存放文档
  3. Driver:存放用户基于标准外设库编写的外设驱动源文件
  4. Libraries:存放 CMSIS 和 STM32L1xx_StdPeriph_Driver,这 2 个目录均来自标准外设驱动库
  5. Project:存放 KEIL 工程有关的文件
  6. User:存放用户代码
  7. Clean.bat: 清理 KEIL 编译过程中产生的临时文件
  8. Readme.txt: 记录信息,典型信息是版本更迭记录

Clean.bat 内容如下:

shell 复制代码
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 官方示例模板中的文件:

  1. startup_stm32l1xx_hd.s
  2. stm32l1xx_conf.h
  3. stm32l1xx_it.c
  4. stm32l1xx_it.h
  5. system_stm32l1xx.c

其中启动文件 startup_stm32l1xx_hd.s 要根据使用的 MCU 的 Flash 大小区分,笔者使用的 STM32L151RET6Flash 的大小为 512KB ,所以这里选择 高密度 类型的启动文件。

Libraries 目录下暂时只有 CMSISSTM32L1xx_StdPeriph_Driver 连个目录,这两个目录均拷贝于标准外设驱动库

User 目录下包含 2 个文件,这 2 个文件对应 ST 官方示例模板中的文件:

  1. main.h
  2. main.c

整个自定义工程模板如下:

KEIL Settings

Target
  • ARM Compiler: Use default compiler version 5
  • Use MicroLIB: Enable
  • IROM1: Start - 0x08000000, Size - 0x8000 (根据 MCU 配置)
  • IRAM1: Start - 0x20000000, Size - 0x14000 (根据 MCU 配置)
Output
C/C++

Define 定义以下两个宏:

  • USE_STDPERIPH_DRIVER:表示使用标准库函数
  • STM32L1XX_HD:表示使用的是 STM32L1 系列高密度类型的芯片

STM32L1XX_HD 是根据所使用的芯片来的,参考对应工程的 stm32l1xx.h 头文件,里面会有宏的定义。其它型号的 MCU 参考即可:

c 复制代码
#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: 指定包含的头文件路径

Debug

仿真器选择对应的即可。

User

设置编译后产生 bin 文件。

命令:fromelf --bin -o "$L@L.bin" "#L"

Note

对于启动文件 startup_stm32l1xx_hd.s 来说,可以直接拷贝 ST 官方示例模板中的文件,也可以通过 KEIL 自带的包管理直接下载。

下载成功后显示绿色

不过对比 KEIL 下载的 startup_stm32l151xe.s 和拷贝于 ST 官方示例模板中的启动文件 startup_stm32l1xx_hd.s 发现,KEIL 自动下载的启动文件日期为 11-July-2014 ,拷贝于 ST 官方示例模板中的启动文件日期为 17-November-2021。所以建议一般还是直接从 ST 官方示例模板中拷贝文件。

相关推荐
做网站建设制作设计小程序推广2 小时前
南昌网站建设让你的企业网站更具竞争力
经验分享
FreakStudio4 小时前
全网最适合入门的面向对象编程教程:56 Python字符串与序列化-正则表达式和re模块应用
python·单片机·嵌入式·面向对象·电子diy
slomay4 小时前
关于对比学习(简单整理
经验分享·深度学习·学习·机器学习
做网站建设制作设计小程序推广5 小时前
海南网站建设提升网站用户体验实用技巧
经验分享
EVERSPIN7 小时前
分享国产32位单片机的电机控制方案
单片机·嵌入式硬件
每天一杯冰美式oh7 小时前
51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】
嵌入式硬件·51单片机·proteus
挥剑决浮云 -7 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
新晓·故知8 小时前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
哲伦贼稳妥9 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
gavin_gxh9 小时前
项目管理-信息系统管理
经验分享·其他