一、cubeIDE下载、安装 n0 ` R1 F- ], X. X; r+ o% a+ N
STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
' f- K1 x, t- R7 b0 M" `& S$ m x5 u6 y: {
# s* c: ^% i6 b- ?- A2 ^( {3 A! }; z3 {7 R! j3 h( e5 [1 e. h
下载完stmcubeIDE后,双击安装包完成安装:$ Q* a# o C u0 U
' i9 x4 g# T# r* i6 W# q0 F
( S5 r3 g, u: f0 g( Z7 V
" W( f; ]- W4 i O2 k2 a
安装完成后,去help->install new software配置安装汉化包
% }# i+ L8 l8 N( u. w4 o& V
+ E% X$ n4 @3 A, {7 ?( F) @
; N" q6 F) S8 b0 G
+ E' G% d2 ?/ F5 N. s- H选择简体中文完成在线安装
% W; D: [% v9 P9 E' Q4 \
! Z9 S" s+ N3 ~; N; |' @
2 g6 m q& Q0 C& N1 u% K5 u
5 N |% X2 I4 g# X3 A二、创建工程及配置芯片引脚! k+ U: t+ C' ~
汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
- X. b2 H7 g! ^' B+ I4 Q
* L" B/ H, O, p: i u
" q" U J8 E8 `& j, F7 ?
4 e# b3 ]4 R1 ~+ V5 i( ^
点击下一步,输入工程名,选择工程路径,完成工程创建
! ^$ L3 s6 V' [& L0 T" d: j# c5 g |, S" s9 T0 p) S
! l, N- h+ T* z- M L1 G+ L
4 ^$ g$ p: h; b. @) \7 X, }
工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口
2 P9 R X# W! N
$ M7 B: j1 b0 B 开启USB串口能力6 M% J/ A% E/ V0 ^1 L6 S; L7 \/ c3 F
* V# V; Q) |2 X5 G3 d
3 l. I1 ^8 @: O3 j
- q$ v9 @1 Q0 G: f6 \
本文仅开始外部高速时钟(HSE)" C. R7 l9 n/ e$ j: a" i
2 [. h8 l3 T; C
- A2 n) z0 u7 v8 m1 O6 e; [1 G3 p" y- w- c* N
系统时钟频率直接拉满到80MHz
+ P* f) }& X% m- n
: N/ C% o0 M, }# t) d- F/ k
6 h; Z; v2 ~/ I. f: ^/ {- z
/ r# {$ R$ J2 q* @) m/ U 为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO
; C$ h Q3 e5 E/ I. H- o+ s8 B* x( x w0 b
, g( W/ _ t1 P7 J- M/ m( G
6 p) t/ z2 I$ X4 ? 工程管理,保持默认设置,9 A S; M5 {& D8 |- A7 F
: m" m0 [0 B0 T
3 c, |& i6 O l: m8 v: D
0 n8 \) c9 r1 X( C) Y9 \. o, \ 代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件: Y/ m$ L; N; S# c
. W! v e { @. c ^* U
9 E( s+ ], ?5 a/ ]# t" s a" ~. ]- H' y- T
高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数8 r; ?; y: _: c) j; N4 V8 B
* d, s; X4 D( l
2 j( B* y' i, M
; ^7 ?# R* h* V! B/ m/ x: g
点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成0 b! X+ L A+ i, p6 F
. E# o6 d ~# Y6 R n8 X
: R5 o9 Y& r2 R
$ W6 z9 Y P) {0 e2 ~/ x4 M- |) J. ~ 代码生成后,GPIO接口映射信息配置在main.h中3 H x$ `: e- o' [6 s5 j. N/ c6 {; h
/ ~+ {! w. v' x. I8 r' k/ H
+ g, ~/ R7 \) P- g. r) `* h; `# J2 ~+ n* W B& }3 u
生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。' I4 Y! o; F' O! T/ C$ I$ Q
1 h% P$ A5 x3 E0 {) q5 S
) X( T$ N$ a6 A# z+ I; N( i1 @
+ Y7 v% R/ |8 I f6 d 先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
/ D6 X1 L; J- S; W2 ~0 G2 H& n6 w, ~5 b$ ?9 u/ l. R* M# S
+ v1 l! h& p/ ?5 K V1 [三、编码及编译
1 u+ l3 U% g: f, H 在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件4 j6 s/ q2 F9 d0 |* w, F
- P8 N! q* x% w4 E$ q3 F1 K/ W1 N
3 ?; u) J+ F! b, l
3 Z: R6 E1 d3 {' } key.h' Z2 Q0 ]( p( v; m- y
- /*$ _5 w+ C# ]+ @' w1 v
- * key.h
. r6 u! f6 L7 m! y/ a - *
/ {/ }0 m% j, ]. v( K- n - * Created on: Sep 29, 2022
2 ^! c( S! v, B - * Author: py_hp
% Q! I6 W' H) G \2 h5 k# `, r - */" Z) R4 d4 ~' ]9 x1 m
-
" U, x! i+ Q: U - #ifndef KEY_H_
1 ^% Y3 |5 |6 K( E! Q0 F - #define KEY_H_
! g8 y& J* J3 f- D" W" l -
9 Z j9 v5 Q3 ]' M; z - #include "main.h"
4 o- q1 n8 D+ H7 _* a0 t: x - #include "gpio.h"
$ s, K/ L. ~; W. ~) Y8 V( S - 2 Q9 S( [: {. N7 o5 K( R9 T) d
- GPIO_PinState get_key0_val();: h$ C$ N3 Q1 z" H: V
- GPIO_PinState get_key1_val();% z9 Q- @# u1 O/ c) f
- GPIO_PinState get_key2_val();8 j: O N! N/ o J
-
' J* D! B& h3 g$ C - #endif /* KEY_H_ */
复制代码
* R5 d3 \$ y# a$ f7 wkey.c
8 _3 [2 k* @1 t Q- /*% [5 p; _6 }, a2 k M& Y* y
- * key.c0 z& O0 S$ [# x% V; U
- *
. T6 D. W5 }% i j7 p - * Created on: Sep 29, 2022
1 M; u$ x6 Q4 B) h& h I% t" m - * Author: py_hp9 }6 g$ q# m; z* k
- */ P/ r/ x N4 L" P$ @# h
- #include "key.h": G5 Y( c4 r y4 A
-
: X, {- T( o5 M. d% I) W }+ j9 h - GPIO_PinState get_key0_val()
5 X K2 u2 i; @6 N2 D# V# @ - {
/ O O- _6 |0 a3 z1 x# d! H; D - return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);, S7 H7 x* e, U" \( P2 c
- };& z$ @0 E2 [6 m. {
- 5 X, o! ?5 Y" }; d1 t
- GPIO_PinState get_key1_val()) l6 r2 V7 `0 M( l9 T
- {6 h8 t# `6 t; w3 ~9 ]- [
- return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
% G' f. m; w9 c5 d+ h+ H7 ] - };6 o6 Z! \: h9 l0 E
-
9 L* x5 A/ L$ W* p4 u8 y - GPIO_PinState get_key2_val()
9 K/ f J6 k) @/ X8 `. S - {" P/ B' C0 x2 C+ X
- return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);
' R9 T6 a- K' f+ @ n n; s - };
复制代码
3 ^% X- t( Q+ Y; i) K$ ~7 {5 W; r$ K) K/ @0 j( U
led.h
$ d8 N# J$ b% w& _' n: d" r- /*8 B7 R- |5 K0 ^+ G+ t% e" C
- * led.h
# V! S' A6 Y2 j5 D2 s - *7 w M% l) N/ l- m* U
- * Created on: Sep 29, 2022
, i! F0 W h2 ]0 w - * Author: py_hp$ Q4 w9 H1 D! D/ j
- */
4 F, A- A( C( ^* O! ? - 2 |: M: M q6 w. @
- #ifndef LED_H_
' V/ M9 k; A, A% G+ H - #define LED_H_; @9 d7 f5 t9 R Q) I4 D* J
- #include "main.h") u/ U' V5 u9 o/ i8 J, }& N5 [! b% }
- #include "gpio.h"
; M) L$ g. V% U* Z- g - 4 ?: f9 s* k3 n5 \! T2 ?! ^
- void Toggle_led0();
( A' z) x9 i6 m, K - void Toggle_led1();
: l* C/ {0 F5 t - void Toggle_led2();
. L3 o& A- T G -
; f' ~7 v5 H7 B. O- t6 M4 | - void set_led0_val(GPIO_PinState PinState);2 C/ S. L9 f& m+ U' l1 b6 _
- void set_led1_val(GPIO_PinState PinState);
$ t& u$ w7 t6 x# B* h. D: U' X$ ? - void set_led2_val(GPIO_PinState PinState);' N% e9 o7 a! N
-
: O: ]3 s2 ~6 M( k# ` - #endif /* LED_H_ */
复制代码
4 `) U+ e, p" L! xled.c6 b0 e! S9 [8 z M
- /*
9 J& q- {/ r: S, c- E - * led.c- S' K+ l% d* O& L% V
- *+ F# h( x& B4 l. a& V: W
- * Created on: Sep 29, 20221 Q, b9 N$ m$ ?' F5 }
- * Author: py_hp
% V$ b q: {# O) W - */
$ O |) X; v$ s5 H2 U% r! O! K' c0 Q - #include "led.h": K3 ?$ r Z* B5 u/ q
-
/ c' \7 ^! s+ f% ^! H! U4 S9 Q( @; d - void Toggle_led0()% l0 }' X/ R6 j% ?5 q1 R
- {
" F1 }. c. m! A: s - HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);2 W1 K6 c7 K9 J1 n! y3 ^4 c1 E- l
- }
- p; F1 F L; \1 V. [ - 0 g6 b$ a! J. Q5 x% z0 t1 U3 C
- void Toggle_led1()3 }$ v6 l' d: g8 W( o
- {/ \1 n8 c" q/ q! C! l$ p" R, x
- HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
! {' R \0 _' S4 L! \: i, a5 [ - }
- Y8 p5 e7 H/ w - $ }6 G( X$ O& b" U& j o+ A
- void Toggle_led2()9 j9 y9 N9 w4 G9 s! K
- {" A) C7 D, {6 o }0 k
- HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
) d( g7 R6 B: B. b - }
% \8 I8 @ f* A+ [ -
) y* _! o6 K3 a# Q# I0 ? - void set_led0_val(GPIO_PinState PinState) j/ U" D" X" J3 S6 k4 t) \: U3 [
- {0 T) v3 m$ r) L% I
- HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);5 e; E1 u) ]) k {1 H1 H% q
- }; r# T4 u1 W h) S
- 2 ?- ~8 N. u6 p
- void set_led1_val(GPIO_PinState PinState)2 e( @' _0 h; d9 W/ L
- {
% ~4 c; y3 J* s7 t$ e. X - HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);8 R( Z n, p" c* r2 j( y
- };
+ n7 y: o/ t7 x2 c0 W - ! m6 \; u @6 g' s5 Y8 g# B
- void set_led2_val(GPIO_PinState PinState), g9 s" G) N$ b8 g+ v p7 H
- {
( M$ }* k8 {) O3 P( R; ]# h! L6 H" ] - HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);) y0 t9 M9 v. O3 {% j
- };
复制代码
0 R! c3 H0 t9 R0 c 在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码3 A2 o6 F L g7 _- L- t
1 ]9 L* t% C9 J0 ]2 @) u
添加头文件0 c! K( _4 X- v
4 \9 I6 u1 t) e v
8 O% c- C# l% \1 a. P/ P d. Z( W$ {/ R9 ?8 `! G
添加函数调用实现,可自行斟酌调用
, Y2 M+ a H( X3 o& Q
$ v0 ]$ g% T- v/ F4 J
, R0 `: T e/ {) ?/ s5 m$ V* f0 ^
5 I# _. K% K Y. K 右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持
" O9 F/ _' M- Q8 P% s, ]
8 f% B. p4 k' e0 L3 g( j6 R
4 }; F" Y, o* x9 E. [3 j5 a
- w/ ?2 Z8 ]% ]1 f0 f1 P
点击编译按钮完成编译
0 w; B7 j/ l4 b- ]' |9 T* e$ o2 J
. l/ G* q0 r6 K) j' f
0 U( P6 O' n' [) J* h' O0 K A p% \( q
9 Q- Q1 H/ |: s0 i! }
9 ^: |$ \1 M. H& q- y% m" g四、加载已编译程序到硬件及测试/ X. I1 H1 h! u: O! m
点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。# g' u/ {6 k. o1 J3 _, g
4 W) ?) ?: E/ |/ s; b/ A
! v3 E' ^3 M8 R% a8 U3 I
* |$ O# r2 P' g* X- a1 z; o6 S 点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,
& c& K) d/ S2 i4 O) C8 x6 N. H+ Y# d. u
5 B% G1 p0 u. ]5 A; `7 Y+ O; _5 s. }0 K( P. x1 `# M
& A0 h! t% h" Z
# r. \4 ~3 m$ b8 c- Y 将电脑与硬件用数据线连接,点击运行下载程序
+ N0 \$ X) r( o, O8 q! V- k o' U$ \3 }- r4 D& C
. [7 n$ {# [3 o! H' @( ]# s" [1 d! a4 R4 E0 `7 d7 V
或者采用其他下载工具,如STM32 ST-LINK Utility加载
0 C) W2 u) J. g' e0 q$ [0 u
, q" X& y3 \1 e7 z1 u$ @
* N8 }# ?7 H2 o# q! X1 T- q, T2 T6 Q7 O( b
五、程序运行效果
/ v8 H4 j* G0 Z4 U" h8 A# K, X7 A 展示效果如下:
4 F" G% f5 D; `. ^( S0 w4 ?- Toggle_led2();//闪灯
% w3 D. C- B0 R: U+ A5 ~+ n8 m - set_led0_val(get_key0_val());//按键亮灯
6 D i$ ?& ~6 ? - HAL_Delay(100);
复制代码 ) x4 W% T9 C2 s) s
【1】闪灯6 X7 h- c5 ^( e+ V
q7 S Q" L) V# U8 r, z
_* ~; P2 C/ k
: Q8 e/ U* C* h4 `4 q" U 【2】按键亮灯+ X% D- H7 h" ?( d7 t5 t
2 p2 z, R) h/ @/ e2 h! n! v* Y
) Z$ O) E& N8 |
* Z# d4 X( a+ X, W2 T9 \0 s( v6 T3 s8 Y————————————————
" K' n x( L( o# d5 g3 @; H. v版权声明:py_free-物联智能
2 O% p6 k* n2 g! \; H如有侵权请联系删除
3 X. U2 `. d& c' _! M9 ]& A, \
0 t8 z4 m" I6 t: c6 }, I3 o9 F9 x
' b: X1 R/ v) a7 f) Y
- M" [# a6 b' @) g |