|
摘要 本文介绍在STM32应用开发中HAL2项目工程格式的使用方法,对比说明了HAL2相较于HAL1结构的变更点、新工程结构对用户代码的影响,以及安全配合代码自动生成的操作方式。 文中说明:在HAL2架构下,main.c作为用户主代码区,不再被代码生成工具覆盖;自动生成层具备更强的可移植性与复用性。同时介绍了借助代码生成菜单、代码预览功能保护用户代码的手段、新工程格式适配VS Codeworkspace的方式,以及HAL2中驱动、handles和中断服务函数的组织结构。 简介 HAL2的推出标志着STM32Cube软件生态迎来重要升级。从驱动层面来看,HAL2优化了运行性能与内存占用,为外设handles设计了逻辑更清晰的状态机,并统一依托底层LL接口实现寄存器访问。从工程层面来看,HAL2重构了生成代码的目录架构,同时调整了用户代码的集成方式。 本文梳理HAL1与HAL2在工程格式及文件架构上的差异。 前置准备 需安装下述工具:
1、文件目录结构1.1 HAL1架构 在HAL1架构中:
黄色区块为Core文件夹:
粉色区块为Drivers文件夹:
在该架构下,main.c存放于Core/Src目录,与其他自动生成文件混放。HAL驱动保存在“项目工程本地”的Drivers文件夹中,以下三类代码无明确划分边界:
工程配置重新生成代码时会覆盖Core目录全部内容(含main.c、stm32zyxx_it.c),用户只能依托文件内/USER CODE/预留区域编写代码。 1.2 HAL2架构 HAL2将工程划分为三层独立目录。
Generated与DFP(黄色框) 黄色框包含顶层生成目录(内含hal、utilities、misc等子目录)以及stm32c5xx_dfp目录。 本层为generated+DFP(Device Family Pack)层:
该目录归属工具管理:STM32CubeMX2可重新生成或更新本目录内容,不会改动用户应用代码。 代码重新生成时可开启差异对比提示:在STM32CubeMX2的【Project settings】标签页,点击【Advanced】,选择【Custom…】可自定义配置代码生成分类规则。
HAL驱动软件包(粉色框) 粉色框圈选stm32c5xx_drivers目录:
本目录是该芯片系列对应的HAL2驱动包,独立于工程本体:
该结构由HAL1时代Drivers/STM32ZYxx_HAL_Driver迭代优化而来,现已实现标准化打包与版本管控。 用户可修改应用代码(蓝色框) 蓝色框是架构改动最明显的区域,包含user_modifiable用户可编辑目录。
本区域明确标注为用户可修改:
如需避免main.c被生成操作覆盖,建议将分类规则改为【Custom】,用户可编辑文件选项配置为【Don’t generate】或【Backup】。
和HAL1的关键区别:main.c不再存放于工具管控的Core/Src生成目录内,而是单独放在标识明确的用户目录下,HAL2工具在重新生成代码时默认不会覆盖该文件。 1.3 HAL1与HAL2对比
HAL1
HAL2
简言之,HAL2把HAL1杂乱混编的单目录工程,拆分为三层架构:device package、generated HAL、独立隔离的用户应用区(main.c置于该区核心)。 **总结 ** HAL1与HAL2对比可见:工程架构从代码混杂模式升级为分层规整架构。HAL1中main.c、生成代码、HAL驱动共处Core与Drivers文件夹,重生成极易误改用户业务代码。 HAL2实现功能解耦:配置相关代码存放于生成目录;器件包与HAL2驱动分别封装在stm32c5xx_dfp、stm32c5xx_drivers;用户文件(重点是main.c)移入专属user_modifiable目录,工具管控目录和用户开发目录一目了然。 由此代码生成更安全、版本升级更便捷;工程移植至新开发板/芯片时,只需重新生成HAL2层,原有应用代码可直接复用。HAL2配套驱动质量更优,工程结构健壮、易于维护。 |
【STM32C5】简而不凡,锋芒自显——Nucleo-STM32C562RE快速上手
STM32 硬核调试技巧:用 DWT 硬件监控内存读写与函数调用
巧用 Linker 自定义变量,破解 STM32 Flash 全片自检 ROM 大小配置难题
实战经验 | LAT1578 SAU对NSC分区的影响
【板卡测评】STEVAL-STWINKT1B 上电后任意工具读出 ACC/GYRO/MAG 实时数据并截图
有奖直播 | STM32CubeIDE for VS Code开发新体验
《STM32CubeIDE For VS Code线上课程》学习笔记:从零到一的嵌入式开发环境搭建与实践心得
F429I-DISC1体验报告(1)久经沙场,锋芒依旧丨TouchGFX开发F429丨国庆开发板测评活动
实战经验 | KEIL环境下printf导致程序无法执行的解决方案
经验分享 | 程序换个IDE就不运行了?
微信公众号
手机版