最近抽空玩了一下 ST 官方放出的 STM32CubeU5-V2-Preview,也就是传说中的 HAL2 库。虽然目前还只是针对 U5 系列的预览版,但里面的变化可以说是方向性的,让我感觉 ST 终于下定决心要革新整个开发生态了。这里和大家分享一下我的几点感受。
一、最让我兴奋的新功能和变化 (新奇功能)
1. 开发流程的革命:原生支持 CMake 和 VS Code!
这绝对是最大的亮点!过去我们总是在 Keil、IAR 或者 CubeIDE 这几个“重型航母”之间选择,项目迁移和团队协作总有些不便。现在,官方示例项目直接提供了 CMakeLists.txt。
这意味着什么?
IDE 无关性:你可以用 VS Code, CLion, 或者任何支持 CMake 的编辑器来开发 STM32,彻底摆脱了 IDE 锁定。
自动化和CI/CD友好:CMake 是现代 C/C++ 项目构建的事实标准,非常利于进行自动化编译、测试和持续集成。
配置更透明:告别在图形界面里点来点去的配置方式,所有的编译选项、头文件路径、宏定义都在 CMakeLists.txt 里一目了然,便于版本控制和代码审查。
结合 ST 官方的 STM32Cube for Visual Studio Code 插件,现在在 VS Code 里的开发体验已经非常流畅,代码提示、编译、调试一条龙,再也不用像以前那样费劲地手动配置 c_cpp_properties.json 了(虽然原理相通,但官方支持总是最香的)。
2. 驱动架构的进化:用 "Part Drivers" 替代 "BSP"
这是另一个底层的重大变化。官方文档说 Part drivers replace the BSP (Board Support Package) Component drivers。
以前的 BSP 有什么问题?
BSP (板级支持包) 里的驱动,比如 LCD、传感器的驱动,通常和特定的开发板(比如 NUCLEO-U575ZI-Q)以及 HAL 库紧密耦合。如果你想把这块 LCD 用到自己的板子上,或者换一颗 STM32 芯片,代码移植会非常痛苦。
现在的 "Part Drivers" 有多香?
"Part Drivers" 被设计成独立的、与微控制器解耦的驱动。它们只关心外部器件本身(比如一颗 LIS2DW12 加速度计),而把与 MCU 的通信(比如 SPI 读写、I2C 读写)抽象成一个通用的 IO 接口。
举个例子:LIS2DW12 的驱动不再直接调用 HAL_SPI_Transmit(),而是调用一个像 platform_io_write() 这样的函数。而这个 platform_io_write() 函数需要我们自己根据具体的 MCU 和板子来实现。
这样做的好处是:这个 LIS2DW12 的驱动理论上可以在任何 STM32 芯片上复用,甚至可以移植到其他品牌的 MCU 上,我们只需要实现底层的 IO 接口就行了。这极大地提高了代码的可重用性和可移植性!
3. API 层面的人性化提升
官方提到 HAL2 的目标是提升易用性 (Usability) 和 性能 (Performance)。从示例代码(比如你上一张图里的 main.c)可以看出一些端倪:
清晰的函数职责:app_init() 负责应用初始化,app_process() 负责主循环逻辑,结构非常清晰。
统一的错误处理:通过 ExecStatus 这样的状态变量来管理程序的执行状态,使得错误处理流程更加规范。
可以预见,未来的 HAL2 API 在函数命名、参数设计、返回值等方面会更加统一和现代化,并且会更好地支持 RTOS。
|