• 正文
  • 相关推荐
申请入驻 产业图谱

STM32CubeMX2对应的HAL2,和之前HAL完全不兼容!

03/27 09:47
1879
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

公众号 | strongerHuang

前段时间,ST推出全新STM32CubeMX2,同时硬件抽象层也对应的进行了升级,官方叫HAL2。

HAL:Hardware Abstraction Layer,翻译过来叫:硬件抽象层,是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。

前面,我体验STM32CubeMX2并生成初始化代码时,大概看了一下生成代码的API(比如:HAL_GPIO_Init、HAL_GPIO_WritePin等),感觉和之前HAL库的API一样,当时也没细看具体源码,就觉得HAL库还是类似一样的。

而最近才细看了官方的描述、以及库对应的源码,发现还真有很大差异。就拿STM32同系列(C系列)C0和C5的HAL相比:

我发现了其中区别最大的一点:新的HAL2库(STM32C5库)调用了LL库的代码。

官方的描述:HAL2(V2.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库完全不兼容。

意法半导体

意法半导体

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn

意法半导体拥有49,000名半导体技术的创造者和创新者,掌握半导体供应链和先进的制造设备。作为一家半导体垂直整合制造商(IDM),意法半导体与二十多万家客户、成千上万名合作伙伴一起研发产品和解决方案,共同构建生态系统,帮助他们更好地应对各种挑战和新机遇,满足世界对可持续发展的更高需求。意法半导体的技术让人们的出行更智能,让电源和能源管理更高效,让云连接的自主化设备应用更广泛。我们正按计划在所有直接和间接排放(包括范围1和范围2)、产品运输、商务旅行以及员工通勤排放(重点关注的范围3)方面实现碳中和,并在2027年底前实现100%使用可再生电力的目标。 详情请浏览意法半导体公司网站:www.st.com.cn收起

查看更多

相关推荐

作者黄工,从事嵌入式软件开发工作8年有余,高级嵌入式软件工程师,业余维护公众号『strongerHuang』,分享嵌入式软硬件、单片机、物联网等内容。