STM32之CubeMX学习笔记(1)CubeMX&HAL库介绍 CubeMX介绍HAL库介绍初步使用感受

CubeMX介绍

STM32用的CubeMX是ST公司出品的一款C代码生成器软件,它的图形化工具界面可以让使用者可视化地选择所需的芯片,并设置选用任一引脚、任一外设。另外的,CubeMX还提供了自动识别引脚冲突、设置时钟树、功耗预测等功能。使用CubeMX能减轻底层开发工作量,节约时间。

HAL库介绍

CubeMX生成的代码使用的并不是32单片机的标准库,而是使用的HAL库HAL,是英文Hardware Abstraction Layer的缩写,翻译是硬件抽象层。它是内核与芯片内硬件设备的关联层,我们可以容易地在硬件抽象层中编程来操作内核,硬件抽象层的易于移植性也让在不同内核下的编程不再复杂。其实在很多嵌入式平台开发中都诞生了自己的HAL,比如,安卓和微软的内核都有它们自己的HAL,意法半导体也不能落后,它拥有如此多种类的芯片,也有很多的市场份额,为了提高自己在市场中的话语权,牢牢抓住使用ST芯片的老用户,它也开发出了属于自己的HAL库。首先是多点开发的花样,让开发更容易上手,更加专业,吸引更多新用户;其次也是为了提高库的可移植性,代替标准库。下面我就自己初次接触CubeMX和HAL库,谈谈自己的使用感受。

初步使用感受

当我第一次学习STM32单片机的时候,使用的是学长同款的某子的开发板,通过观看其配套的光盘教学视频,聆听我的未来不是梦,来对32单片机进行一步一步的学习。但是教学视频中介绍的32丰富的寄存器以及库函数的使用让调外设也成为了一件复杂工作。我当时在学的时候,看着各种外设的结构体变量名,就在想:这种类似菜单的参数选择做成一个软件不就行了。就在我对32单片机和它的背景更加了解的时候,得知了CubeMX软件的存在。

原来ST的先人早就在几年前就帮我们准备好了知识的财富。据了解前期的CubeMX的Bug简直不忍直视,明明是一个简化开发的工具,然而在学会使用它的过程中,付出的代价远远超过了它能带来的便捷,当然早期的HAL要背最大的锅。在2017年,能在网上查到很多关于CubeMXHAL库的吐槽。但是如今的CubeMX逐渐完善,截止今天我写稿的时候CubeMX已经更新到了5.6.1版本。我相信以后的CubeMX一定会越来越完善的。

回归小标题,谈谈我的初步使用感受。(本人最近就使用HAL库做了一个二轮平衡车项目,所以只是初步感受了)

创建工程的简化:一般情况下,在我没学CubeMX的时候要制作一个项目,首先要复制某子的空的工程文件,然后去各个库函数例程中,搬运自己所需要的Hardware,然后改引脚,再根据自己的需求,改变参数。(u1s1,某子有些程序是真的难搬运,全搅和在一起)还有一些情况的基本上都是老程序手了,自己都写过相应的Hardware,有属于自己的代码风格,那么这样他只要搬运自己以前项目中的程序部分就行了,再按需求修改。大气的红牛使用CubeMX,你只需要在图形化的操作界面中,选择好芯片,改好ST下载,设置好外部晶振,改好时钟,定义好引脚,定义好外设,设置代码输出路径(特别注意,必须是全英文路径),改好IDE(本人使用MDK),生成代码即可。个人觉得比某子的工程创建要方便很多,很适合掌握了32基础知识,但手上没有很多项目代码的新手。软件学习还是相对比较简单的,在之后的博客中我会逐步更新。

助你学习STM32:在CubeMX中配置芯片的时候,你可以清楚的看到该芯片的引脚和外设功能,也就是说,在使用CubeMX配置的过程中,我们就可以学习一遍STM32外设的功能,和该芯片的时钟频率、引脚功能分配等等,可以说这就是一个很好的学习工具。

HAL库的优劣:比起标准库,CubeMX使用的HAL库集成度会更加高,很多原本在标准库中要自己手动配置,组合的代码,在HAL库中可能就直接是封装好的函数,非常方便。但同时这样也带来了一些弊端,首先因为要考虑移植性和代码稳定性,HAL库中封装的函数不避免的有很多判断,这样的确影响了代码的效率,但是这仅局限于高速场合,一般情况下,使用HAL库和使用标准库的代码速度差别可以忽略不计。有那么多时间,还不如优化一下自己的算法代码,再想快一点,还可以使用LL库。这里具体就不谈了。

添加操作系统FreeRTOS:在CubeMX上是可以直接移植FreeRTOS的,这样就避免了在移植FreeRTOS时出现接口错误。关于操作系统这方面,我还不是很了解,还需要努力。

总而言之,对于新手来说,CubeMX配合HAL库是一个很好的入门学习工具,这种开发方式对于传统开发肯定是更加Fashion;对于老手来说,这也提供了一种更快速更简便的开发方式,在开发一些简单项目上肯定能提高工作效率的。