本人使用STM32系列MCU也有好多年了,一直使用标准的固件库进行代码开发,习惯了看芯片手册自己编写驱动(或者从例程中直接复制驱动,然后改成自己适合自己的),一直觉得这样的开发方式和开发节奏挺好,最近逛论坛,才发现,原来已经有新的开发方式出现,那就是HAL库的使用。搜了写HAL库相关的使用,确实感觉要比使用标准库来的方便一些,图形化的界面,所有MCU支持的功能,精确到配置的pin,都很直观的呈现在眼前,选择完要配置的外设,可以直接生成工程,方便了许多,也使新手更容易入门。 借此宝地,请各位论坛上的大神、看官把自己使用这两个库的经验分享下,共同进步。 我先来,抛砖引玉。 由于本人之前一直使用的是标准库,网上也有很多关于标准库的使用例程,想用哪个外设的驱动或者想使用某个外设在产品中实现某些功能,随便一搜有一大堆,感觉开发起来也速度也很快。但是,网上的例程更多的是外设的基本使用,也就是说能用起来就行,很少关注到程序中的一些细节问题,这就需要我们自己去挖掘深层次的东西,毕竟产品代码不是例程或者实验,需要严谨的逻辑和严格的异常保护。在做这些事情的过程中,我们更多的是要去了解芯片手册和其原理。从这个角度来看,标准库的东西更有利于我们去了解芯片的特性和原理。 |
ST目前主推的图形化配置工具CubeMX,生成的代码就是使用HAL库,使用CubeMX开发可以大大减轻开发者的工作量。
如楼主所说,使用标准库有利于开发者了解芯片特性和原理。其缺点也是显而易见的,就是代码要自己组织。比如,外设的配置,是个很繁重的工作。
像楼主这样,已经有好多年的开发经验,对STM32芯片架构和外设原理已经很熟悉了,就没必要继续使用标准库了。
使用CubeMX开发,也有很多官方的例程可以参考(在Cube_fx芯片支持包中)。另外,CubeMX还支持FATFS,LWIP等中间件以及操作系统FREERTOS,省去了自己移植的麻烦。
其实,STM32的主频已经如此之高了,大多数应用场合已经可以忽略这点差异。
如果是对速度要求很高的,可以选择F4系列或者F7系列,否则只能回到寄存器操作,或者使用其他ARM内核的芯片了。
值得注意的是,HAL库使用了回调机制,这和标准库的思路有较大区别。这就是初次使用HAL库时会感觉比较难用的原因。比如,像写个串口中断函数或者定时器中断函数,不知道怎么入手。当你了解回调机制之后,就没有问题了。
推荐本人发的几个Cube相关的帖子,希望对大家有帮助
https://www.stmcu.org.cn/module/forum/thread-608185-1-1.html
https://www.stmcu.org.cn/module/forum/thread-607767-1-1.html
https://www.stmcu.org.cn/module/forum/thread-607776-1-1.html
感谢你的回答!
很赞同你说的“跟着趋势走”,嵌入式技术不断的进步,芯片厂商也一直在努力使底层驱动这种比较难以上手的代码开发变得更通俗易懂,使新手跟容易上手,这是必然的趋势,就像C++、C#、JAVA之类的高级语言,只需要调接口,不用理会底层具体怎么实现。
有时间我也仔细研究下使用HAL库进行产品开发,跟随时代的脚步。
感谢分享
LL库才是效率最高的吧