基于标准库的STM32F4xx的工程模板

目录

一、前情简述

二、工程模板建立

1、到ST官方下载STM32F4系列的标准库

2、在Keil5 MDK中下载STM32F407VET6对应的固件包并新建空白工程

(1)Pack Installer中安装固件库

(2)Keil5中新建工程

3、给空白工程添加库函数文件

(1)添加必要文件夹

(2)为Start文件夹添加文件

(3)为Library文件夹添加文件

(4)为User文件夹添加文件

4、回到Keil中进行软件设置

(1)在Keil中添加对应文件夹

(2)添加对应文件的路径

(3)导入文件到Keil中

(4)添加宏定义

(5)设置Keil的Debug选项

(6)设置第五代编译器

(7)新建mian.c文件进行测试

5、文件修改

(1)删除fmc标准库文件

(2)修改stm32f4xx.h文件

(3)修改stm32f4xx_it.c文件

(4)编译--->成功

三、结语


一、前情简述

网上很多的STM32教程都是基于STM32F1xx这个型号进行讲解的,但是对于更高性能的型号网上资源较少,我也是刷了一遍江协科技的STM32教程后开始接触一些其他的型号。

今年暑假刚好打电赛,而我负责单片机的代码编写部分,刚刚好接触到STM32F4的系列,于是就想着配置一个自己的模板。虽然现在ST官方都推荐用Cubemx来开发,但是我还是更习惯与标准库的方式,加上我没学过用Cubemx,所以我就学着建立一个基于标准库的工程模板。

二、工程模板建立

1、到ST官方下载STM32F4系列的标准库

ST官方的网址如下:https://www.st.com/content/st_com/en.html

进入官网后,点击Tools&software——>Embedded software——>MCU and MPU embedded software,进入标准库下载页面。

下载页面如下图,继续选择STM32 embedded software,选择下面的STM32 Standard Peripheral Libraries。

最后进入的界面就是下图这样了。可以看到在中间有F0、F1、F3、F2、F4、L1这几个系列的有标准外设库可以下载的,对于其他型号,目前似乎就只能用Cubemx开发了,因为它们是没有标准外设库的。点击F4

在点击F4后,进入新界面并拉至最下方,可以看到F4的标准外设库,如下图所示,点击即可下载(注意,下载是需要登陆ST的账号的,注册一个就好了):

下载后是一个压缩包,进行解压缩后得到的文件内容包括如下,我把F4的标准外设库和江协科技给的F1的标准外设库都放出来了,如果是从江协科技过来的同学可以进行对比,会发现内容都是一模一样的:

到这就完完整整的 下载完成标准外设库了。

2、在Keil5 MDK中下载STM32F407VET6对应的固件包并新建空白工程

我在比赛中用到的是STM32F407VET6这个型号,若是其他的F4的型号,只需要下载对应的型号即可,但是上面的标准外设库是对于整个F4系列都适用的,有精力的同学可以精读一下源码,就会明白了。

(1)Pack Installer中安装固件库

打开Keil5 MDK,点击Pack Installer,按照下图,选择STMcroelectronics,选择STM32F4 Series,在里面选择自己对应的型号,然后点击右边的DFP文件下载即可,我之前下载过了,所以显示了Update,没下载过的是Install的图标;点击安装后Keil5会自动帮我们安装,无需干预。

(2)Keil5中新建工程

在完成固件库的安装后,回到Keil5中新建工程,点击Project,然后选择New uVision Project

选择一个文件夹用于存放自己的工程,并给工程起名,这个文档的归放可以参考江协科技,它的工程摆放就很清晰,我这里放在一个叫工程模板的文件夹下,并起名Project。

点击保存后回到Keil5中选择自己的型号,我这里是STM32F407VET6,所以选择了对应的型号,然后点击OK即可,后面会跳出一个窗口,直接关闭即可,这样就创建好了空白的工程模板。

打开我们创建工程的目录,会发现有如下的一些文件

这样我们就完成了空白工程的创建,但是这时只有一些Keil中给我们自己配置的文件,是没有标准库文件的,所以接下来我们需要给这个工程添加库函数文件。

3、给空白工程添加库函数文件

(1)添加必要文件夹

打开空白工程的目录,添加如下文件夹:

Start:用于存放启动文件;

System:用于存放一些系统级的文件,如延时函数文件等;

Hardware:用于存放我们后期需要写的硬件驱动的文件;

Library:用于存放标准库文件;

User:用于存放用户级的文件,如main.c文件;

ReadME:用于存放对于整个项目的说明文件;

我们最后需要放进去这整个文件夹的文件是固定的,比如启动文件、库函数文件等,但是我们如何存放这些文件是自由的,我这个布局是因为跟着江协科技学了STM32,觉得这个布局清晰,所以就采用了这个布局,如果大家觉得这个布局不好可以根据自己的喜好设计自己的布局。

(2)为Start文件夹添加文件

Start文件夹下存放的是单片机系统启动的一些文件。

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>CMSIS——>Include目录下,选择下方选中的文件,粘贴到Start文件夹下,这些都是STM32内核的描述文件;

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>CMSIS——>Device——>ST——>STM32F4xx——>Include目录下,选中下方选中文件,粘贴到Start文件夹下,其中stm32f4xx.h文件是外设寄存器描述文件,而system_stm32f4xx.h是STM32系统时钟配置文件;

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>CMSIS——>Device——>ST——>STM32F4xx——>Source——>Templates——>arm目录下,选中下方选中文件,粘贴到Start文件夹下,这就是STM32的启动文件:

STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>CMSIS——>Device——>ST——>STM32F4xx——>Source——>Templates目录下,选中下方选中文件,粘贴到Start文件夹下,这是上面对应的系统时钟配置文件的源文件:

至此,Start文件夹下的所有文件都粘贴完成了,最后全部文件如下图所示:

(3)为Library文件夹添加文件

Library文件夹下存放的就是STM32F4系列的所有库函数文件。

将STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>STM32F4xx_StdPeriph_Driver——>inc目录以及STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Libraries——>STM32F4xx_StdPeriph_Driver——>src目录的全部文件全选,直接复制到Library文件夹下,如图所示,这些就是ST官方提供的外设操作库函数:

(4)为User文件夹添加文件

在STM32F4xx_DSP_StdPeriph_Lib_V1.9.0——>Project——>STM32F4xx_StdPeriph_Templates目录中选中下方文件,粘贴到User文件夹下,main.c文件可选,也可以在回到Keil中后再创建,其中stm32f4xx_conf.h里面写了库函数的包含关系,后面的两个文件是STM32的中断服务函数文件。

至此所有文件都配置好了,而对于剩下的三个文件夹,它们是为后续开发创建的,如Hardware目录,我们在后续开发过程中遇到硬件的驱动时再把驱动放在这个文件夹即可,最后的User的文件夹如下:

4、回到Keil中进行软件设置

我们刚才的配置标准库的过程都是在文件夹中进行,但是Keil是不知道我们都做了些什么改变的,就像是安装一个软件,你在它的安装目录中新建一个文件夹,软件往往是不知道的,所以我们需要让Keil知道我们都添加了哪些文件,这就是添加头文件的路径。

(1)在Keil中添加对应文件夹

回到keil中,先将刚才我们新建的文件夹对应的也在Keil中新建,但是即使我们新建了,但是Keil中的文件夹和我们之前设计的文件夹是没有联系的,我们需要添加头文件路径。

(2)添加对应文件的路径

按如图所示的步骤为Keil添加我们新建的文件夹的路径,这样Keil在编译的时候才能找到对应的路径,但是这时候你会发现,即使是全部添加后我们Keil中的文件夹还是没有文件的,接下来我们就需要将我们的文件导入到Keil中,只要是以后我们在文件系统中新建的文件夹我们都需要将它们路径添加进去,这样Keil才能知道文件夹的对应路径。

(3)导入文件到Keil中

按如图步骤,将我们刚才在文件系统中创建的文件夹中的文件全部导入到Keil中,最后点击OK,这时候我们回去看就会发现左侧栏的文件夹有文件了。

(4)添加宏定义

按照如下步骤,添加宏定义:STM32F40_41xxx,USE_STDPERIPH_DRIVER,这个是STM32的一些系列规定的,在某个文件中有些的,我忘记是哪个文件了,知道的朋友可以在评论区说一下。

(5)设置Keil的Debug选项

按照如下图的步骤设置Debug选项,除此之外还需要到Pack下将Enable给取消勾选,这样我们的代码烧进去之后才能自动的运行。具体可以参考我的这篇博文:

https://blog.csdn.net/black_Gh/article/details/149190992

(6)设置第五代编译器

旧版的Keil5 MDK在下载后是自动安装了ARM Compiler 5编译器的,但是自Keil5 MDK5.37版本后,其默认安装的编译器就变成了ARM Compiler 6。虽然6代编译器编译速度较快,但是常常会与之前旧版本的一些文件产生冲突,导致编译错误:明明代码没有问题,但是就是会报错。具体可以参考我贴在上面的那篇博文。

(7)新建mian.c文件进行测试

按如下步骤新建main.c文件。

写上简单的代码,比如下图,但是要记得在最后留空行,不然会有警告的。

当你编译你会发现会有几百个错误,这时因为还有一些文件的依赖有问题,我们继续来修改。

5、文件修改

(1)删除fmc标准库文件

在Library文件夹下找到这个文件,将其删除,因为STM32F407VET6中没有这个外设。

(2)修改stm32f4xx.h文件

在Start文件夹下找到stm32f4xx.h文件,滑到11581行,会发现这里上下两部分宏定义重复了,所以需要将下面的给注释掉。

但是我们可以发现这个文件上面有个钥匙的标志,证明这个文件是不可以修改的,是只读文件,我们需要更改这个文件的权限。

在文件系统中找到这个文件,右键,属性,选择将只读的勾去掉,然后确定,再次打开这个工程。

这时候你会发现钥匙标志不见了,我们将11581行附近的那几行进行注释并保存。

(3)修改stm32f4xx_it.c文件

在User目录下找到stm32f4xx_it.c文件,将25行的#include "main.h"代码删除,因为没有main.h这个文件;

同理,找到134行的这个函数,将函数内部的TimingDelay_Decrement();这句代码删除,最后点击保存。

(4)编译--->成功

最后编译,成功!

三、结语

STM32F1作为通用性的单片机,网上都喜欢用它来讲解STM32,导致网上没有很好的STM32F4系列的工程模板,希望本文能够帮助到遇到困难的大家,同时,希望大家能够根据报错信息去调整自己的工程模板,而不是一味的跟着网上的教程进行配置。祝大家学习STM32顺利!

Version: 2.15.0 (2020-09-28) Keil.STM32F4xx_DFP.2.15.0.pack Download Updated Pack to STM32Cube_FW_F4 Firmware Package version V1.25.1 using HAL Drivers V1.7.9. STM32CubeMX integration (Version 6.0.1): Added support for Timebase Source TIMx (FrameworkCubeMX_gpdsc.ftl). Removed non-existent include path. CMSIS Flash Algorithm: Corrected STM32F42xxx_43xxx_OPT Algorithm. CMSIS SVD: Updated STM32F42*.svd, STM32F43*.svd files. CMSIS-Driver: I2C: Corrected 2 byte reception in master mode. MCI: Replaced empty delay loops with _NOP(). SPI: Corrected PowerControl function (to return error if Initialize was not called, to abort active transfer if power off was requested). Updated GetDataCount function to give accurate count in DMA mode. Corrected Control function (abort in DMA mode, software controlled slave select in slave mode, TI Frame Format selection, ignore bus speed for slave mode). Corrected Uninitialize function (to power off the peripheral if it is powered). Corrected SPI3_SCK pin configuration. Corrected DMA MemDataAlignment configuration. USART: Corrected DMA MemDataAlignment configuration. USBD_HS/USBH_HS: OTG_HS ULPI clock disabled in low power if internal PHY is used to enable proper operation of OTG_HS port in FS mode during CPU sleep. CAN/EMAC/USBD/USBH: Removed macros already provided by cmsis_compiler.h. Updated Boards Examples: Migrated CubeMX projects to V6.0.1 and updated config files. Changed variant selection to "MDK-Plus" where possible. Updated all USB Host/Device examples with user templates from MDK-Middleware v7.11.1. Terminating app_main thread with osThreadExit() to avoid endless loop Updated MS Windows UBS driver files.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值