完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
自STM32标准库出道以来,备受广大工程师和公司的喜爱,但是,从2013年开始,ST逐渐停止了对标准外设库的更新和维护。目前,ST全力推崇HAL库,STM32Cube就是与HAL库配合使用图形化编程官方IDE。
7.1 STM32库简介 到目前为止,ST有标准外设库(SPL 库)、HAL 库、LL 库 三种。前两者都是常用的库,后面的 LL 库是 ST 最近才添加,随 HAL 源码包一起提供,目前支持的芯片也偏少。各库如下所示: 图1 标准库、HAL 库、LL 库对比 其中,SPL 库 和 HAL 库两者相互独立,互不兼容。几种库的比较如下: 图2 目前几种库对不同芯片的支持情况如下: 图3 ST 中文官网上有一篇《STM32库函数性能对比》的文章,其中对比了各种库的性能如下: 图4 ST各库性能对比 7.1.1标准外设库简介 标准外设库(Standard Peripherals Library)是对 STM32 芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的 ST 库。几乎全部使用 C 语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。STM32F1系列的版本停留在3.5.0,这个版本也许是大家最熟悉的版本。 图5标准外设库支持程度 标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了 C 函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。虽然标准外设库对各外设的进行了一次封装,而不是仅仅局限在对寄存器的封装。实现了各外设的基本操作接口。 标准外设库的文件基本架构并不复杂。下图显示了 STM32F10xx 标准外设库文件的基本架构 图6 ST 为各系列提供的标准外设库稍微有些区别。例如,STM32F1x 的库和 STM32F3x 的库在文件结构上就有些不同,此外,在内部的实现上也稍微有些区别,这个在具体使用(移植)时,需要注意一下!但是,不同系列之间的差别并不是很大,而且在设计上是相同的。STM32 的标准外设库涵盖以下 3 个抽象级别: 包含位,位域和寄存器在内的完整的寄存器地址映射7.1.2 HAL库简介 HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。 HAL 库是基于一个非限制性的 BSD 许可协议(Berkeley Software Distribution)而发布的开源代码。 ST 制作的中间件堆栈(USB 主机和设备库,STemWin)带有允许轻松重用的许可模式, 只要是在 ST 公司的 MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。 图7 HAL库支持的中间件 目前,结合HAL库,ST对其产品线构建的软件架构如下图所示。 图8 HAL库软件架构 7.1.3 LL库简介 LL库(Low Layer)是 ST 最近新增的库,与 HAL 库捆绑发布,文档也是和 HAL 库文档在一起的,比如:在STM32F3x 的 HAL 库说明文档中,ST 新增了LL库这一章节,但是在 F2x 的HAL文档中就没有。 LL 库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法: 独立使用,该库完全独立实现,可以完全抛开 HAL 库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如 USB,则会调用 HAL 库目前,CubeMX 在生成项目时,可以选择采用 LL 库。 LL 库文件的命名方式和 HAL 库基本相同。个人感觉,LL 库就是原来的标准外设库移植到 Cube下的新的实现,但是其实现方法更加高效、简洁。使用 LL 库编程和使用标准外设库的方式基本一样,但是确会得到比标准外设库更高的效率。 7.2 STM32Cube产品简介 STM32Cube 产品是一个软件系列,目前有四个STM32CubeMX、STM32CubeIDE、STM32CubeProgrammer和STM32CubeMonitor,包括,几乎涵盖了ST系列的所有工具,ST还为此注册了一个新商标:STMCube™。 图9 STM32Cube 使用以上四个工具进行开发,基本就能解决开发过程的所有问题,下图是ST提供的标准软件开发流程。 图10 ST标准开发流程 7.2.1 STM32CubeMX简介 ST专门为其开发了配套的桌面软件 STMCubeMX,也就是初始化代码生成器,开发者可以直接使用该软件进行可视化配置,大大节省开发时间。 图11 STM32CubeMX 这其中就包含了 HAL 库和最近新增的 LL 库。如下图: 图12 从上图不难看出,LL 库和 HAL 库两者相互独立,只不过 LL 库更底层。而且,部分 HAL 库会调用LL库(例如:USB驱动)。同样,LL 库也会调用 HAL 库。 用户可以使用 STMCubeMX 直接生成对应芯片的整个项目(目前主流开发工具的项目基本全支持),STMCubeMX 负责给整理各种需要的源码文件。如下所所示。 图13 STM32CubeMX生成代码过程 STM32CubeMX下载地址: 英文 中文 7.2.2 STM32CubeIDE简介 STM32CubeIDE是一个多功能的集成开发工具,集成了TrueSTUDIO和STM32CubeMX,它是STM32Cube软件生态系统的一部分。 图14 STM32CubeIDE STM32CubeIDE是一个先进的C/C++开发平台,具有STM32微控制器的IP配置,代码生成,代码编译和调试功能。它基于ECLIPSE™/ CDT框架和用于开发的GCC工具链,以及用于调试的GDB。它允许集成数百个现有插件,完成ECLIPSE™IDE的功能。 STM32CubeIDE集成了STM32CubeMX,基于基于Eclipse™/CDT,支持ECLIPSE的™插件,GNU C / C ++中ARM®工具链和GDB调试器,支持ST-LINK和J-Link调试探针,跨平台,支持Windows,Linux和MacOS操作系统。 [ps] 我想大部分嵌入式爱好者使用的是MDK和IAR做开发,大部分应该都使用的是盗版的。 除了这些盗版IDE集成开发环境,其实我们还有另外一种选择,使用Linux开发,在Linux开发是基于GCC的,使用GCC就意味着要写Makefile,这一连串的新问题又来了,为了解决盗版问题,ST和NXP都推出了基于Eclipse+GCC的集成开发环境。 NXP的叫MCUXpresso IDE。 ST的就是STM32Cube IDE。STM32Cube IDE就是集成了STM32CubeMX,可以一站式开发,非常方便,而且是免费的,因此你是ST的爱好者,就用STM32Cube IDE开发。 7.2.3 STM32CubeProgrammer简介 STM32CubeProgrammer 简称 STM32CubeProg,是一个适用于 STM32 系列产品的跨平台、多合一的程序烧写工具。 “跨平台” 体现在支持 Windows、macOS 和 Linux 操作系统,因此软件运行时需要 Java 环境。 图15 STM32CubeProgrammer STM32CubeProgrammer下载地址: 英文 中文 7.2.4 STM32CubeMonitor简介 STM32CubeMonitor是ST近期推出一款实时读取和显示变量来帮助调试和诊断STM32应用程序的工具。用户只要用鼠标拖放项目和功能,即可创建自定义的仪表板,快速添加仪表、柱状图、点线图等小工具也无需编程。借助Node-RED开放社区,STM32CubeMonitor可为客户提供丰富的扩展功能,灵活处理各种类型的应用问题。 图16 STM32CubeMonitor STM32CubeMonitor还支持远程数据采集,用户可以通过网络远程监视应用程序,同时测试多个设备。 哪里有需求,那你就有产品,STM32CubeMonitor推出也有其目的,这里举个例子,我门在调试惯性导航时,需要实时查看惯性导航输出数据,我门通常使用串口输出到PC,然后在PC上写一个上位机进行调试,你还可以利用JLink的RTT功能把数据输出到PC,从而避免额外配置和占用STM32的一个串口。上面提到的方法都有各自的局限性,使用串口通用性很好但是串口传输数据会占用CPU资源,编写上位机绘制曲线往往也耗时耗力,而商业IDE和JLink严格意义上说并不是免费的,那么有没有免费而且好用的选择呢?这也就是STM32CubeMonitor存在的意义。 |
|
|
|
只有小组成员才能发言,加入小组>>
3263 浏览 9 评论
2944 浏览 16 评论
3443 浏览 1 评论
8955 浏览 16 评论
4036 浏览 18 评论
1078浏览 3评论
558浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
551浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2286浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 12:20 , Processed in 0.912142 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号