0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HAL工程应该这样搭建

朱老师物联网大讲堂 2024-03-26 08:09 次阅读

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

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

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

25a38d6e-eb05-11ee-9118-92fbcf53809c.gif

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

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

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

25aec8dc-eb05-11ee-9118-92fbcf53809c.png

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

25a38d6e-eb05-11ee-9118-92fbcf53809c.gif

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

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

25c3447e-eb05-11ee-9118-92fbcf53809c.png

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

25cab178-eb05-11ee-9118-92fbcf53809c.png

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

25e7666a-eb05-11ee-9118-92fbcf53809c.png

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

25f20926-eb05-11ee-9118-92fbcf53809c.png

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

25fceb66-eb05-11ee-9118-92fbcf53809c.png

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

25a38d6e-eb05-11ee-9118-92fbcf53809c.gif

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

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

26243af4-eb05-11ee-9118-92fbcf53809c.png

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

2639e4a8-eb05-11ee-9118-92fbcf53809c.png

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

264f9a96-eb05-11ee-9118-92fbcf53809c.png

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

2658c7d8-eb05-11ee-9118-92fbcf53809c.png

(3)在Startup下放置一些启动文件@1.第一个文件是:startup_stm32f429xx.s文件,将这个文件拷贝到Startup文件下。

265fe2ac-eb05-11ee-9118-92fbcf53809c.png

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

266ffa2a-eb05-11ee-9118-92fbcf53809c.png

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

268027a6-eb05-11ee-9118-92fbcf53809c.png

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

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

26877ff6-eb05-11ee-9118-92fbcf53809c.png

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

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

2697992c-eb05-11ee-9118-92fbcf53809c.png

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

@1.创建SysLibraryConfig文件

26a13888-eb05-11ee-9118-92fbcf53809c.png

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

26ae8588-eb05-11ee-9118-92fbcf53809c.png

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

26c002b8-eb05-11ee-9118-92fbcf53809c.png

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

26d2e9d2-eb05-11ee-9118-92fbcf53809c.png

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

26eba328-eb05-11ee-9118-92fbcf53809c.png

26fbf25a-eb05-11ee-9118-92fbcf53809c.png

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

25a38d6e-eb05-11ee-9118-92fbcf53809c.gif

五、在MDK工程下添加文件

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

2709a0d0-eb05-11ee-9118-92fbcf53809c.png

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

271e1858-eb05-11ee-9118-92fbcf53809c.png

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

25a38d6e-eb05-11ee-9118-92fbcf53809c.gif

六、在MDK下添加路路径

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

272afb5e-eb05-11ee-9118-92fbcf53809c.png

(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文件了

27379b16-eb05-11ee-9118-92fbcf53809c.png

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10674

    浏览量

    348775
  • HAL
    HAL
    +关注

    关注

    2

    文章

    68

    浏览量

    12472
  • Keil MDK
    +关注

    关注

    0

    文章

    60

    浏览量

    4291
收藏 人收藏

    评论

    相关推荐

    手把手带你创建HAL版本MDK工程模板

    如何快速开发 STM32 项目?我们总不能每次开发一个项目就搭建一次工程这样效率太低了。
    的头像 发表于 11-20 10:31 504次阅读
    手把手带你创建<b class='flag-5'>HAL</b>版本MDK<b class='flag-5'>工程</b>模板

    转:工程模板(HAL库移植)

    com/s/1jIvrqlC(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-001. 工程模板(
    发表于 07-12 11:58

    【阿波罗STM32F767试用体验】第九篇☞搭建eclipse的开发环境并完成led测试

    几张记录下吧,都是基本的安装软件,难度应该不大.重要的是在创建工程之后,我们需要作一些函数上的修改.首先创建一个基于stm32f7x系列的空工程然后,选择或者好像都可以。但是我尝试选择编译的程序无法运行
    发表于 05-06 15:29

    请问HAL_UART_Receive_DMA 和 HAL_UART_Transmit_DMA怎么用

    HAL_UART_Receive_DMA HAL_UART_Transmit_DMA通过UART接受数据,难道要写一个 HAL_UART_Transmit_DMA 不停的轮询吗? 除了这样
    发表于 11-16 08:43

    如何在基于HAL工程添加RTX

    HAL的部分功能实现(例如超时计数)借助于STM32F7XX_IT.C中的SYSTICK_HANDLER,而往工程中添加RTX以后要覆盖STM32F7XX_IT.C中的SYSTICK_HANDLER,因此,如何才能“优雅“的处理这个冲突呢?当前的
    发表于 03-27 19:15

    STM32工程搭建串口配置

    目录前景提要STM32工程搭建串口配置100us定时器FDCAN配置Bus-Off处理新消息接收处理发送处理使用Xavier配合测试一下完整工程下载关于用作Classic CAN微信公众号前景提要
    发表于 08-10 06:48

    基于HAL STM32的ROSSERIAL通讯

    两年前入门ROS用了RIKI的底盘套件,后来19年自己搭建底盘做比赛和项目,因为懒用来HAL,然后参考了CSDN一些其他大佬的移植使用,后来发现不稳定,效果一般。自己写了简单的接收发送协议。后来今年
    发表于 08-20 07:46

    使用HAL库新建STM32工程

    一、问题描述使用 HAL 库新建 STM32 工程后,使用 vsCode 打开工程文件夹,会提示找不到头文件,以及比变量没有定义,如 uint32_t 不是一个有效类型等错误提示。如下图所示:二
    发表于 08-23 07:38

    创建基于HAL库的STM32工程项目

    工程创建和繁琐的外设配置。但是对于初学者要懂得手动创建一个完整的工程,有利于加深对工程目录结构和各类驱动文件的理解,本文将带领读者动手创建基于HAL库的STM32
    发表于 08-23 09:27

    使用CubeMX快速搭建FREERTOS的方法

    如何使用STM32快速搭建FREERTOS小编之前一直使用正点原子家的产品, 最近准备学习学习TOUCHGFX,要用到HAL+RTOS,原子家的使用起来不方便。于是琢磨着使用STM32CUBEMX
    发表于 02-09 06:05

    搭建基于HAL库平台的方法分享

    STM32CubeMX的安装一、Java运行环境的安装二、下载STM32CubeMX三、安装stm32cubeMX软件四、利用stm32cubeMX生成一个Keil-MDK工程一、Java运行环境
    发表于 02-28 12:45

    应该只使用HAL_GPIO_ReadPin来读取值吗?

    我将其中一个 GPIO 设置为模拟模式,我想通过使用 HAL 库读取它的值。我应该只使用 HAL_GPIO_ReadPin 来读取值吗?谢谢你。
    发表于 12-08 07:46

    HAL库与CubeMX系列|Cubemx新建HAL工程

    前言  工欲善其事,必先利其器。HAL库的开发不一定必须使用cubemx,但是使用了cubemx,你绝对不会后悔。基于一些小伙伴对cubemx的使用还有一些疑问,本次小飞哥从新建工程到生成工程,编写
    发表于 12-05 14:21 10次下载
    <b class='flag-5'>HAL</b>库与CubeMX系列|Cubemx新建<b class='flag-5'>HAL</b>库<b class='flag-5'>工程</b>

    STM32之HAL库的串口接收丢字节

    HAL库之串口数据收发前言使用cubeMX创建工程文件时,默认使用HAL库。作为最新的主流库有必要认识以及好好学习一番工程配置过程,参考其他人例程即可,此处省略串口发送
    发表于 12-17 18:36 8次下载
    STM32之<b class='flag-5'>HAL</b>库的串口接收丢字节

    HAL库无法实现UART的DMA传输真是这样吗?

    使用STM32CubeMx进行图形化配置,并生成基于HAL库的初始代码,要实现UART收发功能的DMA传输的话,除了安排好的收发缓冲内存外,再就只需调用下面两个HAL库的API函数即可进行功能验证。
    的头像 发表于 01-08 11:16 1849次阅读