之前尚为网曾分享过STM32 的芯片选型指南,当芯片选定之后,如何快速开发呢?今天就介绍一下 STM32 开发的 3 种方式,以及 ST 官方提供的基于 HAL 和 LL 库的 STM32CubeMx 开发神器。
一、STM32 的三种开发方式
通常新手在入门 STM32 的时候,首先都要先选择一种要用的开发方式,不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和 HAL 库,而极少部分人会通过直接配置寄存器进行开发。网上关于标准库、HAL 库的描述相信是数不胜数。可是一个对于很多刚入门的朋友还是没法很直观的去真正了解这些不同开发发方式彼此之间的区别,所以尚为网想以一种非常直白的方式,用自己的理解去将这些东西表述出来,如果有描述的不对的地方或者是不同意见的也可以大家提出。
1.1 直接配置寄存器
不少先学了 51 的朋友可能会知道,会有一小部分人或是教程是通过汇编语言直接操作寄存器实现功能的,这种方法到了 STM32 就变得不太容易行得通了,因为 STM32 的寄存器数量是 51 单片机的十数倍,如此多的寄存器根本无法全部记忆,开发时需要经常的翻查芯片的数据手册,此时直接操作寄存器就变得非常的费力了。但还是会有很小一部分人,喜欢去直接操作寄存器,因为这样更接近原理,知其然也知其所以然。
1.2 标准库
上面也提到了,STM32 有非常多的寄存器,而导致了开发困难,所以为此 ST 公司就为每款芯片都编写了一份库文件,也就是工程文件里 stm32F1xx…之类的。在这些 .c .h 文件中,包括一些常用量的宏定义,把一些外设也通过结构体变量封装起来,如 GPIO 口时钟等。所以我们只需要配置结构体变量成员就可以修改外设的配置寄存器,从而选择不同的功能。也是目前最多人使用的方式,也是学习 STM32 接触最多的一种开发方式,我也就不多阐述了。
1.3 HAL 库
HAL 库是 ST 公司目前主力推的开发方式,全称就是 Hardware Abstraction Layer(抽象印象层)。库如其名,很抽象,一眼看上去不太容易知道他的作用是什么。它的出现比标准库要晚,但其实和标准库一样,都是为了节省程序开发的时期,而且 HAL 库尤其的有效,如果说标准库把实现功能需要配置的寄存器集成了,那么 HAL 库的一些函数甚至可以做到某些特定功能的集成。也就是说,同样的功能,标准库可能要用几句话,HAL 库只需用一句话就够了。并且 HAL 库也很好的解决了程序移植的问题,不同型号的 stm32 芯片它的标准库是不一样的,例如在 F4 上开发的程序移植到 F3 上是不能通用的,而使用 HAL 库,只要使用的是相通的外设,程序基本可以完全复制粘贴,注意是相通外设,意思也就是不能无中生有,例如 F7 比 F3 要多几个定时器,不能明明没有这个定时器却非要配置,但其实这种情况不多,绝大多数都可以直接复制粘贴。是而且使用 ST 公司研发的 STMcube 软件,可以通过图形化的配置功能,直接生成整个使用 HAL 库的工程文件,可以说是方便至极,但是方便的同时也造成了它执行效率的低下,在各种论坛帖子真的是被吐槽的数不胜数。
二、HAL 库固件库安装与使用
首先在 ST 官网下载 STM32CubeMx:
https://www.st.com/en/development-tools/stm32cubemx.html
安装。

2.1 首先设置让 Cube 可以自动联网下载相关固件库
选择 updater Settings

设置如下

2.2 根据芯片选择所需固件
版本是向下兼容的,可以直接选择最新版。但如果觉得最新版太大,可以阅读下面的 Main Changes.能够支持你目前的芯片就好。

选好了,点击 Install Now 就行,过程可能有点长。默认的文件下载地址

2.3 寻找用户帮助手册
进入固件所在文件夹,里面包含很多内容,包括固件、用户手册和使用文档等等。

三、参考资料
Description of STM32F4 HAL and LL drivers
STM32 Embedded Software Overview
扫码关注尚为网微信公众号

本文来自https://blog.csdn.net/xuzhexing/article/details/90137754,经授权后发布,本文观点不代表尚为网立场,转载请联系原作者。