你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32开发利器:STM32CubeMX

[复制链接]
STMCU小助手 发布时间:2023-2-5 15:35

' Z) s" D4 j) _

9 G% i  b$ t6 Z& r5 P, `9 b
d75538bf2dcc442fb333aafa4eece828.png

8 n8 k, d, y+ b# p3 H6 \
图1 STM32CubeMX图标

) h% r* [- J1 ?& q( w

/ d. J! N4 g+ {6 L8 s& c' o8 \       在介绍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等快捷键方便拉线、打孔、铺铜等常规操作,让工程师在面对快速的项目开发和迭代中,能把更多精力放在逻辑层、应用层开发上,因为手工配置底层引脚,中断类型等,人都会存在大意的时候,出错单步仿真也不易排查出问题。
" d; ]. W5 B3 L6 v( }. ?. ^* m; X8 J; `3 ^( Z3 }

' \# {# C; @! `' `' b1 W5 D       STM32CubeMX 可以直观的选择 STM32 微控制器、配置微控制器、自动处理引脚冲突、动态设置确定时钟树、动态确定参数设置的外围和中间件模式和初始化。STM32CubeMX 生成的代码可以在 KEIL、IAR、GCC 等编程软件上面使用。所以简单地说STM32CubeMX 本身就是一个工具软件,我们只要在上面通过图形化配置就可以生成STM32 功能代码工程,这个代码工程已经包括了必要的外设初始化程序,这样节省我们的工作量,把工作重点放在项目逻辑层、应用层的实现。
8 n' }6 b6 _0 z4 Q" E" [$ F4 k2 {* p* 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

% J% B* Z" r: @5 x" c# n; k! Q3 r      如图2所示,是笔者之前转产项目中的STM32CubeMX配置,使用了STM32CubeMX工具对一颗STM32F429IGT6芯片进行硬件初始化配置,该芯片驱动了一颗SDRAM,外挂了一颗EEPROM和一颗FLASH,还有其他外设例如蜂鸣器、编码器、按键、电容触摸屏,芯片内部有定时器中断刷新屏幕,有三个UART DMA空闲中断,也上了Freertos操作系统、Emwin人机界面、FATS32 U盘识别,如果这些底层都手工配置的话,平心而论是个非常烦琐和浩大的工程,且很容易出错,而步入工作岗位以后,现实是私企老板、产品经理、项目负责人等各路人马会不断催促项目进度,这时也就体现了STM32CubeMX的价值,在这篇博客最后,笔者也附带了STM32CubeMX学习教程和STM32CubeMX安装包的下载链接,供大家学习交流。
' B% K* d" T4 D% u, B1 D
% u6 M$ v% L) h, e) p
( [$ M2 q; \! O2 I% Q9 T
       183ea0d3807743c0aab082797bf17293.png
" s( i: x6 f- C: k) m1 M
图2 STM32CubeMX配置STM32F429IGT6芯片

7 @% z4 J: L  ^. p6 S6 N
  ?* v& t0 V9 r! @; s$ g
      谈到STM32CubeMX配置细枝末节的地方有很多,很难在一篇博客里逐一列举出来,只能说工作用到哪里再去对照着研究哪里即可,这里举个简单地例子我们用STM32CubeMX配置野火开发板上的STM32F103VET6芯片上的串口,如图3所示,我们先选择STM32F103VET6芯片再单击Start Project选项。0 M! h9 ^$ f- H% F

" V' L7 W- n: x" U0 z% F9 M
! S0 c7 c/ E  f9 ~$ r0 c! B7 ], j3 }
a9eb9bcd989b49beacf166f0ec278c64.png
" m% d  T, q$ A3 n! i' ^# ^
  图3 STM32CubeMX环境下选择STM32F103VET6芯片
/ R& ?: R7 A- \+ @! [8 j9 V# m

- V) E% ?8 v5 `- b* `; j5 A& N7 F         如图4和图5所示,我们在STM32CubeMX环境下配置好RCC时钟,这里由一个外部8Mhz的时钟通过芯片内部倍频产生一个72Mhz的主频时钟,直接配置UART1的引脚和115200的波特率,在图6下选择生成可以用KEIL 5打开的工程文件,最后如图7所示在KEIL5下打开STM32CubeMX环境下生成的底层配置工程,再进去下一步的二次开发。
+ c/ o5 \& U; o7 f$ r- r
3 E' @$ q4 B3 p+ L
( h/ B+ U9 ~' e+ e
03e2fbeb19e54cd78e085f38c7cbb32a.png
$ V2 l) n1 ~. b
1612b7e3826a417883be954a174d9cd6.png

7 g' O, k; W& L
图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$ ^' \

) u: @6 P8 [, ?' Y3 N& G5 h! K
dd1dcb96cc7240bfbe988ab9d86e1035.png

9 K+ B5 ]' q, @: |9 H! K8 M
    图5 STM32CubeMX环境下配置UART1串口

6 S7 a+ O! y8 W! P

  j' u2 P0 q/ [     $ W, V7 q+ _/ x
49a134510c6a4d8ba8e075e26356747c.png
$ o& K. `2 u* G" n7 L
图6 STM32CubeMX环境下生成KEIL工程

% O% H5 n# b+ `5 p$ G( {2 F
8a411ebee83c4b41ad2ae2af527ad3d9.png
+ s% C& U. y& V3 I) [
  图7 KEIL5环境下打开STM32CubeMX生成的底层配置代码
————————————————
- }$ |* I4 N9 }9 G6 D+ j) k# w" t版权声明:青青豌豆7 \/ }' e5 D0 q/ E- W8 p
8 k, \  {8 {* X
收藏 评论0 发布时间:2023-2-5 15:35

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版