STM32开发笔记-新建标准库工程

1.STM32开发方式

STM32开发一般包括三种方式:基于寄存器开发、基于标准外设库开发、基于HAL库开发。

标准外设库是最基础的STM32开发方式,提供了一系列函数用于配置和控制STM32的外设,如GPIO、USART、SPI等。使用标准外设库需要手动编写代码,对于有一定嵌入式开发经验的开发者来说比较熟悉。其优点是灵活性高,可以根据具体需求进行定制开发,但缺点是编写代码量大,开发周期较长。
HAL库是STM32提供的一套高级抽象层,封装了底层的硬件操作,提供了一系列易于使用的函数接口。使用HAL库可以大大简化开发流程,减少代码量。开发者只需要调用相应的函数,即可完成对外设的配置和控制。其优点是开发效率高,适合快速开发和原型验证,但缺点是灵活性相对较低,对于一些特殊需求可能需要自行编写底层代码。寄存器开发是通过直接操作寄存器进行开发,但是由于STM32的寄存器数量众多,逐个查询比较繁琐。其优点是对底层了解深入,可以实现一些HAL库无法实现的功能,但缺点是需要手动编写大量代码,且容易出错。

后续应该大力推广的是基于HAL库的形式,但是由于我自己用的是基于标准外设库开发方式,就只在此记录基于标准外设库的工程新建过程。

2. 新建工程文件夹

2.1 下载标准外设库

标准外设库可以到STM32社区下载STM32官方标准库网址: https://www.stmcu.org.cn/下载。这里我所用的芯片为STM32F103C8T6,下载的库为STM32F10x_StdPeriph_Lib_V3.5.0,解压后目录如下;

其中:Libraries为库函数文件;Project为官网的例程;Utilities文件夹是ST官方评估板源文件(不能了解); Release_Notes.html是固件库的发布日志;stm32f10x_stdperiph_lib_um.chm文件是固件库的帮助文档,可以直接双击打开。

2.2 创建文件夹放置项目工程

创建一个新的文件夹,我这里是命令为controller_project,然后在该文件夹里面创建四个子文件夹来存放不同的文件,包括user、project、FWLIB和CMSIS。其中,user文件夹用来存放主函数和一些用户自定义函数;project文件夹用来存放项目工程文件以及起始代码文件;FWLIB文件夹用来存放库函数;CMSIS文件夹用来存放内核函数及启动引导文件。

2.3 拷贝工程所需的库文件

首先从固件库路径

STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template

中找到stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h 文件

复制到controller_project/user文件夹中。

其次,将STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport中的文件复制到controller_project/CMSIS中。

找到

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x文件夹下的相应文件,将它复制粘贴到复制到controller_project/CMSIS文件夹中。

最终效果如图所示。

最后,在标准库路径

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver中找到如下文件夹内容。

复制到工程路径controller_project\FWLIB下

至此文件拷贝工作完成,需要说明的是,文件目录存放在只是为了规范工程,并非一定一板一眼按照流程照做,可以灵活处理。

3 创建项目工程

3.1 新建工程

打开Keil5,点击Project选择New Version Project创建工程项目.

然后将其放置到创建的文件夹中controller_project/project并重新命令,点击保存。则弹出如下界面。

在弹出的界面中选择相应的芯片,这里我选择的是STM32F103C8。选择后点击OK。

弹出了如下菜单,因为我们已经做了库代码的拷贝,不需要在利用KEIL自带的库函数了。因此直接点击OK即可。

至此,工程就创建完毕。

3.2 项目工程的配置

如图所示,点击"品字"图标,在新建工程选项中添加文件路径。

在此页面,可以修改Project Targets名并添加多个Groups,修改结果如下。

接下来我们添加文件进入工程项目中,先单击选中FWLIB,选择add files...进入新建的工程文件夹controller_project/FWLIB\src中,选中所有文件,点击Add完成文件添加。

再单击选中CMSIS,选择add files...进入新建的工程文件夹controller_project/CMSIS中,选中所有的.c文件,点击Add完成文件添加。

再单击选中startup,选择add files...进入新建的工程文件夹controller_project/CMSIS/startup/arm文件夹中找到如图所示的startup_stm32f10x_md.s文件,点击Add完成文件添加。

最后,再单击选中user,选择add files...进入新建的工程文件夹controller_project/user文件夹中找到如图所示的stm32f10x_it.c文件,点击Add完成文件添加。

3.3 新建main.c并创建main函数

在页面左侧project栏中,选中user按右键,弹出菜单中,选择Add New Item to Group 'user'。

弹出如下菜单。在菜单中作如下修改,点击Add完成main.c文件的添加。

打开main.c,在main.c里,编写如下代码,创建一个空main函数。

3.4 配置编译环境

点击魔术棒图标,弹出编译配置菜单。选中output选项卡,一般选择把Create Hex File选项勾选上,这样编译才能生成hex文件方便用烧录软件下载到STM32上。如图所示。

再次选中选中c/c++选项卡。如图所示添加两个宏:STM32F10X_MD, USE_STDPERIPH_DRIVER

添加USE_STDPERIPH_DRIVER是为了使用ST官方库,

添加STM32F10X_MD宏定义是因为我们用的芯片是中容量的,

小容量的芯片使用:STM32F10X_LD

中容量的芯片使用:STM32F10X_MD

大容量的芯片使用:STM32F10X_HD

这个宏和startup中的启动文件需要匹配上,和芯片型号最好也匹配上,否则可能出现编译不过的情况。

对应关系总结如下。芯片型号对应的具体内存大小,可以根据芯片手册对应查找。

|宏 |启动文件 |内存大小|

启动文件 内存大小
STM32F10X_LD startup_stm32f10x_ld.s 16-32k
STM32F10X_MD startup_stm32f10x_md.s 64-128k
STM32F10X_HD startup_stm32f10x_hd.s 256-512k

最后一步配置:如图所示,添加文件索引路径:

点击OK完成配置。

3.5 编译

依次点击图示三个图标。无报错则说明工程配置成功。

相关推荐
十年一梦实验室6 小时前
【C++】相机标定源码笔记- 标定工具库测试
笔记·数码相机
炫酷的伊莉娜7 小时前
【网络安全】第3讲 消息认证技术(笔记)
笔记·安全·web安全
Lyx-06077 小时前
项目进度管理(信息系统项目管理师)
笔记
爱学习的南瓜7 小时前
笔记14:程序中的循环结构
c语言·笔记
Java追光着7 小时前
谷粒商城笔记-02-项目整体效果展示
笔记
远望创客学堂7 小时前
【单片机毕业设计选题24047】-基于阿里云的工地环境监测系统
stm32·单片机·嵌入式硬件·阿里云·云计算·课程设计·arduino
极客小张8 小时前
利用 STM32 实现多协议物联网网关:Modbus/Zigbee 到以太网/Wi-Fi 的数据桥接
stm32·单片机·嵌入式硬件·物联网·网络协议·https·硬件工程
@一二三四五9 小时前
STM32 看门狗 HAL
stm32·单片机·嵌入式硬件
dadalaohua11 小时前
【开源项目】LocalSend 局域网文件传输工具
笔记·学习·github
nongcunqq11 小时前
自动缩放 win7 远程桌面
笔记