STM32F407工程模板
前言
根据官方给的固件库创建自己的工程模板,文中所使用的为STM32F407ZGT6核心板。以STM32F407为例创建标准函数库工程模板。
一、下载官方固件库文件
- 进入STM32标准外设软件库官网后,找到
F4
系列并点击。
- 滑动到最下面,点击获取最新版本(Get latest)。然后在弹出的许可协议中点击接受。
- 然后他会让你创建或登录以此来下载,或者以访客身份下载,大家有兴趣可以创建一个账号,这样就可以直接在网页下载了。我这里演示访客下载,点击访客下载。
然后他会让你填写你的信息,姓名可以乱填,然后填写自己的邮箱。
然后过一会你的邮箱中就会有一封邮件,在邮箱中找到并点击下载链接,就可以下载了。
- 在文件中找到下载的压缩包并解压即可。后面我们的模板工程需要的文件在这里面可以找到。
二、配置工程模板文件
工程文件树我将参照使用江协科技的工程文件树。
DebugConfig — 调试相关的文件夹
Libraries — 存放标准库函数
Listing — 存放编译的中间文件
Objects — 存放输出文件
Start — 存放启动文件
User — 存放用户编写文件
keilkill.bat — 删除编译产生的中间文件
1.新建工程
- 使用
Keil
,点击new uVision Project
。
- 然后新建文件夹
STM32F407Template
,用来存放工程模板。新建工程名为Project
,点击保存。
- 选择自己对应的开发板的器件包,因为我使用的核心板是
STM32F407ZGT6
,所以我在这应该选择STM32F407ZGTx
,然后点击OK。
- MDK会跳出Manage Run-Time Environment 的界面,这时MDK5新增的功能,在这个界面,我们可以添加自己需要的组件,从而方便构建开发环境。在这里我们直接点Cancel即可。
- 创建新工程结束后,我们文件夹中的目录树如下,然后我们创建3个新的文件夹,User,Start,Libraries。
2.配置User文件夹
- User文件夹中需要存放下面这4个文件。
main.c
,stm323f4xx_conf.h
,stm32f4xx_it.c
,stm32f4xx_it.h
文件在
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Project\STM32F4xx_StdPeriph_Templates
3.配置Start文件夹
- Start文件夹下存放这些文件
core_cm4.h
,core_cmFunc.h
,core_cmInstr.h
,core_cmSimd.h
文件在
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Include
3.startup_stm32f40_41xxx.s
文件在
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm
因为我所使用的核心板是stm32f407,所以我在这拷贝启动文件的时候选择的是startup_stm32f40_41xxx.s,拷贝的文件要与自己的开发板型号相对应,否则编译就会报错。
4. system_stm32f4xx.c
文件在
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Source\Templates
stm32f4xx.h
,system_stm32f4xx.h
文件在
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\CMSIS\Device\ST\STM32F4xx\Include
4.配置Libraries文件夹
- Libraries下存放这些文件
- 从下面这两个文件夹中拷贝出来
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\STM32F4xx_StdPeriph_Driver\inc
STM32F4xx_DSP_StdPeriph_Lib_V1.9.0\Libraries\STM32F4xx_StdPeriph_Driver\src
到这我们所需要的文件都拷贝完成了,下面我们要完成Keil的配置。
三、配置Keil
1.将工程与文件关联起来
- 打开工程,点击
Manage Project Item
(3个小箱子一样的按钮),然后选中Source Group1
,点击删除。
- 点击新建3个组,与第二步新建的3个文件夹对应。
- 选中
User
组,然后点击Add Files
添加文件,将User文件下的文件都添加进来,然后点击Close
关闭。
Start
组也进行相应的操作,在这里我只展示最终的结果。
5.Libraries
也类似。
最终左侧工程结构树如下
2.修改Keil配置
- 选择
UTF8
编码格式
- 选择ARM编译器为version5。
- 勾选生成hex文件
- 自定义中间文件存放路径,我在这保持默认。
- 将3个文件夹的文件路径包括进来
- 选择
ULINK2
调试模式,并且设置为快捷下载。
- 添加两个宏定义
STM32F40_41xxx,USE_STDPERIPH_DRIVER
这两个宏定义来源于
至此我们的keil配置已经完成,但是此时编译还是会报错,因为官方给我们的库函数文件存在一定的不适配,我们需要进一步进行调整。
3.修改引入的文件内容
- 首先将main.c文件修改成如下,方便寻找错误
#include "stm32f4xx.h" // Device header
int main(void)
{
while(1)
{
}
}
此时我们点击编译,会出现大量的报错,我们可以根据报错来修改我们工程。
3.1修改报错
错误1:
Start\stm32f4xx.h(11581): warning: #47-D: incompatible redefinition of macro “DBGMCU_APB2_FZ_DBG_TIM1_STOP” (declared at line 11574)
#define DBGMCU_APB2_FZ_DBG_TIM1_STOP DBGMCU_APB1_FZ_DBG_TIM1_STOP
Start\stm32f4xx.h(11582): warning: #47-D: incompatible redefinition of macro “DBGMCU_APB2_FZ_DBG_TIM8_STOP” (declared at line 11575)
#define DBGMCU_APB2_FZ_DBG_TIM8_STOP DBGMCU_APB1_FZ_DBG_TIM8_STOP
Start\stm32f4xx.h(11583): warning: #47-D: incompatible redefinition of macro “DBGMCU_APB2_FZ_DBG_TIM9_STOP” (declared at line 11576)
#define DBGMCU_APB2_FZ_DBG_TIM9_STOP DBGMCU_APB1_FZ_DBG_TIM9_STOP
Start\stm32f4xx.h(11584): warning: #47-D: incompatible redefinition of macro “DBGMCU_APB2_FZ_DBG_TIM10_STOP” (declared at line 11577)
#define DBGMCU_APB2_FZ_DBG_TIM10_STOP DBGMCU_APB1_FZ_DBG_TIM10_STOP
Start\stm32f4xx.h(11585): warning: #47-D: incompatible redefinition of macro “DBGMCU_APB2_FZ_DBG_TIM11_STOP” (declared at line 11578)
#define DBGMCU_APB2_FZ_DBG_TIM11_STOP DBGMCU_APB1_FZ_DBG_TIM11_STOP
修改1:
在文件夹中找到stm32f4xx.h文件,右键属性,取消勾选只读。
然后再keil中,双击错误定位到stm32f4xx.h文件,注释掉报错的地方。
错误2:
User\stm32f4xx_it.c(25): error: #5: cannot open source input file “main.h”: No such file or directory
修改2:
错误3:
User\stm32f4xx_it.c(136): warning: #223-D: function “TimingDelay_Decrement” declared implicitly
修改3:
错误4:
由于我们在标准库函数Libraries中引入了不适配的函数库文件,所以会报错,我们可以查看stm32f4xx_conf.h文件可以筛选出我们所使用的开发板不适配的函数库。
根据查找,我需要移除
stm32f4xx_dma2d.c,stm32f4xx_dma2d.h
stm32f4xx_fmc.c,stm32f4xx_fmc.h
stm32f4xx_itdc.c,stm32f4xx_itdc.h
至此,所有错误排查完,点击编译,0error,0warning,那么我们的工程模板就新建完成了。
参考博客
参考博客:https://blog.youkuaiyun.com/qq_64931749/article/details/133439199