一、cubeIDE下载、安装4 g+ q% C a, C5 N1 F, p( r
STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。$ B# q4 Q" p3 @
0 p& F3 Z7 X+ C" l3 ~. c/ b$ \
2 Z8 x! ]* y9 `4 v% [
1 r6 o# G# b2 n7 p3 n% Y% P* Y下载完stmcubeIDE后,双击安装包完成安装:
# }- r" x8 {$ f7 W5 Z% m* W, f7 C9 u9 V, Q* D
- Q! z7 B; b& w Z7 p1 w9 u! E/ f
! A* z/ O, v0 U% Z安装完成后,去help->install new software配置安装汉化包' A, d0 A4 O3 X, p: ~
; ?) Q( G+ C+ x1 z. s
; H q6 {9 v! J9 k. L
* e" \; ~7 I' ~$ d/ N7 q; \5 ]
选择简体中文完成在线安装2 p; o6 o' x! z% h; S
$ y7 w9 G" m$ U# ~6 X2 h$ Q
8 E8 F" c+ [2 _# E. T: g4 {0 \
% n) P( R4 [4 G! i& |! A二、创建工程及配置芯片引脚
% P( q7 f4 p9 W5 J+ H6 ` 汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
9 m+ h" ]- T9 l
/ ]& M5 E0 u# D! [" c1 I9 |, r2 V5 n/ d) h
. h9 k. C$ x+ T! Y0 @
+ \/ [- }5 f3 N R 点击下一步,输入工程名,选择工程路径,完成工程创建
) P3 }- r- w/ p R1 z* X' k7 h4 i) H" [8 t! F5 O8 D% F/ b
- K" `4 m4 z& b, y) j; @
' t- @9 j1 m; g) L 工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口; q; j) }- V7 F- e6 n! N1 B
' P/ M9 ?6 W+ _/ R- ~2 z. S
开启USB串口能力
4 B! f" y8 O) n8 V% |! S4 S1 g; x3 M( x6 P- r" \% Z
+ n# ^) j% d- R/ b8 q
* x- \ Z) a: o9 S 本文仅开始外部高速时钟(HSE)
9 X. N9 Z. K; i+ q0 d! ]; p2 _, Z, Y2 S& J: w& ^- z. F! ~
+ [* ~% ^6 p2 U- T X _; N
& T5 F- u1 D7 S7 O+ m( E& k/ c9 \ 系统时钟频率直接拉满到80MHz
1 p H6 v/ b" T* Z0 I" n% {, q" C( e3 m% R
0 ~0 x8 S s' r5 I N6 b- G
: q4 T+ `2 v" y8 ^5 q8 ?
为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO3 w' x9 k, L! k
* i" m. v! W; \) v; P
Z: Q$ O4 w7 M, o$ ?' ^
" Z& u5 q2 v* W$ w' u. m! e
工程管理,保持默认设置,
# d: @8 n$ R' e% B( A! Q2 f f: m% s' I+ {* |. C0 h
P) U3 m4 E$ N7 J9 n
( W$ \* p+ C5 d) h3 b
代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件8 G! h. `9 \! a
4 b% e, `6 O/ c/ T
1 R, }$ ^- t' `/ O
* S! o% N+ c& d# X0 R" J 高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数( a7 Z5 Z8 Q; q# i B: ]5 W5 j# \5 M
! z5 n( V& Y9 f4 K
+ D8 H6 W! A4 ?2 g" t( Q& u! I$ ~8 G |# }
点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成
! K0 M/ O; A" M) K- C) \4 P3 c( @( ~6 g1 K: M. l) a. b
* \! U2 k# C" H
- `/ q3 I/ p% |, B4 S0 I 代码生成后,GPIO接口映射信息配置在main.h中( m4 b1 B/ O0 r& U3 x" ~
: U* b) B, [5 B/ e4 X9 h) t
/ h9 r& q/ _5 Q" p! V
; V* J- N: M; T! r* c( w5 g 生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。: I9 o) J) B9 q, c6 N6 y' }. X
: M }3 A8 F& {5 u
2 c0 Z& K' n- r7 y
8 @4 X6 t& P, O0 I2 L 先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。% m* F8 k$ l5 J8 y2 W1 G; Q! ?
5 A$ l: ~) N+ A! M
) f r1 w6 _- ]三、编码及编译
- A1 U1 Q; x; t+ ^) F: G 在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件
! G) _* Z3 `# [
/ }- y# B- I( w, s
/ l( g* i0 Z+ c2 ]. v1 D
2 g, w- b2 a* ?4 i0 w key.h) s$ z! V3 Y' O# s( f
- /*0 P& r5 n" X+ k) r1 ?
- * key.h; g" P& b+ l7 V( R; g0 w' s# {
- *
+ n$ u+ Z5 q9 V, C$ _, W - * Created on: Sep 29, 2022
3 Z( F, e* {9 V4 n1 a% @/ P; z - * Author: py_hp2 C$ D! ?# t3 @% V& n
- */
" O3 S" e6 V4 }) r% j/ s - % a0 I( K. K8 q7 C9 C" E
- #ifndef KEY_H_& @6 k) f4 G( }6 X0 n- ^$ y1 G( [
- #define KEY_H_
! q9 U( }$ {1 J4 Z8 L3 X3 F" p. G -
) Z8 f+ Q4 p3 } a - #include "main.h" \. t$ a6 g) R* L' x, Z
- #include "gpio.h"
+ V2 t0 \: |# e6 U! d* C -
0 e g e. M- k I7 Q% U - GPIO_PinState get_key0_val();
% S1 t) L+ p: i' o, p4 L6 h - GPIO_PinState get_key1_val();
' ]0 J5 E8 @) v# s$ H - GPIO_PinState get_key2_val();7 N# }6 x: D! p2 q
-
, J, T8 V) I4 h6 h+ ]5 } - #endif /* KEY_H_ */
复制代码
5 A9 D" B4 y3 lkey.c
# O0 G9 ~+ Y- Q/ e5 E( H8 U- /*
1 y: n/ k: e# |, i - * key.c
: z8 t. F. W. `, U; Q3 z+ _! @: F - *7 d0 s: `6 K& I/ s( [6 Y3 W7 k
- * Created on: Sep 29, 2022
( C/ | R, }3 H$ a: S7 K( c+ u. s - * Author: py_hp. u# F4 k. G/ [8 F# x, z
- */
" q( v) p% U4 d, P! K- q - #include "key.h"0 D8 v. i* e7 C) [
- % o$ { Y% V; o: \- v5 `
- GPIO_PinState get_key0_val()
0 V! h2 U% G' ~- S& T$ x8 s" _ - {! l3 ?3 j2 w, Z+ `6 H) R7 `( E
- return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);, n' {& H5 v& z+ h& Y
- };7 L+ k- V: H' C6 D$ L0 ?
-
3 `3 y6 x9 S8 y* \4 D- X - GPIO_PinState get_key1_val()
8 m/ Q4 Y7 \% p* }/ A$ w# e( C - {
. k4 A$ e- V" `3 W R - return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
1 P6 N% b- Y7 M - };% x/ j3 R H) ^3 c7 N
- " f6 ?0 z( f# {& N7 v
- GPIO_PinState get_key2_val(). W2 L3 f# }4 G! s
- {
# ` c; R5 f( v8 W, _1 k. H - return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);4 I, f' g! g( |7 j, X H: {
- };
复制代码
4 m" d4 x; B# U: C& u
% d/ z+ A3 @. ^+ `( @9 f9 |0 [led.h
/ _+ r U- T' q& f, O! P- /*! f$ ~( {9 J4 ^
- * led.h) i& u! T5 T' i8 E. s$ ~' I) I
- *
% k! r3 J& n l2 }! V' | - * Created on: Sep 29, 2022
' X! A2 Q( U* \6 ?2 @' J# ^ - * Author: py_hp
" B# g r' g0 G- i: O: Q' S. d - */
3 m2 ]* g t0 U3 f - 4 Q) B7 ?& Z% R$ s
- #ifndef LED_H_
K9 F) f+ d3 ~( Q - #define LED_H_1 [; H9 K# l, L% W% O
- #include "main.h"
0 X* s: C, V, C {0 M8 y4 k# F - #include "gpio.h"
l3 c/ o* J! \' }# m - + d) J8 z9 X8 Q* Q9 b& j. j
- void Toggle_led0();7 I2 `% e. z, T
- void Toggle_led1();7 F: k' p$ S* Q2 F& B
- void Toggle_led2();7 r3 Z4 K0 G9 j7 K. y9 U
- & O9 Z. |( c! A* |: g8 W% g3 a
- void set_led0_val(GPIO_PinState PinState);4 K% H5 W, V# m, R! J
- void set_led1_val(GPIO_PinState PinState);
5 _; D( H4 j2 P( l+ k4 p5 f - void set_led2_val(GPIO_PinState PinState);5 h1 K. X* J. O; U3 M6 W+ u) R
- ( B* }/ H+ H4 @
- #endif /* LED_H_ */
复制代码 % A, J! U1 \2 ]; ]; E
led.c* O1 r8 W$ r; @2 e* \" _& Y/ u
- /*9 ~2 |0 ?* b' m, E0 M: W3 i
- * led.c3 _+ O; ?( |$ b. B# \) B2 D
- *
6 J" F* N" _5 K# h2 i: U. Y, u - * Created on: Sep 29, 20227 T; X5 Z2 i7 s9 ?
- * Author: py_hp: O! [% @1 F; z
- */
+ j: s. @7 A3 C. P/ I - #include "led.h"
( ?; A5 S4 o6 l3 e4 q* o e' s4 f -
! ?( S$ p( g/ q2 @5 } - void Toggle_led0()
, F6 _( V1 Y9 N5 p0 _% a% m - {5 I% j8 X5 [8 X& [$ D/ m
- HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);. y, D" Y5 r- S
- }
' y. u- r" f' L" q) N) H$ f4 H -
9 _* g6 ?# @7 [8 ]2 X! t* N( i4 H. Y - void Toggle_led1() e6 Y/ Y" |( D7 |/ [
- {
2 `( k8 r! I# P( ?! U7 B g - HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
: c0 k7 D' h( s! { - }
8 [1 d n6 V1 l8 g0 m1 m -
. h$ }8 S. }9 ~/ H U6 { - void Toggle_led2()+ q6 n( N+ W L6 q3 F+ J4 A
- {9 v- F9 Q5 O9 i$ @
- HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);6 S4 v3 q% _6 _/ c+ u# c% g$ y
- }
3 Z) k& C7 `6 V5 ~ - , J4 p" K G! A. g
- void set_led0_val(GPIO_PinState PinState)
3 y) S; V z+ y - {
7 N% q9 a9 U8 ?% M - HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);2 v3 X( R4 x8 P' |
- };0 |% W, H9 Z. i" d
- - d# E9 ]6 b( V8 a
- void set_led1_val(GPIO_PinState PinState)
@8 |6 I3 _% [; ^( I% J - {; z; o! f, V) A8 u2 Y6 p& o4 l
- HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);" ^! a4 e# A8 a( _, x1 m0 k6 F
- };
, b% M* O7 Z4 o -
9 c* ?1 M4 m4 Y2 S; [6 m% e - void set_led2_val(GPIO_PinState PinState)
$ P: { O: v0 R4 R; P3 B% S - {
: x( y3 H) D5 N. Z! ~ - HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);) C f9 b5 V* F; ~2 T3 N" ^3 }" r; o
- };
复制代码
6 |7 ~- T/ \) Y5 S. F1 g 在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码
: x3 L$ m- B( F* [" j7 C) w7 a& i' o+ S: Q1 Y4 j V
添加头文件5 a" T) q$ G+ T b
5 U) i3 {1 w9 C
& K, ]+ I; g" |% r5 T- W: c; f4 K0 p# J4 |# d2 [
添加函数调用实现,可自行斟酌调用
6 N1 R( Y7 G$ r0 ^6 `! W$ k) s. E& Z( X5 A m; s& s
" f7 Z* l) Z3 y8 p" N) A/ |# F, I: v8 k3 R
右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持: P! r5 X/ I7 c
( b* b, v( y- ~2 N
: e; c' }8 ^/ L( Z" k7 H% I/ h5 T8 C( S& u
点击编译按钮完成编译6 N9 O+ t, J7 B. k+ P' U
( g) K# n/ M; ?8 R' P
- O' }$ _# C& K* i: z- y
- e" X( t: P, Q! G+ X' ~5 [) f; h3 H& _
四、加载已编译程序到硬件及测试
8 F! I+ U( k$ m+ z5 a" N 点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。
0 p0 z! r! R7 x' }
( l. H; @) t8 |/ v1 p
* ]# C+ c! k6 H/ J/ f: F# Z6 }
9 o0 z+ H3 l' ]! R) w 点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,8 G: ?5 [0 s% U m0 d
* p+ W i! }, i' H$ W/ K
8 d4 f) e: U$ T# v
! C! [" n. Q/ e/ F9 H- q( e# D5 U
. G! C ]/ c1 A+ w' R. K( a& d8 N9 T$ C3 v2 U
将电脑与硬件用数据线连接,点击运行下载程序
6 f6 y% d: s$ t( v. N+ H/ M7 k/ z8 f1 b" W1 }
+ l5 t+ }0 g9 P0 v, ^* [' l" `& D
3 L3 b3 E3 m$ u# B# ~
或者采用其他下载工具,如STM32 ST-LINK Utility加载
% C( J- P" i( @5 O% N0 ?# z8 U. Q/ v. ?4 E d) u- U
. ^: C* W8 b- J i" k2 q" d# K
0 X# m3 M/ K3 V) F" J2 d7 r
五、程序运行效果
% t6 n. U1 Q: s& r* U 展示效果如下:5 v- B3 ?) ^7 ~1 r _
- Toggle_led2();//闪灯/ o/ E& g) _. t$ Y
- set_led0_val(get_key0_val());//按键亮灯
7 o) O4 [2 J; j, N, Y& b/ g - HAL_Delay(100);
复制代码
3 f, j/ f6 @0 [7 P% w 【1】闪灯
9 Q: h& T7 M! U! [7 J0 s, V* }# q# e( t0 q
! K( f- s5 O# ^5 C! z7 \# l+ M/ S
9 Y0 f3 H, x5 `, O& D( Y
【2】按键亮灯 y3 c; E3 O# F. O/ ?/ i% `# Y
8 P2 i* q; G. F& ]- e# h
: g3 i& N" L; ^ U) w' x; c: n
) [+ n* x5 l+ Z1 Z- x, X: t4 U
————————————————: c; X7 s# a/ \& T0 V }1 Y
版权声明:py_free-物联智能
; v3 B2 l5 e8 ~, B7 y( T4 D如有侵权请联系删除
6 B, M# F- D. c- L1 z, n4 u* A. b! Z% w( r" L4 w7 ^
" l* k- z: B/ @8 a! E: @: S
- b! y) {, y) b+ _+ y |