图1 STM32CubeMX图标 在介绍STM32CubeMX之前,我们需要知道HAL库这个概念,实际在早些年大概2018年以前吧,大家做STM32工程开发,用的最多的是标准库,标准库自出道超过 10 年以来受广大使用者推崇,就算现在2022年还有一部分工程师、公司仍在继续使用。不过现实情况很残酷,ST 官方已经不再更新 STM32 标准固件库,比如STM32F1系列标准固件库在 2013 年后没有正式发布更新版本,类似于之前大家在开发FPGA时都用XILINX推出的ISE环境,但ISE在2014年后就没有更新版本,XILINX把所有的精力都放在了VIVADO环境。伴随HAL库的兴起,ST推出了STM32CubeMX开发工具,简单地说这个工具可以将STM32芯片的底层配置通过图形化界面配置,这样就极大限度内减少了工程师的工作量,这就好比做FPGA设计的时候,使用了GVIM计数器和状态机模板;在做PCB设计的时候,使用了skill等快捷键方便拉线、打孔、铺铜等常规操作,让工程师在面对快速的项目开发和迭代中,能把更多精力放在逻辑层、应用层开发上,因为手工配置底层引脚,中断类型等,人都会存在大意的时候,出错单步仿真也不易排查出问题。 ; X8 J; `3 ^( Z3 } STM32CubeMX 可以直观的选择 STM32 微控制器、配置微控制器、自动处理引脚冲突、动态设置确定时钟树、动态确定参数设置的外围和中间件模式和初始化。STM32CubeMX 生成的代码可以在 KEIL、IAR、GCC 等编程软件上面使用。所以简单地说STM32CubeMX 本身就是一个工具软件,我们只要在上面通过图形化配置就可以生成STM32 功能代码工程,这个代码工程已经包括了必要的外设初始化程序,这样节省我们的工作量,把工作重点放在项目逻辑层、应用层的实现。 * K9 ?! T) u! S `5 g. |7 K% g+ W) q ?6 t# x HAL 的全称是:Hardware Abstraction Layer (硬件抽象层),HAL 位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。HAL 库是一个由 ST公司基于硬件抽象层而设计的软件函数包,它由程序、数据结构、宏等组成,包括了微控制器所有外设的性能特征。此外HAL函数库包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间 API,所以说通过使用 HAL 库,工程师不需要花过多精力去深入掌握底层硬件细节,就可以应用STM32的每个外设,实现快速二次开发的目的。) |- K" X5 v7 D, ~( b9 b - @& S0 Y/ Q$ ~0 f 如图2所示,是笔者之前转产项目中的STM32CubeMX配置,使用了STM32CubeMX工具对一颗STM32F429IGT6芯片进行硬件初始化配置,该芯片驱动了一颗SDRAM,外挂了一颗EEPROM和一颗FLASH,还有其他外设例如蜂鸣器、编码器、按键、电容触摸屏,芯片内部有定时器中断刷新屏幕,有三个UART DMA空闲中断,也上了Freertos操作系统、Emwin人机界面、FATS32 U盘识别,如果这些底层都手工配置的话,平心而论是个非常烦琐和浩大的工程,且很容易出错,而步入工作岗位以后,现实是私企老板、产品经理、项目负责人等各路人马会不断催促项目进度,这时也就体现了STM32CubeMX的价值,在这篇博客最后,笔者也附带了STM32CubeMX学习教程和STM32CubeMX安装包的下载链接,供大家学习交流。 ( [$ M2 q; \! O2 I% Q9 T " s( i: x6 f- C: k) m1 M 图2 STM32CubeMX配置STM32F429IGT6芯片 ?* v& t0 V9 r! @; s$ g 谈到STM32CubeMX配置细枝末节的地方有很多,很难在一篇博客里逐一列举出来,只能说工作用到哪里再去对照着研究哪里即可,这里举个简单地例子我们用STM32CubeMX配置野火开发板上的STM32F103VET6芯片上的串口,如图3所示,我们先选择STM32F103VET6芯片再单击Start Project选项。0 M! h9 ^$ f- H% F ! S0 c7 c/ E f9 ~$ r0 c! B7 ], j3 } " m% d T, q$ A3 n! i' ^# ^ 图3 STM32CubeMX环境下选择STM32F103VET6芯片 / R& ?: R7 A- \+ @! [8 j9 V# m如图4和图5所示,我们在STM32CubeMX环境下配置好RCC时钟,这里由一个外部8Mhz的时钟通过芯片内部倍频产生一个72Mhz的主频时钟,直接配置UART1的引脚和115200的波特率,在图6下选择生成可以用KEIL 5打开的工程文件,最后如图7所示在KEIL5下打开STM32CubeMX环境下生成的底层配置工程,再进去下一步的二次开发。 ( h/ B+ U9 ~' e+ e $ V2 l) n1 ~. b 图4 STM32CubeMX环境下配置RCC时钟 & H; _' l$ f3 F8 ~ |. b9 Z* t7 E* w1 `' f; B, a5 a/ I; t; m 0 T9 a1 `+ r# A 5 N4 N/ _: M$ ^' \ 图5 STM32CubeMX环境下配置UART1串口 $ W, V7 q+ _/ x $ o& K. `2 u* G" n7 L 图6 STM32CubeMX环境下生成KEIL工程 + s% C& U. y& V3 I) [ 图7 KEIL5环境下打开STM32CubeMX生成的底层配置代码 ————————————————版权声明:青青豌豆7 \/ }' e5 D0 q/ E- W8 p 8 k, \ {8 {* X |
【STM32C0测评】外部中断控制小灯
意法半导体最具性价比、速度最快的单核MPU STM32MP13现已支持运行RTOS
【NUCLEO-U083RC评测】移植TouchGFX并实现无接触翻页
[NUCLEO-C031C6评测] 驱动LCD 第三步 显示颜色块
[NUCLEO-C031C6评测] 驱动LCD 第二步 初始化屏幕
[NUCLEO-C031C6评测] 驱动LCD第一步
【STM32MP135-DK】裸机开发
STM32MP135F-DK 开箱&开发环境搭建&硬件设计分析
【STM32U599】4.引入RTC与MVP开发
基于STM32CUBEMX驱动TMOS模块STHS34PF80之获取状态数据(5)