HAL工程应该这样搭建

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@3.这个包下载完成后,下载到哪个位置了?下载到你的MDK5的安装目录下的某一个路径了,我们要寻找这个包可以按照以下路径来寻找。C:\Personal\install\WorkSoftware\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接口函数

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

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

@1.创建SysLibraryConfig文件

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

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

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

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

五、在MDK工程下添加文件

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

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

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

@2.根据@1的步骤在Libraries组下点击AddFiles,将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”那个位置“includepaths”添加路径,第3步:点击“红圈圈4”进行路径添加

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

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

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

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

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

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

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

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

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

THE END
1.Android把目录和文件设置成可读可写的ch命令res目录:存放图片、布局文件、字符串、菜单等文件。 bin目录:输出文件夹,如生成的APK文件。 project.properties:工程属性文件配置。 gen目录:系统自动生成的代码目录,存放R.java. 这个R.java文件是系统自动生成的文件,非常的重要。这个R.java默认有attr、drawable、layout、string等4个静态内部类,每个类对应一种资源。https://blog.51cto.com/u_16213610/12809433
2.为什么文件夹有Thumbs.db文件?Thumbs.db是一个用于Microsoft Windows系统缓存Windows Explorer的缩略图的文件。https://www.callmysoft.com/support/5027.html
3.Unity引擎资源管理机制介绍新资源导入后引擎会主要做什么? 当新资源导入工程中时,Unity会读取并处理添加到Assets文件夹中的任何文件,并将文件内容转换为Unity引擎可用的内部数据,而导入的源资源,引擎并不会做改动。 引擎为什么这么做? 对于大多数类型的资产(Asset),Unity需要将资产源文件中的数据转换为其可在游戏或实时应用程序中使用的格式。https://aihailan.com/archives/4218
4.AlfrescoCommunity23.2大家好,这里是小铃铛~ 以下是一篇关于Alfresco部署的经验贴分享 对于社区中不熟悉Alfresco的小伙伴,小铃铛先来介绍一下这个系统。Alfresco是企业内容管理系统,具体来说,它支持在一个大的群体中的文件管理,对于文件有CRUD、版本迭代、checkin&checkout、rendition(保留策略)、policy,对于文件夹有folder rules,对于临时组成https://blog.csdn.net/qq_61897993/article/details/144359722
5."dicts.lsp"文件详解与应用指南导读本文将详细介绍"dicts.lsp"文件的构成、功能及应用。首先,我们将概述"dicts.lsp"文件的基本概念及其在编程中的作用。接着,我们将深入探讨 本文将详细介绍"dicts.lsp"文件的构成、功能及应用。首先,我们将概述"dicts.lsp"文件的基本概念及其在编程中的作用。接着,我们将深入探讨文件的结构和语法规则,帮助读http://m.caohai.net/hlkj/202412/187982.html
6.inc文件详解十、inc文件夹什么意思 inc文件夹是指存储inc文件的文件夹,它通常在项目的根目录下,用于组织inc文件。在inc文件夹中,可以按照一定的规则对inc文件进行组织、分类,便于管理和查找。inc文件夹是一种常见的代码组织方式,能够有效提高代码复用率。 以上就是关于inc文件的详细介绍,通过引入inc文件,可以有效地提高代码复用率https://www.506064.com/n/236757.html
7.揭秘安卓手机文件夹的隐藏宝藏:轻松管理你的存储空间这款第三方文件管理器颇受欢迎,其界面设计非常人性化。文件夹分类井然有序,颜色辨识度高。与那些预装文件管理器千篇一律的白色图标不同,它让人一目了然,查找方便。 需要留意的是,第三方文件管理器或许藏有安全隐患。因为并非手机出厂时就有的,其来源可能不够可信。甚至有可能有恶意软件伪装成文件管理器。 https://www.lanmiyun.com/content/?p=5637
8.3DSMax设置项目文件夹是什么意思3d溜溜设计问答平台为广大设计师们提供各种3DSMax设置项目文件夹是什么意思问题解答,3d溜溜素材问答平台汇聚全球各地的设计师、名师名司、设计爱好者等设计灵感和经验,迅速为您解决3DSMax设置项目文件夹是什么意思的困惑。https://www.3d66.com/answers_relation/relation_1516656.html
9.安卓framework是什么意思(安卓framework文件夹)安卓framework是什么意思(安卓framework文件夹) Framework是什么? 1、framework意思是“框架,骨架;结构,构架”。Framework,英文单词,主要用作名词。短语搭配:Multimedia Framework 多媒体框架 ; 预设的多媒体框架。Regulatory framework 规章制度 ; 规管架构 ; 监管框架。https://www.eolink.com/news/post/86864.html
10.TapestryTapestry5注意:记住,如果你的布局组件包含一个资源像是一个图片或是一个样式表,你必须使用一个绝对的URL。相同的组件被用于不同文件夹里的页面,或存在不同的活动上下文里,所以相对URLs不能工作。 组件总是必须有一个java类,但在这个不重要的例子里,布局组件不需要任何逻辑: https://liuqingyu.wordpress.com/tag/tapestry-2/
11.CI框架中libraries,helpers,hooks文件夹详细说明php实例CI框架中libraries,helpers,hooks文件夹详细说明 CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而“优雅”的工具包,它可以为 PHP 程序员建立功能完善的 Web 应用程序。今天我们来看看CI框架中几个文件夹都是干什么用的 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!https://www.jb51.net/article/50906.htm
12.idea怎么添加library假设你想要将项目目录下的lib文件夹中的所有*.jar文件添加到项目中,常规的操作步骤是这样的:首先,打开你的IDEA(IntelliJ IDEA),然后选择“File”菜单,接着点击“Project Structure”(快捷键为Ctrl + Shift + Alt + S)。在弹出的窗口中,找到“Libraries”选项,点击后会出现“New Project https://zhidao.baidu.com/question/1379368003640903819.html
13.哪里可以找到"Libraries“文件夹(NetbeansJAR)在NetBeans IDE中,可以通过以下步骤找到"Libraries"文件夹(NetBeans JAR): 1. 打开NetBeans IDE。 2. 在主菜单中,选择"File"(文件)。 https://cloud.tencent.com/developer/information/%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%22Libraries%E2%80%9C%E6%96%87%E4%BB%B6%E5%A4%B9(Netbeans%20JAR)
14.[Bug]勾选关闭文件校验后PCL仍会尝试补全Libraries,即使文件检查项 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一 Bug 未被提交过。 描述 勾选关闭文件校验后 PCL 仍会尝试补全 Libraries 重现步骤 替换掉 Libraries 内的 OptiFine,PCL 依旧会尝试补全文件 日志与附件 Log1.txthttps://github.com/Hex-Dragon/PCL2/issues/3792
15.launcherwasunabletolocateitscompanionsharedlibrarylibraries是什么文件夹? JRE System Library,Java EE 5 Libraries,Referenced Libraries这三个都是各种JAR包(库文件)的集合名称,名称可以任意取,只不过这是MyEclipse默认. mc启动失败,提示loadlibrary failed with error 1114:动态链接库(DLL)初始化例程失败? https://www.shiwaiyun.com/article/post/203034.html
16.winxs文件夹是什么意思的文件夹。系统使用这个文件夹存储各个版本的Windows XP组件,减少因为动态链接库(Dynamic Link Librarieshttps://ask.zol.com.cn/x/7854467.html
17.Android技术体系结构Android开发语言与工具Android 4.2.2+Android Private Librariesjar文件 assets资源文件,图片,音频,视频等 bin二进制文件,编译过后的文件 libs第三方的jar文件,即引用第三方的代码 res也是资源文件,与assets不同,生成的文件都有ID ├drawable-hdpi高分辨率图片,我们要为不同分辨率准备不同的图片。 https://www.open-open.com/lib/view/open1386478522095.html
18.ipa文件脱壳是什么意思?要脱壳的应用程序的二进制文件。 5. 在终端中输入以下命令:`DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/应用程序文件夹/应用程序名称` 6. 等待一段时间,直到应用程序启动。 7. 在设备的/var/mobile/Library/Caches目录下找到脱壳后的二进制文件,将其复制到电脑中。 https://app.applebyme.cn/cloud/appshangjia/13582.html
19.SDL入门教程(一):2VisualC++下的安装与设置然后,回到VC的.\VC文件夹下,打开lib文件夹: C:\Program Files\Microsoft Visual Studio 9.0\VC\lib 将SDL Development Libraries中lib文件夹下的SDL.lib和SDLmain.lib两个文件拷贝到刚才的那个VC的lib文件夹下。 最后,把SDL Development Libraries中lib文件夹下的SDL.dll文件拷贝到 http://www.cppblog.com/lf426/archive/2008/01/31/42289.html
20.我的世界文件结构介绍文件结构介绍在国内大部分玩家都是使用游戏文件+盗版启动器的方式进行游戏,因此大家一般都能够在和启动器同一目录下找到这个文件夹,它叫“.minecraft”,这个里面包含了所有游戏相关的文件。在教程中称这个文件夹为主文件夹。 在玩家从未使用任何启动器启动游戏之前,主文件夹内只有这3个文件夹:assets、libraries 和 versions。 https://m.3dmgame.com/gl/3894256.html
21.CKS32M0官方标准库简介Libraries 文件夹下面有 CMSIS 和 CKS32F0xx_StdPeriph_Driver 两个目录,这两个目录包含固件库核心的所有子文件夹和文件。 2.2.1 CKS32F0xx_StdPeriph_Driver CKS32F0xx_StdPeriph_Driver 放的是 CKSF0xx 标准外设固件库源码文件和对应的头文件。 https://www.jianshu.com/p/9d9bc0478289
22.SketchLibraries功能图文详解Mac教程外部Libraries 想要通过Libraries实现外部共享或协作?完全没问题 –将Libraries文件存放在本地服务器、云存储或版本控制系统当中,向相关人员开放访问权限即可。 譬如你可以将Libraries文件放置在Dropbox共享文件夹里,然后你的朋友或同事将其添加到自己的Sketch Libraries当中,这样你们就可以基于同一份Library文件进行工作了;对于https://mac.wmzhe.com/article/10085.html
23.win10怎么关闭生成SystemVolumeInformation文件夹的功能》Windows 10 自带的索引服务也会从该文件夹中的IndexerVolumeGuid文件下查看当前可插拔存储设备的唯一标识符, 》以便对该设备的内容进行快速索引和查看。 》即便删除该文件夹,也会重新在插入移动设备时默认重建一个。 以上内容的意思是指: win10系统中 不可以关闭 自动生成【System Volume Information】的功能 对吗https://learn.microsoft.com/zh-cn/archive/msdn-technet-forums/087b4e71-fa7b-480c-aeec-1443a14f010f