一、cubeIDE下载、安装
- K6 q: N, ~! x STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
' t$ d0 ~; j$ a2 R/ R+ ^
: n1 }2 ]% _: C [; V) p& d: v
3 n5 ~4 h D; Q* m9 v3 Z# M8 Q5 l
$ `9 O( |5 p" F: _+ k7 J% F
下载完stmcubeIDE后,双击安装包完成安装:; a4 m$ u! B! ]7 P- q7 E9 x% _
9 z5 |" ^/ c, ?# z8 k: W& t: ~
5 e) ~* n. f: C- F9 H
9 ]; n, B# }- d. x# O安装完成后,去help->install new software配置安装汉化包! y J& o& p8 [4 l5 {% X
4 s2 {% \: q8 }, [+ G$ [2 ^
2 D: ~: x+ {6 o. J' |7 @- @" R9 J; a
选择简体中文完成在线安装
% P* c! y# e8 e0 U" ~. l: T0 T* n- @: D7 o
" s$ O) ^8 d8 ]/ M4 O/ O
( y. G$ h5 x8 v7 A; j: p$ c
二、创建工程及配置芯片引脚' H2 F5 S3 }) W
汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
. d+ f6 Q: c5 i3 d( F9 g* X" P' F
) l' }! C& w* |+ ?0 M. T2 x, f: _
点击下一步,输入工程名,选择工程路径,完成工程创建
9 a& H" c1 G9 [) q$ N( r+ B8 g
' g/ {" a# f2 o" F! a" D
5 ^; P4 ?5 Q) @
9 ~; V; @! b7 _% T6 B0 r" g4 f' S 工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口( K" j6 L1 e# Y1 H
/ {. `' p! o& _2 T* d ?+ l
开启USB串口能力
8 D$ H4 ^( O9 k f0 c2 @, u3 K, I1 B; C$ I0 j
" Z+ F0 Y1 s. i1 x! \: n4 d* E. S! `0 R9 q/ S V. C( ]7 L1 @7 J
本文仅开始外部高速时钟(HSE)$ ]$ E: x6 o1 q/ V9 P
. V( ~8 t; ~: E
3 U: W& u; F4 j* {, u" X/ Y8 x7 B* F* _
系统时钟频率直接拉满到80MHz. h2 } T2 O+ z$ i# }/ k# W6 B
! W" f6 f, q% K& T3 s2 c0 I& o
8 B u. Q% r* @: w* ?9 G( y: ?/ U) u
8 b; P$ F" o( {) J! R3 v 为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO9 g/ {4 Y, I' [, e: a2 S+ B
2 B" j8 M* l6 g: Q* z
8 M, k/ t3 D. S- U
2 r% C+ r* m5 X/ R! Z
工程管理,保持默认设置," S$ u" s! K* p5 [7 @
2 M) O4 a5 ]' u: K4 G" a5 \2 ]
7 m% v4 K! R! m; d d4 |$ p
+ ?8 z' f: [" |4 o7 u# D
代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件( j& T: y+ e8 q
. H0 s: u2 t8 Q5 }* _
- h+ K9 @) ^' f4 p1 r) d
7 P0 L. d' z( o. B* q4 J 高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数, u* S# ~( F# O/ |2 A& u# F# q
% h s, x' J5 W
1 l8 ~& m& k0 q6 p- E. U- f5 z, E# M8 m
: A+ r6 l! x. F
点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成
8 a# v, o2 ?' [" I/ r& m2 u
) i& @6 m7 I8 b S" I$ j
% R1 a! Z; A( F+ j% q8 x
0 h$ z) a0 D& x* u 代码生成后,GPIO接口映射信息配置在main.h中
$ H) F+ ]) a' u
- A. Z3 P* H2 V1 `; o& S1 @
! Y1 H5 G- B& m/ B2 S9 N6 y$ Y1 U N5 y+ v( }8 p+ Z
生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。2 ]% i( `- |; L
& \8 c% v R/ y/ ]- ]
X6 B1 f/ m7 j, D& D1 _
: |" X) ^4 T2 F7 Y/ J
先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
9 Q, n6 [+ `% M9 r! u- t/ J ]4 R. k6 r, R- ^" r5 j+ V9 l6 T
* L0 I2 l( o2 \三、编码及编译
7 U3 v# B9 J% C; C 在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件4 M% d# C8 g( e9 F
$ J) h# @8 H; T8 { U5 Z0 [, a: b. o
: W8 H" o* K+ I3 n3 g u* ?4 O; i
! v7 D2 t3 n. H4 O. _. ]5 x8 a: w
key.h
$ K2 u; T' @) r8 p- B% q' E- /*
7 @3 I6 X' Q6 f+ Z, @ - * key.h
5 N+ r$ l- H/ y) ~: s7 z; E# M, U4 V - *
6 V. N' M- K9 I/ [) F/ D - * Created on: Sep 29, 2022
- B" ?, |) Y) Y8 `( { [* R+ b% m - * Author: py_hp
\" ^+ W5 B! K! R& q# d - */
5 c J* e+ h- t+ ^5 I' f - Q$ I& o6 M6 Q+ U
- #ifndef KEY_H_1 }+ k% {% r2 k" J; ]
- #define KEY_H_
& Q: Z- A% J3 E) a) Q6 q$ v - % D. c5 q- ]4 U3 U* ?& C- X }
- #include "main.h"
2 H6 ?3 G$ N1 U* ` - #include "gpio.h"6 f2 z8 e9 T# M' V
- ; X; \8 U- m4 Z% K( d6 l
- GPIO_PinState get_key0_val();
- }; e5 N7 }/ k, v( D5 j: O7 z - GPIO_PinState get_key1_val();+ m6 Y7 M* H7 ]$ {! ^
- GPIO_PinState get_key2_val();4 K/ f: B9 @2 T+ T
-
$ O) N( U8 [$ o4 j; w3 h" ^' H - #endif /* KEY_H_ */
复制代码 1 @; `9 d4 P5 A* ?; R
key.c
( R% b3 M {; I! A3 t- /*2 e" U, i8 j- N0 W1 K
- * key.c' o+ C( U. D6 l3 f0 F
- *
7 w- m2 |# m' a0 o6 }: P) a - * Created on: Sep 29, 2022
* i) j1 [' t& v" i9 a - * Author: py_hp$ [& d5 S1 O0 H6 X, z A6 l
- */
# `, v. o7 x% P- j/ }8 J - #include "key.h"
3 q8 j) |( W- v0 T; {8 M& C -
, C, o" L0 F3 d - GPIO_PinState get_key0_val()& b0 |' G4 P- U9 I
- {
7 C, { Y7 d/ Z - return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);- |2 U- M2 P( @& I. p
- };
- D# O. N5 O2 N6 R1 H - * E; r4 N; Q! Z( S, Q
- GPIO_PinState get_key1_val()" o. h2 G% k- W$ C* Y! A
- {5 q( L1 u# S2 ]
- return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
: ~8 ?+ C) V B1 w, a+ B - };4 j. V8 x* K" d$ d3 F) F9 V- F
-
* B/ u1 X$ n$ q$ l3 j3 w - GPIO_PinState get_key2_val()9 [- u. F0 {! D. O F' k7 J& i1 n/ l" A
- {& A7 ^6 \, ^) A; n" U
- return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);* F' ]6 U E& \# r2 q3 Y0 }
- };
复制代码 + C+ L0 G6 b) {, A, ^. ^5 e. R3 h
( N/ a. Z* ^/ B2 t, U2 [
led.h7 `1 g3 q7 s# q) _+ B8 B
- /*
+ a& T# @% a4 j, l0 S% K - * led.h
' U4 U- ]" S, k) O - *7 ]1 i7 [6 W0 I: Q( C
- * Created on: Sep 29, 20222 v& r4 X1 i* u4 i& j
- * Author: py_hp
; X! U0 R) e( d! j - */
1 C4 D* L4 W+ H2 m& M* b- B: @( o6 X - / X4 ], [/ \, i) y# X3 Z' j# [2 S5 A
- #ifndef LED_H_' j; E; I& _, ]1 X1 d1 O/ Z# N
- #define LED_H_
% B" e8 _% F3 E; v - #include "main.h"3 w- \7 P$ \+ P) }. H
- #include "gpio.h"
. u* o+ p! b9 g -
/ u0 a% r0 Y, Z) x - void Toggle_led0();
5 s4 o, I- ]( ?8 t- c0 @% |5 e - void Toggle_led1();
) V# y6 z0 ^, t - void Toggle_led2();5 X+ y6 W' [. x3 G+ h# N3 u
- / u$ f8 v; h% I8 m) U1 W7 X$ u
- void set_led0_val(GPIO_PinState PinState);
8 K) u2 {6 C" W H' ]* p& \: R - void set_led1_val(GPIO_PinState PinState);1 q& Y9 B% u: l3 W h
- void set_led2_val(GPIO_PinState PinState);
) D ^, `2 t/ I% K -
0 p" T! ~2 C2 F2 [+ |0 C - #endif /* LED_H_ */
复制代码
5 N: O* @5 y8 {; [6 v4 h3 rled.c
! c6 D) c$ c5 \% D: S- /*5 ~, V: b* h1 e' `& \% k0 c
- * led.c( h5 ~5 J. _+ r) E5 i# v; X7 |
- *" A$ ^+ j( f! E) r6 f% ^( I' y
- * Created on: Sep 29, 2022
2 \" F5 z l4 t. B - * Author: py_hp
- Q# E8 P3 g3 \7 J - */# p3 h# o% B9 k. @0 u
- #include "led.h"
1 H' H! c+ t% W* I# ~ - ! G# t8 W3 X" O! W7 U4 H
- void Toggle_led0()
0 O# h4 r. ]1 j - {
8 b4 e1 T) w7 Q) \5 V1 f1 c - HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);' e8 b- n. p6 I9 h9 w9 }' c
- }0 k0 e; T& `& R# I% N+ |
-
$ E$ Z W5 v M2 N: k" A( {1 p - void Toggle_led1()
. n5 l. e. u L3 ~* q( W" E - {
( L k" @, [% [7 j1 J K/ i - HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);/ I4 I; z( T6 M8 O( i+ T
- }
' G' `+ e+ b- O, B; Y" V -
) u7 ~6 ^" ~( v# Z/ a - void Toggle_led2()' v. h- p4 k) s1 Y+ g# D
- {
9 s# u- N9 G Y6 k - HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
+ h2 |$ n7 O/ [$ O; e8 b, B - }* H0 q% E# `6 V; U9 O" X
- 1 k6 n( [" S G9 k
- void set_led0_val(GPIO_PinState PinState)$ x B) A4 r. [0 @
- {
6 D3 ~6 j# y3 y6 a - HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);/ A1 ]' N g* N' w& R8 \ E
- };4 r, ]0 h9 @) M* `, l! ^
- & p* C( p- `' G4 u! ]
- void set_led1_val(GPIO_PinState PinState)" a9 ?- Z4 ~* M! V' u
- {: g! ]% p$ p [% [" a, J* Q
- HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
/ G: t/ y+ B- C - };4 H& I, ]7 k; m8 f
- ( z4 u0 R1 @7 y/ L) n$ u
- void set_led2_val(GPIO_PinState PinState)
& P( C5 W, ?( p n6 m. S% C - {1 `; H0 W* O3 ~: c b8 Z+ `3 Q- d5 d
- HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);
: \0 @3 }$ Q" E6 I3 r B9 {3 e - };
复制代码 ' }* s4 U2 T( o6 l0 c) D
在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码4 i; w/ s! E; {5 N7 m
5 j, o2 u1 Q: {1 n8 R- t6 D 添加头文件
: \# R4 H! M. P3 b1 k2 ~/ ^- r& e* ]; @, H0 z, i) J& h
& I" ]. O7 ^+ Q' P; V# D$ h D+ T; d J9 U: k. f
添加函数调用实现,可自行斟酌调用! S& w, u" @) S7 w; S* N% T% s. |
$ }! s+ w2 ?: d; Y
6 p6 q! I2 F" \0 Q5 n; ]9 e+ b# M
7 {% j& j: p: L% T+ m 右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持
4 f0 ^# c7 w( A: D" A6 i4 b8 N' y+ @$ v' M
$ c9 j4 R* Q) V/ k' n, m1 Y
9 O/ }) q; {6 K/ q' R
点击编译按钮完成编译
- x. n) \7 d# F; @, P' O- j9 [) p! p: u6 E0 O$ M
/ ~9 {* |( z* Y! V( Y, c
! ~* c7 E9 X W* ?$ x
! n, j3 V, h* o+ m* m5 r3 _四、加载已编译程序到硬件及测试
; j6 r) u T5 o 点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。
* q/ T& f) `' x# N7 K" U) D }" @* R9 s' _/ @, ^: m
, C- n+ |% Q, y0 T5 N. n* [
2 j, d _, v) K5 E8 ] 点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,
6 ^& f3 A+ ^2 Y* I8 Y. e6 U5 E8 t7 k/ w) M; u
/ G1 U! t! O7 _7 J% N* `( Z# P& Y2 e: T
6 S$ W9 G/ G- P2 N6 N r0 n( k& }, D/ R; x) D3 ~
将电脑与硬件用数据线连接,点击运行下载程序
& I( X+ P* o! a3 I$ L
8 ]3 I4 S- F) J4 i ~3 b3 |
; w: F2 \6 L3 [) Y
1 _- Q# g" \) d9 ]+ D/ y9 X2 B( _
或者采用其他下载工具,如STM32 ST-LINK Utility加载
- y6 h1 ]& c0 B* N+ I% J/ S- p7 m
6 l2 [+ w# A0 r7 x
7 n' ~! S/ q$ r7 |' V. Z, c5 _% j五、程序运行效果
0 u; [$ h4 k& g" I 展示效果如下: s; P. h) D" l# ?) a6 Q
- Toggle_led2();//闪灯% ~8 B6 q; N- n/ j4 l9 \$ T
- set_led0_val(get_key0_val());//按键亮灯5 j+ _# A7 I9 l! `- `, B
- HAL_Delay(100);
复制代码
/ S, E1 V0 g6 T. K* Z 【1】闪灯- X( \* n3 x4 P. a0 Q
3 U! Q, v3 r! M3 I& V" W
$ S1 k: J2 s5 }, v+ |) e
7 w% ?* [# t, I4 E4 k, T' R 【2】按键亮灯- ~2 N+ b$ m$ K
* T1 Z, n& ^( h$ M% A% N* S
) X1 b% R- i6 F# |$ K0 ]
% y( @) V7 U) i0 s
————————————————# m6 h* K4 n! h( z8 n
版权声明:py_free-物联智能& b" i8 ^8 A! J3 ~8 x2 ?7 ]' s
如有侵权请联系删除: ?) w8 }$ O5 X: Q
, I n8 b5 G. b- @* D
8 s+ }! }! u! m: f- i; P; I0 f, L
' z( |1 a+ j0 x; E. i% M6 m |