HAL工程应该这样搭建~

目录

一、为何要自己手动搭建一个软件工程?

二、在Keil5+STM32F429**平台下的软件工程搭建

三、打开Keil MDK5软件创建一个新工程

四、在各个文件夹下添加所需文件

五、在MDK工程下添加文件

六、在MDK下添加路路径


一、为何要自己手动搭建一个软件工程?

(1)在Keil MDK的开发环境下:工程师都会找一个模板,这个模板可能是在某一家开发板厂家提供的一个例程的基础上进行修改;也可能是这个工程师通过多年的开发经验有自己的一套工程模板。

(2)第一种情况下可能占据比例会更多一些,第二种情况是有经验的工程师自己通过多年的经验和能力来构建工程。个人观点:不管从哪看到模板,不管用谁的模板,在自己经验和能力到达一定的水平后自己创建一个适合自己的模板。这样的好处就是在单片机+MDK这个开发平台下可以掌握全局,任意修改,整体的软件架构根据自己的喜好能随意修改,优化,做到随心所欲。

二、在Keil5+STM32F429**平台下的软件工程搭建

(1)在PC端造一个位置,创建一个文件夹,文件夹名字叫"02.MDK5+STM32F429"

(2)打开文件夹,创建5个子文件夹

备注:这样我们就把基础的文件夹全部创建好了,这样做的原因是什么?分层。创建一个软件工程在分层的架构下才能在后续的开发中缕清思路,不会因增加一些功能而每次软件架构都在不停的变动,开发效率降低。

三、打开Keil MDK5软件创建一个新工程

(1)在如下步骤中找到创建工程窗口

(2)选择存储创建工程的路径,D:\Personal\Embedded\02.STM32\02.个人开发\STM32F429xx\Example\02.MDK5+STM32F429\Project。这个是我自己创建的工程路径,这个路径的最后一级是上一步创建的Project文件夹,工程名叫Demo,这个名字根据自己的习惯来命名。

(3)点击保存,然后出现如下界面,这个界面是进行芯片的选型的,这次例程使用的是STM32F429ZITx这个Cortex-M4内核芯片,144pin,256K RAM,2M Flash。根据自己使用的型号选择后点击OK。

(4)出现如下界面,我们不做选择,直接点击Cancel,这个界面是添加一些组件,这些组件我们暂时不需要,根据自己后面的实际项目需求来选择。

(5)创建完成后,出现如下基础工程,当然这个工程只是我们创建的第一步,后续还要添加很多文件来完善。

在Project文件夹下有我们创建成功的工程。

四、在各个文件夹下添加所需文件

(1)这些文件我们在哪里查找?首先要在MDK安装目录下有自己对应的xxx_DFP包,为什么需要这个xxx_DFP包?这个包里包含STM32F4xx系列新品的启动文件,配置文件,HAL库,ST官方提供的开发板的相关Demo例程。这个包是ST官方提供的,可以在ST官网上下载,当然也可以在MDK5软件下进行下载 。MD5软件下载xxx_DFP包方法如下:@1.打开MDK5软件,将红圈这个图标打开,这个图标的英文名是"packet installer"。

@2.在安装界面找到ST公司系列新品,F4系列处理器任意点击,然后右侧会有提示安装xxx_DFP安装包,点击install,安装。这个过程比较漫长。因为这个包在ST的境外服务器放置,所以下载过程中会有不稳定断开情况,如果断开后点击关闭重复上述操作,会在上次的断点处开始下载,不影响包的质量,下图这个提示是我已经安装过了,有updata,但updata是灰色的,表示没有包的更新。

@3.这个包下载完成后,下载到哪个位置了?下载到你的MDK5的安装目录下的某一个路径了,我们要寻找这个包可以按照以下路径来寻找。C:\Personal\install\Work Software\MDK-526\ARM\PACK\Keil。任何一个使用者按照上述步骤操作,都会在相似的目录下找到这个包,红色圈圈圈住的这个包就是下载好的,当然下载好后会自动解压,接下来我们就需要这个DFP包下的一些重要文件来拷贝到我们新建的工程下。

(2)在创建的工程的Libraries文件夹下再创建3个文件夹

(3)在Startup下放置一些启动文件

@1.第一个文件是:startup_stm32f429xx.s文件,将这个文件拷贝到Startup文件下。

@2.其他文件分别是:core_cm4.h, core_cmFunc.h, core_cmInstr.h,core_cmSimd.h拷贝到Startup文件下

@3.这个文件下最终文件如下

(4)在HALlib文件夹下放置HAL库文件

@1.将Inc和Src文件拷贝到HALlib文件夹下,这两个文件就是HAL库,里面全都是API接口函数

(5)在SysF4xxInc下面放置一些F4相关配置文件

@1.将stm32f4xx.h和stm32f429xx.h文件这两个文件拷贝到SysF4xxInc文件夹下,如下图所示:

(6)在App文件夹下创建一个文件夹,在这个文件夹下放置一些,用户需要配置+中断函数文件+HAL库底层硬件驱动接口文件等

@1.创建SysLibraryConfig文件

@2.在这个SysLibraryConfig文件夹下添加相关文件:system_stm32f4xx.h

@3.把main.h,stm32f4xx_hal_conf.h,stm32f4xx_it.h 这3个文件拷贝到SysLibraryConfig文件夹下

@4.将stm32f4xx_hal_msp.c,stm32f4xx_it.h,system_stm32f4xx.h 3个文件拷贝到SysLibraryConfig文件夹下,将main.c文件拷贝当App文件夹下

@5.拷贝完成后App文件夹下如下所示

备注:到这一步已经将所有的文件在工程文件夹下全部添加完成了,接下来需要做的事情是在MDK工程里添加各种文件以及文件路径,进行环境配置

五、在MDK工程下添加文件

(1)点击图标进入配置界面

(2)在配置界面下创建这几个文件路径

@1.Startup组放置启动文件,点击Add Files,进入启动文件路径选择界面,在/Libraries/Startup文件下将启动文件全部添加进去,点击Add添加,添加完成后close退出

@2.根据@1的步骤在Libraries组下点击Add Files,将Libraries/HALlib/Src路径下的.c文件全部添加进去,这个就是HAL库文件,后续的外设开发API接口几乎都是调用这个文件夹下的

@3.和@2操作类似,SysF4xxInc组下将Libraries/HALlib/SysF4xxInc的全部文件添加进去

@4.在App组下main.c添加进去

@5.在SysLibraryConfig组下将App/SysLibraryConfig文件添加进去,这个可以只添加.c文件

@6.将ReadMe组下添加/ReadMe/ReadMe.txt添加进去

@7.到了这一步后所有的文件都添加进去了,接下来需要做的是添加文件路径了

六、在MDK下添加路路径

(1)点击魔术棒进入如下界面,第1步:点击C/C++;第2步:点击“红圈圈3”那个位置“include paths”添加路径,第3步:点击“红圈圈4”进行路径添加

(2)除了这个工程下的Project路径无需添加之外,其他所有文件的路径必须全部添加进去,否则可能会出现编译时文件无法找到路径现象,最终路径添加结果如下,点击OK确定就可以,点击完成后表示路径添加完成了

(3)在define那一栏需要添加全局宏定义,USE_HAL_DRIVER,STM32F429xx,否则编译时会报错

(4)编译文件输出路径选择

Output选首先勾选Create HEX File,表示编译生成可执行文件,点击Select Dolder For Object,在Projecet文件下 点击“新建文件夹”图标,创建Output文件,这样输出文件就在Output文件夹里面了

(5)到了这一步,离成功差90%了,千万别放弃,接线来就是进行对工程编译,工程如何编译就不详细说了,下面只呈现结果

编译完成后提示2个警告,2个错误,先看看错误是什么原因:HAL_MspDeInit函数和HAL_MspInit函数在stm32f4xx_hal_msp.c和stm32f4xx_hal_msp_template.c 2个源文件下重复定义,我们将stm32f4xx_hal_msp_template.c这个.c文件在Libraries添加路径下移除掉

移除方法如下:

找到后点击红圈圈里的图标,这样整个工程里就不包含stm32f4xx_hal_msp_template.c文件了

(6)移除完成后再次编译,显示编译2警告,0错误

这个警告的意思是__packed在这个地方无法用到,这个可能是一些参数配置的问题,此处我们不做详细分析,后续会进行详细分析如何消除这个警告~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安泰电子:电压放大器有哪些特点

电压放大器是电子电路中常见的一种重要元件,其作用是将输入电压信号放大到更高的电压水平。它在各种应用中都扮演着关键的角色,从音频放大器到通信系统中的射频放大器都有广泛的应用。下面安泰电子将介绍电压放大器的特点,以便更好地理解它们…

python 办公自动化-生成ppt文本和图

最终样式 代码实现 # 可编辑折线+写入文字 成功 # 问题: 设置字体类型和加粗和字体为微软雅黑,是只改了字母和数字的字体,中文没变化 pip install pptx_ea_font 这个库可以解决这个问题 import pandas as pd import pptx_ea_font import matplotlib.pyplot as plt from pp…

面试数据库八股文十问十答第八期

面试数据库八股文十问十答第八期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)MySQL 锁类型 MySQL 中常见…

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

让AI学相机对焦: Learning to AutoFocus

前言 分析来自谷歌发表在 CVPR 2020 上的论文 Learning to Autofocus :https://arxiv.org/pdf/2004.12260 目前网上对这篇论文的分析较少,有的分析并没有指出关键点,如:论文解读: Learning to AutoFocus-CSDN博客&am…

pytorch-16 复现经典网络:LeNet5与AlexNet

一、相关概念 对于(10,3,227,227)数据表示,10张3通道的图,图的大小(特征数)为227*227. 通道数:作为卷积的输入通道数和输出通道数。 特征数:特征图的大小 步长stride和填充padding&…

三相电子负载:行业前沿

三相电子负载是模拟电网中实际负载的装置,主要用于电源、电机、变压器等产品的测试和老化。随着科技的发展,三相电子负载在电力、通信、汽车电子、新能源等领域的应用越来越广泛,成为行业前沿技术之一。 三相电子负载在电源行业的应用非常广泛…

聚会活跃气氛神器小程序源码系统 各种小游戏 让聚会不再冷场 带源代码包以及安装搭建教程

系统概述 在社交聚会中,如何让气氛活跃起来一直是一个让人关注的问题。小编给大家分享一款聚会活跃气氛神器小程序源码系统。它不仅提供了丰富多样的小游戏,还带有源代码包和详细的安装搭建教程,让你轻松打造属于自己的聚会互动平台。 代码…

Jtti:配置Nginx的并发连接数可以通过哪些方法实现?

配置Nginx的并发连接数可以通过修改其配置文件来实现。主要涉及的参数包括worker_connections和worker_processes。以下是具体的配置方法: 1. 修改Nginx配置文件 Nginx的主配置文件通常位于/etc/nginx/nginx.conf。打开该文件,找到events和http块&…

从docker镜像反推Dockerfile

在项目运维的过程中,偶尔会遇到某个docker image打包时候的Dockerfile版本管理不善无法与image对应的问题,抑或需要分析某个三方docker image的构建过程,这时,就希望能够通过image反推构建时的instruction. 想实现这个过程可以使…

YOLO创新点改进点的消融实验设计规范

YOLO改进的消融实验是一种重要的方法,用于评估和验证模型中不同组件的影响。在进行YOLO改进的消融实验时,我们可以选择一些可能的改进点,比如Backbone网络、Anchor框设计和损失函数设计,然后通过实验来分析它们对模型性能的影响。 首先,我们需要确定实验设计。对于每个改…

Qt 项目(CMake)支持多国语言(2024/05)

目录 1.在工程手动创建languages文件夹2.修改CMakeLists.txt3.在qml上随便添加一下文字内容4.执行CMake 参考:Qt 项目(CMake)设置国际化支持 1.在工程手动创建languages文件夹 2.修改CMakeLists.txt set(TS_FILES"${CMAKE_SOURCE_DIR}/languages/aidi_zh_CN.ts"&qu…

【GIT】常见问题整理

摘要 (一)命令行合并代码分支(二)git clone 拉取代码时没拉取到具体的业务代码提示warning: remote HEAD refers to nonexistent ref, unable to checkout. (一)命令行合并代码分支 ***有时候git网站总会…

PHP preg_replace正则表达式涉及汉字乱码

一、需求 PHP preg_replace,替换省、市、区为空 二、实现 1、使用表达式["省","市","自治州","自治区"],出现了乱码 $text "浙江省";$pattern /["省","市","自治州&qu…

C++(25): C++17探索:std::optional

1. 概述 std::optional是C17标准引入的一个新的标准库组件。这是一个轻量级的容器,旨在以类型安全的方式包装可能为空的值。std::optional为处理可能缺失的数据提供了一种优雅而简洁的方法,这在以往通常需要使用专门的“存在”标志或复杂的错误处理机制。…

怎样让拼多多新店靠前?怎么做好拼多多店铺生意?

在拼多多这个日益激烈的电商平台上,新店铺如何脱颖而出、提升排名,成为了许多卖家朋友关注的焦点。那么接下来跟各位卖家详细介绍怎样让拼多多新店靠前,以及怎么做好拼多多店铺生意。 一、怎样让拼多多新店靠前 1、完善店铺信息 完善店铺信…

超声波清洗机哪家好一点?四款无比卓越精品不可错过

在日常生活中,眼镜成为了我们不可或缺的伙伴,无论是阅读书籍、工作还是享受自然风光,清晰的视野总是至关重要。然而,眼镜上不可避免地会沾染灰尘、油脂甚至细菌,影响我们的视觉体验。传统的眼镜清洗方法虽然简单&#…

从0到1构建IM系统之技术选型

由于本人是一个以JAVA为主要编程语言的全栈工程师,所以这次的技术选型也是基于JAVA体系为基础来进行构建。 开发框架: spring 全家桶 功能强大并且覆盖全面,社区活跃,解决方案成熟,学习成本低(本人属于拿来…

JAVA学习-练习试用Java实现“Excel表列名称”

问题: 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入:columnNumber 1 输出&#…

SpringBoot项目文件上传校验工具类

功能介绍 FileValidationUtils是一个工具类,主要用于验证上传的文件。以下是其主要功能和特点: 1. 文件类型验证:FileValidationUtils类中定义了一个MIME_TYPE_MAP,这个映射表包含了允许上传的文件类型和对应的MIME类型。在vali…