【STM32】使用标准库创建一个工程

创建工程

本系列文章中使用的硬件和软件版本如下:

CPU型号:STM32F407ZGT6

Keil版本:V5.38.0.0

ARM编译器版本:V5.06

标准库版本:V1.8.0

1.下载标准库

官网链接:STSW-STM32065 - STM32F4 DSP和标准外设库 - 意法半导体STMicroelectronics

选择V1.8.0版本的下载,据说最新的V1.9.0版本有bug。

1.2.库目录文件简介

在使用库开发时,我们需要把libraries目录下的库函数文件添加到工程中,并查阅库帮助文档来了解ST提供的库函数,这个文档说明了每一个库函数的使用方法。

1.2.1.Libraries\CMSIS文件夹

STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Libraries\CMSIS\文件夹下内容见图 CMSIS文件夹内容

其中Device与Include中的文件是我们使用得最多的,先讲解这两个文件夹中的内容。

在Include文件夹中包含了 的是位于CMSIS标准的核内设备函数层的Cortex-M核通用的头文件, 它们的作用是为那些采用Cortex-M核设计SOC的芯片商设计的芯片外设提供一个进入内核的接口, 定义了一些内核相关的寄存器(类似我们前面写的stm32f4xx.h文件,但定义的是内核部分的寄存器)。 这些文件在其它公司的Cortex-M系列芯片也是相同的。

在Device文件夹下的是具体芯片直接相关的文件,包含启动文件、芯片外设寄存器定义、系统时钟初始化功能的一些文件,这是由ST公司提供的。

1.2.2.Libraries\STM32F4xx_StdPeriph_Driver文件夹
1.2.3.STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates

在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f4xx_it.c、stm32f4xx_it.h、stm32f4xx_conf.h这三个文件。

stm32f4xx_conf.h:这个文件被包含进stm32f4xx.h文件。ST标准库支持所有STM32F4型号的芯片, 但有的型号芯片外设功能比较多,所以使用这个配置文件根据芯片型号增减ST库的外设文件。

stm32f4xx_it.c:这个文件是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常(特殊中断)的接口,其它普通中断服务函数由我们自己添加。

2.开始新建工程

先给工程新建几个文件夹

名称 作用
Doc 用来存放程序说明的文件,由作者添加
Libraries 存放的库文件,可以直接将下载的库文件拷贝过来。
Output 存放编译输出文件
Listing 存放编译产生的中间文件
Project 存放工程文件
User 用户编写的驱动文件


标准库文件我这里直接全部拷贝过来了,其实有一些没有用到。

User中的文件从STM32F4xx_DSP_StdPeriph_Lib_V1.8.0\Project\STM32F4xx_StdPeriph_Templates这里拷贝,但是main.c中可以全部删了,只留main函数,所以it.c文件中的TimingDelay_Decrement()函数也需要删掉。

现在,工程需要用到的文件基本准备好了,可以使用keil新建工程并添加组文件夹。(注意,新建工程时,不要自动下载库文件,我们直接取消,手动添加)

然后,在各组文件夹中添加代码文件。注意,这里添加的都是源文件,没有添加头文件。

这些文件添加完成后,我们还需要做一些配置和修改:

2.1.屏蔽不需要的文件

STM32F407只有FSMC功能,但是使用的固件库里面有FMC和FSMC的功能,如果这两个文件都同时编译的话,那么就会出错, 所以我们选择把FMC在工程里面屏蔽掉,就不编译。同时,固件库里面还有DMA2D和LTDC的库,但是F407都没有这两个功能, 所以我们也选择把这两个文件从工程里面屏蔽掉。

2.2.添加头文件
2.3.添加宏定义

USE_STDPERIPH_DRIVER,STM32F40_41xxx,

多个宏定义用英文逗号隔开了。

2.4.配置输出文件夹
2.5.配置编译器
2.6.配置下载器

我们使用的是ST-LINK。

最后,我们就可以编译完成并成功烧录。

3.总结
  • 注意宏定义的配置,头文件目录的加载
  • 在配置过程中,keil软件可能出bug,可自行找办法解决
相关推荐
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11015 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元5 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133975 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315205 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书5 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang5 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟5 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126915 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315205 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机