HAL工程应该这样搭建~

news2024/11/16 1:16:04

目录

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

二、在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.coloradmin.cn/o/1705342.html

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

相关文章

010、哈希_命令

在Redis中,哈希类型是指键值本身又是一个键值对结构,形如value{{field1,value1},…{fieldN,valueN}} 如图字符串和哈希类型对比 (1)设置值 hset key field value下面为user:1添加…

免费,Python蓝桥杯等级考试真题--第13级(含答案解析和代码)

Python蓝桥杯等级考试真题–第13级 一、 选择题 答案:C 解析:正向下标由0开始,下标3代表第四个元素,故答案为C。 答案:A 解析:range(0,4)的取前不取后,元组的符号是小括…

【运维自动化-配置平台】如何跨业务转移主机

在如何创建业务拓扑中,了解到业务是蓝鲸体系重要的资源管理纬度,主机在业务之前需要流转怎么做呢?比如要把A业务一台主机划给B业务使用权限中心 跨业务转移主机一般场景是由源主机所在业务的负责人发起,需要申请目标业务的相关权…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展,越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术,已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中,节点之间可以通过多个跳数进行通信,从而实现大…

You don‘t have enough free space或者no space left on device异常

1.磁盘空间不足 Linux安装软件显示 You dont have enough free space 或者docker拉镜像时,出现磁盘空间不足的情况 no space left on device 如果你是ubuntu系统。查看磁盘空间 df -h 多半是这个目录满了/dev/mapper/ubuntu--vg-ubuntu--lv 大多情况我们只希望扩…

821. 字符的最短距离 - 力扣

1. 题目 给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。 返回一个整数数组 answer ,其中 answer.length s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。 两个下标 i 和 j 之间的 距离 为 abs(i - j) &#xff0c…

Stable Diffusion【二次元模型】:质量高细节丰富的动漫风格大模型anima_pencil-XL

今天给大家介绍的是一个动漫风格的大模型anima_pencil-XL,这个模型出自一位日本的创作者。最早的版本是V1.0.0是今年1月份才发布的,短短的2个月已经更新了5个版本,最新的版本是V2.6.0,可见作者更新版本的频率有多高。 提到anima_…

操作系统4_存储器管理

操作系统4_存储器管理 文章目录 操作系统4_存储器管理1. 存储器的管理功能1.1 地址映射/地址重定位1.2 主存分配与回收1.3 存储保护1.4 主存扩充/虚拟内存2. 存储器的层次结构3. 程序的接入与链接3.1 程序的链接3.2 程序的装入4. 分区存储管理4.1 单一连续分配4.2 固定分区分配…

vue3 部署后修改配置文件

前端项目部署之后,运维可以自行修改配置文件里的接口IP,达到无需再次打包就可以使用的效果 vue2如何修改请看vue 部署后修改配置文件(接口IP)_vue部署后修改配置文件-CSDN博客 使用前提: vite搭建的vue3项目 使用setu…

如何提高运放的输出电流驱动能力

复合放大器的稳定性考虑因素 辅助运算放大器通常放置在主运算放大器的反馈环路内部,如图 1(a) 所示。次级器件引入的相位滞后往往会侵蚀复合放大器的 相位裕度? m ,因此我们可能必须采取适当的频率补偿措施。 复合放大器的开环增益 ac 和噪声增益 1/β…

AI绘画整合包最新Stable Diffusion安装包+教程+模型+插件+动作来了(纯教学)

首先了解一下AI绘画工具,介绍一下什么是Stable Diffusion,模型的主要功能和作用 Stable Diffusion(简称SD),是一种先进的人工智能技术。这项技术的核心能力在于,它能够根据用户提供的文字描述,…

Apple Developer 个人开发者账号申请流程

Apple Developer 个人开发者账号申请流程 开发者账号类型功能介绍 公司、政府的需要邓白氏码比较复杂 分五个步骤进行 1、注册苹果账号apple id 2、开启双重认证 3、下载Apple Developer应用 4、到Apple Developer应用填写申请资料 5、绑定支付宝或者微信支付苹果年费688 一…

go语言方法之方法声明

从我们的理解来讲,一个对象其实也就是一个简单的赋值或者一个变量,在这个对象中会包含一些方法,而一个方法则是一个一个和特殊类型关联的函数。一个面向对象的程序会用方法来表达其属性和对应的操作,这样使用这个对象的用户就不需…

《精通Stable Diffusion AI绘画:基础技巧、实战案例与海量资源一站式学习》

随着人工智能技术的迅猛发展,AI绘画已经成为了一个炙手可热的话题。特别是在设计、艺术和创意领域,AI绘画工具的出现无疑为创作者们带来了更多的可能性和便利。《Stable Diffusion AI绘画从提示词到模型出图》这本书,就是一本深入解析Stable …

web自动化的断言和日志封装

断言 UI自动化常见的断言条件包括: 通过当前页面的URL地址通过当前页面的标题通过当前页面的提示文本信息通过当前页面的某些元素变化/显示 一句话总结:通过肉眼观察页面的变化检查。 【用代码模仿人的识别页面】 一般断言写一条就够了,如…

AI大模型实现德语口语练习

利用AI大模型实现德语口语练习的应用需要整合多种技术和资源,以确保学生能够获得全面、互动和有效的学习体验。以下是实现德语口语练习应用的详细流程和技术要点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 实现流程 …

latex中复制到word里面之后如何转变成word自带的公式

详细步骤如下: 第一步,将latex中的公式复制到word里面,例如:$r_1^d$ 第二步,选中$$里面的部分,也就是去掉$$,选中剩余的部分,例如:r_1^d 第三步,word工具栏里…

【招聘】易基因科技诚聘销售总监 虚位以待

🚀 关于我们 易基因拥有一支充满活力的科研服务团队,致力于以“引领表观遗传学科学研究与临床应用”为愿景,依托高通量测序技术和云数据分析平台,为医疗机构、科研机构、企事业单位等提供以表观遗传学技术为核心的多组学科研服务…

【高阶数据结构(七)】B+树, 索引原理讲解

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:高阶数据结构专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多数据结构   🔝🔝 高阶数据结构 1. 前言2. B树讲解…

3070ti和4060ti哪个好

GeForce RTX 3070 Ti和RTX 4060 Ti主要在显存类型、运行频率和性能表现等方面有所区别。具体分析如下: 显存类型 GeForce RTX 3070 Ti:搭载了8GB GDDR6X显存,显存速度为19Gbps,显存位宽为256 bit。GeForce RTX 4060 Ti&#xff1…