STM32CubeMX2对应的HAL2,和之前HAL完全不兼容!
关注星标公众号不错过精彩内容作者 | strongerHuang公众号 | strongerHuang前段时间ST推出全新STM32CubeMX2同时硬件抽象层也对应的进行了升级官方叫HAL2。HALHardware Abstraction Layer翻译过来叫硬件抽象层是位于操作系统内核与硬件电路之间的接口层其目的在于将硬件抽象化。前面我体验STM32CubeMX2并生成初始化代码时大概看了一下生成代码的API比如HAL_GPIO_Init、HAL_GPIO_WritePin等感觉和之前HAL库的API一样当时也没细看具体源码就觉得HAL库还是类似一样的。而最近才细看了官方的描述、以及库对应的源码发现还真有很大差异。就拿STM32同系列C系列C0和C5的HAL相比我发现了其中区别最大的一点新的HAL2库STM32C5库调用了LL库的代码。官方的描述HAL2V2.0.0版本带来了许多增强功能包括性能运行速度和Flash空间占用有很大改进并与新的STM32CubeMX2兼容。提高性能和减少占用空间感觉是HAL2整合并汲取了HAL易于移植和LL库性能和空间的优点。API接口名称相同、参数不同HAL2和HAL有些API的名称相同但参数不同比如HAL_GPIO_Init通过对比这个API你会发现HAL2多了状态返回值枚举类型的hal_status_t同时传入参数的方式也不一样。所以最新的HAL2和之前的HAL库是不兼容的虽然很多API名称相同但参数不同。通过对比同样外设的源码发现基本是“一片红”可以说千差万别。甚至对比工具都不知道怎么检索了同一个API接口都不能匹配一起了。所以我还特意单独把某些API比如HAL_USART_Init接口复制到另一个文件进行对比。当然源码有区别与底层硬件有关系所以我专门找C系列相近或同源的系列进行对比我重点还是把相同API进行一些简单对比。为此我还专门把跨系列的HAL进行了对比发现C0和F4有很多地方都是相同的。所以我综合得出的结论就是全新的HAL2库和之前的HAL库完全不兼容。------------END------------分享一个基于MCU实现智能陪伴时钟的项目原生RDMA规模化scaleFabric性能指标与落地实践RISC-V单片机集成开发环境MRS新增支持GCC15工具链