1.基于HAL库的STM32程序开发

之前一直在用HAL库来进行STM32单片机的开发,HAL库拥有ST官方推出的CubeMX与CubeIDE,极大的减少了开发流程,能够使我们快速的上手STM32程序开发。那么CubeMX与CubeIDE软件是做什么的呢,简单来说就是我们可以通过这个软件来进行代码的生成,是的没有错,这个软件给我们提供了简单易懂的图形化界面,仅仅需要动一动鼠标就可以完成单片机外设的一些配置。我们一般进行程序开发主要分为两部分,一是外设的各项参数配置,第二个就是一些用户逻辑的实现,而ST公司推出的这两款软件直接把前者繁琐的参数配置变成了图形化界面配置,使用户不必深究单片机的内部运作原理也能将需要的功能实现。

说了这么多优点,那么HAL库有什么缺点吗,肯定是有的。因为是通过图形化界面对单片机的内部资源进行配置,在这个过程中完全不需要用户敲代码来实现,就会造成用户对单片机的理解不够深,只会用而不知其中原理,有的人可能就要说了,会用不就可以了吗,我们最终的目的是实现功能,功能可以实现就没有问题。那么是真的没有问题吗,答案是否定的,这里面存在一个对嵌入式软件工程师来说非常致命的问题,我们下文再分析。

2.先学HAL库还是先学标准库

首先这个问题在我的理解中看来,这要依据个人自身的情况来进行选择,我本人是先学HAL库再进行标准库的学习。我在程序开发期间,会涉及到一些模块驱动的移植,而这些驱动大多是基于标准库去进行开发的,这个时候我就需要进行库函数的一些更改,还是比较麻烦的,但是我们也需要清楚的认识到一点,HAL库是ST官方大力推崇的开发方式,这种方式以后用的人也会越来越多,它确实很方便,有时候甚至不需要查看芯片的数据手册就能知道这个芯片的资源。

我建议哪些不喜欢系统学习的人先进行HAL库的学习,直接上手去写代码,快速入门,入门以后再深究其中的原理,到最后自然而然会去研究标准库。学习能力比较强且适合系统学习的人直接先学习标准库,标准库的难度是在HAL库之上的,如果你能够熟练掌握标准库,CubeMX与CubeIDE自然而然就会用了。另外顺嘴提一句,HAL库的最大优势就是用软件配置单片机资源,网上现在有HAL库的教学视频并不使用CubeMX与CubeIDE来生成代码,而是下载HAL库函数的固件包,手动建立工程项目,这种开发方法本质上是跟标准库相同的,不如直接去学习标准库。

3.为什么需要学习标准库

那说了这么多有些小明可能就要问了,为什么我必须要学标准库呢,我会使用HAL库不就可以了吗。HAL库的推出在方便开发的同时,还会增加它的用户粘性。CubeMX与CubeIDE这两款软件,基本上只支持自家芯片的代码生成,如果你说你以后只使用ST家的单片机,那么确实够用了,可实际情况却是,有些项目为了控制成本,会采用一些国产单片机,虽然都是ARM架构32位单片机,但是这些单片机可能只给你一个固件库,没有了生成代码软件的光环加成,开发工作寸步难行。有了这个固件库,我们却可以通过标准库的开发方法去举一反三,顺利上手新芯片的开发。

那么我们为何不直接学习国产单片机呢?国产单片机的教学资源相对较少,通过我这几天的考察,有些单片机给的固件库中的代码,注释极少,只有寥寥几个单词,让人看了属实摸不着头脑。我猜想国产单片机的厂商,默认你已经很熟悉ARM架构32位单片机的开发了,注释只起到一个提示作用。反观STM32单片机的固件库,代码注释详细周到,用到某一个函数需要哪些参数都会在注释中标注,还会说明其功能、注意事项等等。新手入门不能够怕麻烦,虽然有些东西确实很繁琐,但是STM32的固件库代码注释它总是将你向正确的道路上引领,相比于国产单片机的注释,这一点还是值得肯定的。

4.总结

总而言之言而总之,新手入门建议使用ST的单片机进行学习,教育资源丰富,并且芯片稳定性也得到了市场的认可,不至于出现某些让人匪夷所思的现象,标准库与HAL库本质上都是操作单片机的寄存器,只不过函数的封装不一样罢了,那么学习HAL库与标准库的方法,在第三点也已经说明,大家就自己的实际情况选择实际的学习方法。

后面我会出一些标准库的学习笔记供大家参考,我们共同学习,一起进步!

发表回复

后才能评论