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

MiniPro STM32H750 开发指南_V1.1-STM32CubeMX简介

[复制链接]
STMCU小助手 发布时间:2022-10-5 22:11
STM32CubeMX简介/ D$ ^4 G# a" X: c: l+ e3 G% ^
STM32CubeMX是由ST公司开发的图形化代码自动生成工具,能够快速生成初始化代码,如GPIO、时钟树、中间件等,使用户专注于业务代码的开发。现在ST主推HAL库,经典的标准外设库已经停止维护了,新产品也只提供HAL库的代码,因此,我们学习HAL库是更加有优势的,由于HAL库具有低耦合、通用、抽象了硬件层,使得开发者无需太过关注硬件驱动的实现,使得开发更加的简单快速,更容易维护,因此被越来越多的产品所使用。
% i. c3 U! v6 p" Y$ w9 D( q  R- t5 t( ?
10.1 STM32CubeMX的作用' j& s- A8 c( G/ `* D% [3 O
STM32CubeMX具有如下特性:1 G  y% {! {9 w" b$ A  u
①直观的选择MCU型号,可指定系列、封装、外设数量等条件$ Z2 r0 d& t! n  x
②微控制器图形化配置! f2 ?) @& ]7 ~' ?6 a5 P& d, g% W
③自动处理引脚冲突
; @6 {5 y4 u1 F/ J' X! U) n1 }④动态设置时钟树,生成系统时钟配置代码
, p, U% R& R/ {7 P  Z' ]- U; m, i' Q! X⑤可以动态设置外围和中间件模式和初始化6 d: R6 W4 `6 B% j8 a' y' ?
⑥功耗预测( q8 ^/ S/ [1 ]) w3 R$ M! |/ @
⑦C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC( C$ `: j( O6 ]  P" D
⑧可以独立使用或者作为Eclipse插件使用9 [: H0 ~- p2 P  y! a
⑨可作为ST的固件包、芯片手册等的下载引擎8 `. l/ X" U; w# t" K8 O
这里特别说明一下STM32CubeMX和STM32Cube固件库的关系,STM32CubeMX图形工具配置生成的代码,是基于STM32Cube固件库的,并且可以在图形工具中直接下载STM32Cube固件库。也就是说,我们使用STM32CubeMX配置出来的初始化代码,兼容STM32Cube库,例如硬件抽象层代码就是使用的STM32的HAL库。不同系列的STM32芯片,会有不同系列的STM32Cube库,而STM32CubeMX图形工具只有一个,所以开发不同的STM32系列芯片,选择不同系列的STM32Cube库即可,它们的关系如下图所示:% Z" `8 i7 h% s
  ?, L8 N4 ]' u" x' b+ _
6b8824c5e64c4b7e8b2482a2719054dd.png 3 [' }8 K4 a0 c4 K

, K' W# V$ @& s7 a6 p图10.1.1 STM32CubeMX和STM32Cube固件库的关系
8 u9 N2 o6 c1 u/ N当然,自动生成的驱动代码我们不去仔细专研其原理的话,对学习的提升很有限,而且在出现BUG的时候难以快速定位解决,因此我们也要了解其背后的原理。0 \& f; M4 P1 o4 Y
' S; R7 ?5 E5 @) A- o; m
10.2 安装STM32CubeMX8 W( u/ N4 i  h) c2 W1 u- f, x
STM32CubeMX运行环境搭建包含两个部分,首先安装Java环境,再安装STM32CubeMX。- U" q& \. f& I0 O* q/ M6 u, S( }
10.2.1 安装JAVA环境
; D; B6 G1 v/ D( B安装Java运行环境,大家可以到Java官网www.java.com下载最新的Java软件,也可以直接从光盘资料获取安装包,目录如下:A盘6,软件资料1,软件3、STM32CubeMXJava安装包,Java安装包文件下有x64和x86两个文件夹,分别是64位和32位的电脑的安装包,大家根据自己电脑的位数选择即可。比如64位电脑选择x64文件夹的jre-8u301-windows-x64.exe安装包,并根据提示安装即可。安装完成之后提示界面如下图10.2.1.1所示。
" _# o3 H7 |4 A/ \' I
- c3 ?  M& E' G# z+ Q 2aaa03ac1cf241f5a32442a4c5c55cb8.png 4 X2 T' ?& H5 q" r/ j9 ~7 k

2 x% G5 a4 ^+ D8 U& y图10.2.1.1 Java安装成功提示界面
7 F! J  k- t, l; U0 C安装完Java运行环境之后,为了检测是否正常安装,我们可以打开Windows的命令输入框,输入:java –version命令,如果显示Java版本信息,则安装成功。提示信息如下图10.2.1.2:$ j6 Y' B9 _7 U. f5 L- d! I+ H% g
7 P' C2 T8 a( E$ ~
01f42aa2fd474bb6a4fd0c265fbafe73.png % X( `$ n9 p0 W1 a
' l% u  g; c8 J7 Z" k+ l  h7 d' _+ j
图10.2.1.2 查看Java版本
% d. l4 O6 R% P" g' q. {# k. Z0 O10.2.2 安装STM32CubeMX; G7 u/ ]" @) U5 o& v. w" u) U. V
在安装了Java运行环境之后,接下来我们安装STM32CubeMX图形化工具。该软件可以直接从光盘资料获取,目录如下:A盘6,软件资料1,软件3、STM32CubeMX,也可以直接从ST官方下载,下载网址为:https://www.st.com/en/development-tools/stm32cubemx.html
$ C- u; b5 W! F* L! j+ I' s接下来我们直接双击SetupSTM32CubeMX-6.3.0.exe,安装步骤如下。
# \6 N5 z2 H% w' ^- t+ w: _% v% W! h6 ]- P
42c4e54ffb48491e9b2814ab84fc068a.png
& X" X) y2 i) N0 G% q# O9 {: H5 t# K+ C4 N# g) m4 H/ i
图10.2.2.1 启动安装% w+ X- y) M7 r7 ]
4 j: G$ p9 g" t! d9 z3 C
78896877c4844d9584030f54e5887e99.png
1 ]3 M6 E1 t3 [" }( S8 F: S6 g
' p3 }+ ~- u3 A& R9 B图10.2.2.2 接受本许可协议! J5 E1 e8 ?& x" q& C! z8 o/ s

1 E$ d/ Z+ [1 C! } 24b220122f5b4843bb66b5d54e20b207.png
; F: c( u/ l! T* a
- A" @* x0 y" L7 R9 v- ?/ r图10.2.2.3 勾选第一项即可* M1 N; S; U+ R
; F& i$ G5 j" E7 ~( u* g; b- T
7d9b175a87d44ff990619eceac292534.png
4 ~9 M4 a1 J2 K2 D
. K# N. T! K- T; g4 M& \图10.2.2.4 指定安装路径
; R2 K: C7 F5 [  q1 P* t3 C; {' J" l* q# g
dbc882d3cbe34570b894bce804032203.png
- t- D, m) j" Y; y  O  [# R$ s; m# t+ o* E" W$ p) _: K  e3 j3 N
图10.2.2.5 创建快捷方式
# t- S* l# h8 I* F1 C* d2 p9 t' s
- l7 Y) a1 P* q2 p3 v1 g6 [2 ^% [ ca5159540b774ee08b71fd26dfe7683a.png
- y5 r+ l% U( D, I' G# R8 i
* Q! g& S0 f7 m  J7 x4 U) _  m图10.2.2.6 安装进度提示  U1 p& }. k. V6 N! V

1 I" p- y" h  Z3 I1 |+ ^6 ~$ o e393a885bc8948d9af990e34addede36.png 5 w$ d2 y9 h( L7 \$ H. e2 r

; G& y' M  V! z" B( {图10.2.2.7 完成安装
6 X; ~2 ]7 S, {5 A$ ]1 d  [% J& G8 u) l8 u6 V
10.3 使用STM32CubeMX新建工程5 c7 w9 s% f) u
大多数情况下,我们都只使用STM32CubeMX来生成工程的时钟系统初始化代码以及外设的初始化代码,因为用户控制逻辑代码是无法在STM32CubeMX中完成的,需要用户自己根据需求来实现。
* j' O4 c9 Z3 W' g: P5 O10.3.1 打开STM32CubeMX2 z* n" H9 K& x- U* [- |
双击桌面STM32CubeMX快捷方式图标,如图10.3.1.1所示。  _) b" L7 L, i5 f1 B+ x- q" Q
" `$ m" I% k7 [$ u
08f4e903d63c4d6c96acca79a0a54137.png . g  R0 C8 C+ l! d( K: ]

- i4 d% y! C( U7 n5 o! \1 }图10.3.1.1 CubeMX快捷方式
& E* g/ U4 g# B' d7 G打开后CubeMX主界面如图10.3.1.2所示。* Q  H; |: `- n2 f- `
1 v+ N7 V6 }% n/ q3 s; {
f76372a7f0ba458db3f683a0d519e22f.png
" Q9 m. P3 P" c9 v8 z5 I8 T3 q+ {. S! \: e5 ?, z. U
图10.3.1.2 CubeMX主界面
* }* }! S' d, o; a1 j
( ~. |9 t0 `  w8 u7 g  E8 K10.3.2 下载和关联的STM32Cube固件包: r2 k% B% v( i6 w+ k
我们知道STM32CubeMX图形工具只有一种, STM32Cube固件包却有多种,需要选择我们工程对应的固件包。# V2 a2 y% I* t, _9 \/ g0 S( U7 W
为了方便,新建工程前,我们先来下载和关联STM32Cube固件包,点击Help->Manage embedded software packages,如图10.3.2.1所示。
( P7 W( y8 }% s( T( V4 @* [1 q. T
. }& T7 W7 A/ R& O0 }7 P* s fe1b49e0023047c58b2e4b54efc0f664.png
- h* p, y/ W6 Y; _2 X6 c: K: @  ?4 z+ {" y* v7 ~8 }0 }
图10.3.2.1 管理固件包. l% n% b+ r$ n0 a: E4 {
然后弹出管理界面,在该窗口找到STM32H7列表选项,勾选1.6.0版本。这里选择1.6.0版本是因为我们的光盘的固件包是这个版本的。关联STM32Cube固件包有两个方法,如图10.3.2.2所示.8 r7 n/ O0 M# a( a# Q! C$ J5 w
0 G1 m: |# ?/ w
2521539f00184e71af5ca5d5c22c37a3.png ! r/ s. [- W4 a0 P3 E* U& ]

: Q  z% k$ n3 z% P" d" Z7 W* c9 K图10.3.2.2 下载和关联STM32Cube固件包% n5 q- s1 S3 d8 m
方法二:下载好之后,会自动关联,所以不需要多讲什么。
+ f" g$ Z2 R/ t+ F9 ?- [6 S+ e# c方法一:点击后,弹出下面的窗口,然后选择光盘中的对应的固件包,注意这里是压缩包的形式,如图10.3.2.3所示。. Z1 x9 ~; y8 o
2 k7 S- A3 ]0 S. R
3caae082e1b34342a9c1ebb0ccb237f5.png & M8 O6 S* s2 o0 u

" M9 D+ Q% U4 N3 `) p( @1 r图10.3.2.3 关联本地STM32Cube固件包2 l" c1 |7 O5 t' u: ]
; P" r4 i/ a# ]( G  P
2d3e8bc463da4cc6a4f5c04f2938caa8.png 3 p' q3 b) ?) `, ~9 N; [2 J

1 ~/ c, F' C: R9 H& Z! y% `+ J图10.3.2.4 等待关联; F" r: E3 u8 A: E9 T5 `
3 D- D4 P) y: O7 `
2beab16e1d644c66a13be05e9a731712.png " q8 p9 m6 h8 R( S2 X
- c% T0 l+ I, n$ l5 I; g
图10.3.2.5 关联成功
; C! }, j& j8 N9 [5 e关联好固件包我们就可以开始新建工程了。
) n5 R% o" [  x7 Y5 Y% @( u4 i
/ |7 D9 m, A) u, D3 m) l' y9 y10.3.3 新建工程( f: o" C/ |5 M' ?% i
使用STM32CubeMX配置工程的一般步骤为:' l( b7 O  P4 R* w: H
1,工程初步建立- g% f! G: k0 \/ T0 e+ `  p1 R3 [7 n
2,HSE和LSE时钟源设置& Q* ^8 K- `' l& T* p  d* f
3,时钟系统(时钟树)配置# ?! X2 k3 l! d$ Q
4,GPIO功能引脚配置, h. ]+ |0 {& l1 j
5,Cortex-M7内核基本配置(限定项)* N8 E$ b/ m. e# _+ m
6,生成工程源码
: Z5 J, d- F! c7,用户程序
9 X' u- y  x3 E. M' }) E7 F4 D接下来将按照这7个步骤,依次教大家使用STM32CubeMX工具生成一个完整的工程。) T4 X0 L! d8 U3 G  v- u
1 工程初步建立; ]" |- Q1 K* |; B8 ], o7 ~2 N
方法一:依次点击“File”,“New Project”即可建新工程。如果之前打开过的话,左侧最近打开的过程一列会有打开的工程列表,直接点击这些工程也可以打开。
6 s- n" d! e0 Z8 y% [' j方法二:直接点击ACCESS TO MCU SELECTOR。) d; H3 C; n" t( y" G3 [! h
具体操作如图10.3.3.1所示。1 g7 z) R/ P- G6 H- ~
7 i+ ~' x; P% I4 C) }' _
9d88191b91d2453798558b2fab3013cc.png
% V% O0 r7 X" Q6 _9 B0 c
- A! Z* ]/ G$ I/ d/ K图10.3.3.1 新建工程# y0 |1 Y5 V* n, P8 i* T
点击新建工程后,第一次可能会联网下载一些的文件,可能等待时间比较长,可以直接选择取消即可。2 K" E5 j. d. m" P7 H+ L
: T; D" `$ K' B4 o
f2b8d735c6844bbdb2f3a0b207cf4c12.png
( i9 o, |2 c1 U9 S  |6 x
: G) Z9 Q% t) m# p1 ]& i图10.3.3.2 启动时联网更新检测5 `) ~+ B( \* Q" o- d# Z/ z! Z3 c
之后都可以进入芯片选型界面,如图10.3.3.3所示。! k) Z& u9 L; ?" \8 V5 t( `
) s2 k9 l% M% P/ a+ D
04fe32f9e9e34cd280d2971a15291eba.png 8 C4 f5 y6 z8 l, p

$ |8 r& |, u. Q) {& R' |) f. s图10.3.3.3 芯片选型界面
7 K& H# ~. p# ]. B' ?! D# _: T选择具体的芯片型号,如图10.3.3.4所示。9 r: h0 Z6 e+ s2 {# O

3 R2 M+ d" f5 H0 y% [( k1 f 5ef380dee8164135ba87012e1f1b5d14.png   Z7 a) Y6 I. y3 s2 O- y8 d
  q6 }0 t4 _  w
图10.3.3.4 选择具体的芯片型号6 I. R5 M% I* |4 e& u9 q
选择了芯片型号后,弹出主设计界面,如图10.3.3.5所示。- E. i' b0 ~7 J1 t, g# V* l
! K$ N9 R6 L* D/ t  E8 q
2f8bafee018940a5bf042381fb138238.png
4 U3 J) x5 W: M) V1 ^
2 Q% _+ f+ Q0 ~2 i图10.3.3.5 主设计界面- ^, ]7 x0 o  [9 o# ~
2 HSE和LSE时钟源设置
. _* Z! y, i7 j' g% I进入工程主设计界面后,首先设置时钟源HSE和LSE。如图10.3.3.6所示。  V! @; t& r' W6 W2 A; v$ X8 a
: G; A5 v. ?6 R. F0 n4 P& f! w/ t
58e319bb3c794065bcf122aa759ba45f.png # a  T- M% r# W) e# O1 ^9 z

) p0 k! _" ~! t. I$ {图10.3.3.6 设置时钟源HSE和LSE
" ]7 o6 i- p3 R+ T7 g. P图10.3.3.6中的标号3和4,我们都选择了Crystal/Ceramic Resonator,表示外部晶振作为它们的时钟源。我们开发板的外部高速晶振和外部低速晶振分别是:8MHZ和32.768KHZ。所以HSE时钟频率就是8MHZ,LSE时钟频率就是32.768KHZ。6 j/ `! f' z) |% O
选项Master Clock Output 1 用来选择是否使能MCO1引脚时钟输出,选项Master Clock Output 2用来选择是否使能MCO2引脚时钟输出,最后一个选项Audio Clock Input(I2S_CKIN)用来选择是否从I2S_CKIN(PC9)输入I2S时钟。这里大家要注意,因为选项Master Clock Output 2和选项Audio Clock Input(I2S_CKIN)都是使用的PC9引脚,所以如果我们使能了其中一个,那么另一个选项会自动显示为红色,也就是不允许配置,这就是STM32CubeMX的自动冲突检测功能。
3 B6 N3 U/ E  Y* ~: r* C3 时钟系统(时钟树)配置* t6 I0 D3 L7 Z" F, a! o, J8 r  l
点击Clock Configuration选项卡即可进入时钟系统配置栏,如下图10.3.3.7所示:  {# h/ g0 G& J  B  n+ _4 W

2 |" M3 f# u* ~) h" H+ F/ X ab3ebcd95b9f4b01b4f51d4557233736.png - h, U% I# O$ g  R# l. y; Z, j

% g3 D' A& N7 J" H4 ^6 D图10.3.3.7 时钟系统配置栏4 F* q8 Z( X' {4 w- X$ F, E8 w
进入Clock Configuration配置栏之后可以看到,界面展现一个完整的STM32H7时钟系统框图。从这个时钟树配置图可以看出,配置的主要是外部晶振大小,分频系数,倍频系数以及选择器。在我们配置的工程中,时钟值会动态更新,如果某个时钟值在配置过程中超过允许值,那么相应的选项框会红色提示。
- I% |" k) Z; A  e* Q: j+ t这里,我们将配置一个以HSE为时钟源,配置PLL1相关参数,然后系统时钟选择PLLCLK为时钟源,最终配置系统时钟为480MHz的过程。同时,还配置了AHB,APB1,APB2、APB3、APB4和Systick的相关分频系数。由于图片比较大,我们把主要的配置部分分两部分来讲解,第一部分是配置系统时钟,第二部分是配置SYSTICK、AHB、APB1、APB2、APB3和APB4的分频系数。首先我们来看看第一部分配置如下图10.3.3.8所示:
) ~8 [, s  \! q+ m- d! s3 C" O. F" k- L7 l1 T" ~
4f007c4bfbef4bd5adf42f41ca5ca410.png , e/ m! g! I- f0 ~; F

8 F3 o8 _. P- k8 _' b图10.3.3.8 系统时钟配置图
5 q! d( k  ]' I8 C4 I- h4 r; |我们把系统时钟配置分为七个步骤,分别用标号1~7表示,详细过程为:# z7 z7 J8 [  e, D6 t
1、时钟源参数设置:我们选择HSE为时钟源,所以我们要根据硬件实际的高速晶振频率(这里我们是8MHZ)填写。! J# Y4 `2 H8 k) J
2、时钟源选择:我们配置选择器选择HSE即可。
; t) u8 _0 q6 }6 H8 t+ t4 T* r& h3、PLL1分频系数M配置。分频系数M我们设置为2。
. J% |/ M/ S$ ~- P) R8 M/ g4、PLL1倍频系数N配置。倍频系数N我们设置为240。3 K* ]2 x$ U+ Y( Z( B
5、PLL1分频系数P配置。分频系数P我们配置为2。) n  T9 `! o; K: V: Q
6、系统时钟时钟源选择:PLL,HSI还是HSE。我们选择PLL,选择器选择PLLCLK即可。0 P% T* c/ V9 h
7、经过上面配置以后此时SYSCLK=480Mhz。- ?( x! X  V: k* h+ a
经过上面的7个步骤,就会生成标准的480MHz系统时钟。接下来我们只需要配置AHB、APB1、APB2、APB3、APB4和Systick的分频系数,就可以实现sys.c文件中的sys_stm32_clock_init函数配置的部分时钟系统。配置如下图10.3.3.9所示:
. e: ]& {3 Y  m2 K6 h/ v% f2 ~% S8 j9 I# `' Z2 q; n
20380754b67542f485169ea6c225ed4f.png 0 ^* r- X; \) L5 N0 z: Q

, z+ I" x( P! M5 v- p图10.3.3.9 AHB、APB1、APB2、APB3和APB4总线时钟配置
) C& H3 B' k2 `- BAHB、APB1、APB2、APB3和APB4总线时钟以及Systick时钟的最终来源都是系统时钟SYSCLK。其中AHB总线时钟HCLK是由SYSCLK经过AHB预分频器之后的来,如果我们要设置HCLK为240MHz(最大也就240Mhz),那么我们只需要配置图中标号8的地方为2即可。得到HCLK之后,接下来我们将在图标号9~12处同样的方法依次配置APB3、APB1、APB2和APB4分频系数分别为2,2、2和2即可。注意!systick固定为480MHz,配置完成之后,那么HCLK=240MHZ,Systic=480MHz,PCLK1=120MHz,PCLK2=120MHz,PCLK3=120Mhz,PCLK4=120MHz,这和我们使用sys_stm32_clock_init函数配置的时钟是一样的。8 d7 j2 ~  ?. D4 p( Q

1 X. S- e9 q) A$ p: {+ Z4 GPIO功能引脚配置
) J* J4 U" F3 [) R/ w本小节,我们讲解怎么使用STM32CubeMX工具配置STM32H7的GPIO口。MiniPRO STM32H750开发板的PB4、PE5和PE6引脚连接一个RGB灯,我们来学习配置这三个IO口的相关参数。这里我们回到STM32CubeMX的Pinout&Configuration选项,在搜索栏输入PB4后回车,可以在引脚图中显示位置,如下图10.3.3.10所示:
* p2 v, }3 D; Z) y# c" b, ?$ y) W+ v/ G+ ~
e29207bb74bc422491c2d53bab79f936.png 1 }9 J& N- O3 X
& v# K) u, h4 n$ n  u
图10.3.3.10 搜索引脚位置9 Z: j4 ^6 R, ~/ C3 c9 Q& Q
接下来,我们在图10.3.3.11引脚图中点击PB4,在弹出的下拉菜单中,选择IO口的功能为GPIO_Output。操作方法如下图10.3.3.11所示:) V4 ^. c& L. c! U1 i
" P7 c2 S' \0 z% o% G
8cc19553781b4ee0a36d288e809846cc.png + f, X% a# H  n" q- `8 x" w; h

: ?2 R  @: f) J5 k图10.3.3.11 配置GPIO模式
4 L& @8 Z- b" w/ I/ u2 A$ Y1 A# }同样的方法,我们配置PE5和PE6选择功能为GPIO_Oput即可。设置好即可看到引脚从灰色变成绿色,标识该管脚已经启用。这里我们需要说明一下,如果我们要配置IO口为外部中断引脚或者其他复用功能,我们选择相应的选项即可。配置完IO口功能之后,还要配置IO口的速度,上下拉等参数。这些参数我们通过System Core下的GPIO选项进行配置,如图10.3.3.12所示。
% w  g0 b% x- k1 G9 @& W+ w
7 Q; h, M$ C: o# k  M  s* z  e9 W' u 9373fbb950ab4c8d9d94241868fefccb.png . w* H2 l: ~/ Q* x
) G7 E5 s/ K! l  I6 B
图10.3.3.12 GPIO选项
1 B1 L4 n( V* Z' u1 ^6 C3 P  Z我们先配置PB4,PE5和PE6配置方法一样的。点击图10.3.3.12的2号框里面的PB4,配置如图10.3.3.13所示。
3 i, F$ s5 c: g$ P; W" b$ V6 M1 F; A
, o/ H4 r8 ]* q  t) ^- q9 F e993781fe3204a7a9079d1cad26ac8ff.png 0 G8 L7 J: g( x4 |+ M8 k
- I% |* V- V" h- F1 i. y
图10.3.3.13 配置GPIO口详细参数- E# h+ J5 W, m
GPIO output level是IO的初始值,为了开始让RGB灯熄灭,我们设置初始值输出高电平。% s5 G5 H  A  P' L
GPIO mode默认是推挽输出,不需要更改。
! t. D& H! o) X$ R8 ]- UGPIO Pull-up/Pull-down默认是不上下拉,我们改为上拉。
! j5 S5 I/ j9 D" GMaximum output speed输出速度配置,默认是低速,我们设置为中速(可以不改)。
% A: F0 y( F! S8 V$ h' U4 x/ \User Label用户符号,我们可以给PB4起一个别的名字。
: W. k; i& N9 F( |' R3 FPE5和PE6也是按照这样的方法配置即可。
4 j' o! o) }. c0 R( e0 V. A5 Cortex-M7内核基本配置8 e$ ^; n- A% T5 r0 v  C0 o# \
这里我们主要配置Cortex-M7内核相关的参数。我们依次点击Cortex_M7 进入配置界面,操作过程如下图10.3.3.14所示:
1 D% b+ G: z/ m) C, W6 S
" U% d0 M1 h- l$ `( o4 o 0628c60d36a342b4a2281df87bd74956.png 0 @0 z, ~  J$ B5 X. _4 Z
5 B8 v, q. C- A& x; o" f4 E" E, o
图10.3.3.14 Cotex_M7配置
! _$ ^( e8 z$ [0 `$ ?% Q7 ~/ o9 V该界面一共有两个配置栏目。第一个配置栏目Cortex Interface Settings下面有两个配置项:7 H- J5 P! @3 Z' J! C
$ @5 ?& `: c3 i$ z/ N
1.CPU ICache:使能I-Cache。) S+ C" Y" R+ R$ N7 p
2.CPU DCache::使能D-Cache。
. k2 O% j, b& C, R上面这2个参数是CM7内核相关配置。第二个配置栏目Cortex Memory Protection Unit,是用来配置内存保护单元MPU,在我们后面的实验会讲解MPU配置。. ^0 Z: Q3 @% Q5 ~+ m+ X! p5 I. P
6 生成工程源码
  S  e4 R4 Z5 ?% v+ \. M接下来我们学习怎么设置生成一个工程,Project Manager-> Project选项用来配置工程的选项,我们了解一下里面的信息。
, v! p* F# i7 R0 \Project Name:工程名称,填入工程名称(半角,不能有中文字符)5 u" z  q) _6 k2 a2 _
Project Location:工程保存路径,点击Browse选择保存的位置(半角,不能有中文字符)% s& s3 P& x% o9 D. b
Toolchain Folder Location:工具链文件夹位置,默认即可。( _- u  r; e# e' z
Application Structure:应用的结构,选择Basic(基础),不勾选Do not generate the main(),因为我们要其生成main函数。
3 W2 `' ]/ Y3 k" s% v2 Y+ _, A' f- g4 sToolchain/IDE:工具链/集成开发环境,我们使用Keil,因此选择MDK-ARM,Min Version选择V5.27(最新)。4 L! o+ b5 R2 k$ W7 n2 e3 ^
Linker Settings 链接器设置:
) d% y! _) z4 ^Minimum Heap Size 最小堆大小,默认(大工程需按需调整)。' [" U7 x- y+ u/ b2 r2 C) p; H, O
Minimum Stack Size 最小栈大小,默认(大工程需按需调整)。
* L; F' c7 L7 s9 F$ f% E, R9 HMCU and Firmware Package是 MCU及固件包设置:
  ]  J7 E+ e8 J3 zMCU Reference:目标MCU系列名称。
. p4 I$ `" [% k/ s7 [5 xFirmware Package Name and Version :固件包名称及版本。* F2 Q& u3 ^! a6 {4 O
勾选Use Default Firmware Location,文本框里面的路径就是固件包的存储地址,我们使用默认地址即可。(这里因为我有两个版本的固件包,所以它默认使用最新的,这个关系不大,就用新的)。 最后工程配置,如图10.3.3.15所示。
* q1 \/ n; M2 \5 J% \/ M7 g" ]! p$ P+ E5 e
2cef5102baf548b483433a1cb8784ae6.png / Q, h4 P) o  Q, P3 l% K3 l
4 l, U" _: F$ P
图10.3.3.15 工程配置
" x* N! Z& B/ f, r: X打开Project Manager-> Code Generator选项,Generated files 生成文件选项,勾选Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾选这个选项的话将会将每个外设单独分开成一组.c、.h文件,使得代码结构更加的清晰,如图10.3.3.16所示。
) j4 q1 M+ O6 w, a" b4 ^7 a3 c" T0 T9 A* W
a6fc082692d74979982c6dbd15894bcb.png ! G7 v7 W' b+ ]  A9 k* d

) r9 ~9 ^  u( J8 y图10.3.3.16 代码生成器设置
2 w4 r' i. ^& n$ B) a( v- m+ f* H至此工程最基础配置就已经完成,点击蓝色按钮(SENERATE CODE)就可以生成工程。
$ \$ x7 L! N1 r
  T3 [3 C$ Y) e( c 018411a849b843e2a465e6647cf48528.png
, l% m$ W( P" S. U5 e$ \# F1 j9 R" z; ]* ^" e, W
图10.3.3.17生成工程: a/ Q; m" n4 x1 v. L
在弹出来的窗口中点击Open Project就打开MDK工程。/ D/ N/ g" f: T) v0 r

' S" t8 n' a0 U# K/ ` ad2edfbe13f04b14bfbd0f1d48d477ab.png
1 P% g3 X6 H( ?9 x+ x& ~) `' j4 W0 H' x  Q
图10.3.3.18 打开工程  K) m2 u* _) P" D
完整的STM32H7工程就已经生成完成。生成后的工程目录结构如下图10.3.3.19所示:
; o; X8 j) I' j" a2 e
; W( @6 D9 [. a' w: T 395ce43578ab42e1b2791ab5abf69fa0.png % p% {+ p( C5 j6 l2 w4 ]. l, ?
2 E$ T+ R0 s' \4 G3 @( K
图10.3.3.19 STM32CubeMX生成的工程目录结构
- C* o4 `, N7 DDrivers文件夹存放的是HAL库文件和CMSIS相关文件。+ }& J5 c. t) O0 h* E
Inc文件夹存放的是工程必须的部分头文件。
1 Q0 _; m0 r& N: S- h+ ]9 FMDK-ARM下面存放的是MDK工程文件。
6 o- J7 f+ ^$ I4 b9 }- [Src文件夹下面存放的是工程必须的部分源文件。
5 j8 U; p( d- G7 R4 O; STemplate.ioc是STM32CubeMX工程文件,双击该文件就会在STM32CubeMX中打开。
4 Y3 y2 d0 A% t* }2 p$ z6 z% v) o3 A- a
7 用户程序
# V: _  G( _+ V: d0 {- k在编写用户程序之前,首先我们打开生成的工程模板进行编译,发现没有任何错误和警告。
; U* u* r4 p& b$ y% y接下来我们看看生成的工程模板的main函数,这里我们删掉了源码注释,关键源码如下:
4 a. P. n& t% Z$ W2 f  U5 m/ K2 u
  1. int main(void): p0 V0 I$ i  a4 t7 J
  2. {6 H6 }1 G+ o: g# d2 F* l- Y
  3.   SCB_EnableICache();
    $ ~6 z2 ~$ |# E& {; X9 L% v5 h) d
  4.   SCB_EnableDCache();
    $ Q; h8 a; d3 j, E9 E
  5.   HAL_Init();
    ' u" ^9 J8 }, y5 |: g
  6.   SystemClock_Config();0 v3 s3 o6 W, Y
  7.   MX_GPIO_Init();
    7 R; G5 [, _% C0 z
  8.   while (1)" I, }1 X) b/ q$ E* g% J9 \+ |
  9.   {
    % u+ Y; l# c& u
  10.   }, r1 r- J, k: y- |% }' D8 P1 C- z/ L& |
  11. }
复制代码

1 }% c# p5 G4 |0 x5 k0 q大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X /”和“/ USER CODE END X */”格式的注释,我们在这些注释的BEGIN和END之间编写代码,那么重新生成工程之后,这些代码会保留而不会被覆盖。
3 ~$ \: Q+ G1 Y9 D- p4 @1 H我们编写一个跑马灯的用户程序,程序具体如下:& ]6 x* p# R& V# @; |! y, L
: J# M# ?6 Q  i
  1. /**! k; Q' }% ^7 j2 c# P; Y
  2.   * @brief  The application entry point.+ E( b1 Y: e4 I: w9 m. A/ V
  3.   * @retval int& A9 K4 L6 e1 V: A$ U
  4.   */2 b  w( t& K4 t, j7 `
  5. int main(void)
    ( \- f$ X2 f7 H6 y
  6. {
    ! G% ^0 y2 r2 S) [: `% q* |
  7.   SCB_EnableICache();0 Q! x0 i5 ]$ ~2 I8 I
  8.   SCB_EnableDCache();, b  x2 Y% Y7 ?$ a9 `+ c6 ?; o& S
  9.   HAL_Init();
    " v  s$ E4 d. }! \5 ~. M
  10.   SystemClock_Config();
    $ j8 T; j5 X9 j7 m7 i
  11.   MX_GPIO_Init();% U& E9 @! o" S
  12.   while (1)
    , ?& a# u, t: s0 L
  13.   {
    8 `* w6 Z! H7 m
  14.     /* USER CODE BEGIN 3 */8 y  d+ h  b% i
  15.     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);            /* PB4置1 */ & u( i. _. [7 }5 k5 ^! e' I( u0 h
  16.     HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET);         /* PE5置0 */ 8 D  ^& a$ J0 Q( S9 G/ Z0 A0 J
  17.     HAL_Delay(500);1 \  Y/ U. l, t. n, a  Y
  18.     HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET);            /* PE5置1 */
    4 V3 X1 U6 B% Q, l
  19.     HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_RESET);         /* PE6置0 */
    4 Q. d  U6 A8 R# A# V
  20.     HAL_Delay(500);
    - b, ]) S5 Q; c/ ?, q
  21.     HAL_GPIO_WritePin(GPIOE,GPIO_PIN_6,GPIO_PIN_SET);            /* PE6置1 */8 A+ n. i. g8 P. s
  22.     HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);         /* PB4置0 */
    " z' ?8 ^( A( x
  23.     HAL_Delay(500);
    6 \8 W3 C% v5 a) w3 G7 V- d
  24.   }
    ! e: P; `/ }1 e5 u, R  k
  25.   /* USER CODE END 3 */. M- H6 f9 ^* T0 M# M2 J4 U6 y
  26. }
    8 I7 X; j9 b4 ]* q
复制代码
. f0 j' K% ~# b. }+ j, E
编写好程序后,编译没有任何警告和错误。可以直接下载程序MiniPRO STM32H750开发板中(使用DAP下载,请注意配置MDK),算法只需要128K的算法就可以了。
6 h. @( m" G3 t! Y) i, i& o本小节使用STM32CubeMX新建的工程模板在我们光盘目录:“4,程序源码\标准例程-库函数版本\实验0-4 Template工程模板-使用STM32CubeMX配置 ”中有存放,大家在编写用户代码过程中可以参考该工程的main.c文件。* n# }1 c* v0 {! C& S
$ }0 z. U$ G! T7 a3 C
10.4 STM32CubeMX新建工程使用建议  n" O. A3 B# H7 W; l! q
① 使用CubeMX的环境搭建工程,工程文件夹路径、文件名不要带任何中文及中文字符,否则会遇到各种报错;  P4 a. \: Y! \" d% a" L) v
② 本书以新建工程-HAL库版本为基准来展开,不对CubeMX的使用过多讲解。使用CubeMX可以帮助我们快速搭建工程,使用户专注于应用开发,但STM32的开发与硬件密切相关,对STM32开发来说,抛开底层只专注做应用并不实际,毕竟无法使用一套通用设计来满足不同用户的需求;
3 F9 q' n  Q/ t③ 关于新建CubeMX的工程路径中有中文的情况的解决:  m( ^5 A' l0 ~7 d+ i6 {; \
如果我们配置的CubeMX工程路径里面有中文可能会报以下的错误:
+ p) u( w" G+ l) Q+ X! ?; \  N: G7 V, p* f! ^9 v
6a0ea7fc68a34b38b6cbbe29be45918d.png
* g4 G, Y3 Z1 d/ _
$ a+ i: X: _0 v1 {# j# Q0 F" V图10.4.1 直接编译报错9 m3 V' j* H0 A9 h
造成错误的原因是CubeMX对中文的支持不友好,且生成的MDK工程默认通过工程中的CMSIS那个绿色的控件选择启动文件而不是直接添加启动文件(startup_xxx.s)到我们的工程中,而有中文路径时就会找不到,有两个解决办法:
9 H& W& n6 Q4 ]1 L. @1、用CubeMX生成的工程不要放置在包含中文路径的文件夹下;  v% ^! K. X) y) O* d
2、添加启动文件到我们的工程中,我们新建一个Application/MDK-ARM分组,把startup_stm32h750xx.s添加到这个分组,如图10.4.2所示:% I! S5 a1 y# w* J" r! `* h' h

+ n0 W' q$ F& H) D eb03a007e4f7462ab26aed9c965a459d.png
8 H; b6 H$ Q5 B# L; [/ {: v, B3 s9 [! }, v3 `) M
图10.4.2 STM32CubeMX生成的工程目录结构- W, k6 X) N+ g
④ 关于配置的文件CubeMX工程(.ioc后缀)名字有中文的情况,我们建议重新新建工程或者把生成的工程文件重命名为英文。因为带中文的CubeMX工程生成的MDK的Output目录有中文,MDK也会报错,尽管可以重新设置MDK工程的Output目录和添加③所描述步骤的启动文件,使本次编译通过,但下次重新用CubeMX生成工程时,仍旧需要重复修改配置。
. a8 {1 Z0 f5 c7 [. V————————————————" i9 n7 [2 ~& h- q1 i( J
版权声明:正点原子. j8 Z0 e/ q2 S& Z! B) q
* k' B- w, r5 U
收藏 评论0 发布时间:2022-10-5 22:11

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版