一、cubeIDE下载、安装
! k& y& K8 V, m9 I% y" | STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
! X) z, q( j, C5 d9 K2 M, T* f/ N$ Z( M
% n1 X/ ]: j1 p6 T. V$ g; w
! f0 Z# N2 @1 C( a5 S下载完stmcubeIDE后,双击安装包完成安装:- h7 _; }, f% _. U5 s7 [
9 z5 G5 q. E7 T, F, Q
- \) P# s$ w$ R3 r; s" B' C% r: j
8 d5 w/ i, t2 j; ]8 _安装完成后,去help->install new software配置安装汉化包
/ ^* n: H9 k' U1 B! t+ w
( a! q1 G2 _8 |; m! z0 I% J" U
# v$ P; D5 U% A1 m' ?& V/ Z, T9 A; I- {" s; N
选择简体中文完成在线安装
) s/ X& i& ^/ D$ g* G( d9 p- ?5 f# ~6 J
, d+ Q1 D. `9 |3 O+ a) T# |
, w8 b5 e* E) ^二、创建工程及配置芯片引脚
' n2 K b; t# M 汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx" H" ^" P# @# Q' Z' Q: `; u7 l# g1 W
/ I7 t& w/ S) g( b! Z
$ L. J p8 g' _+ U# s1 Q$ Y
( g& r" }/ _1 G7 a$ q( g* ?
点击下一步,输入工程名,选择工程路径,完成工程创建
2 D1 J' m% t' p5 o3 e9 O0 M9 F2 ~& Y& Z/ T) m+ y/ O8 t1 s* M
0 Y' ~! s u: Y6 d
9 P3 t9 {8 F! {2 w( { 工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口
+ E+ q$ {' F7 p8 T. K' M6 ]1 \+ i7 L4 S: Z% _
开启USB串口能力
$ W& d0 I" P6 b/ a$ |
- P* O/ M5 E$ K0 d6 P7 I
I9 n9 L$ J4 g" x5 G8 F! n, K3 v" }
本文仅开始外部高速时钟(HSE)
6 P! t1 v& {' ^: R$ z% `' G# j8 C( i( x! R
; g% o0 z; ?. `( K/ E
' ^' V5 r9 m$ S" w4 W
系统时钟频率直接拉满到80MHz
! U4 z- b7 y9 b, y3 r" x* Z C0 a l( X: J/ }
5 m9 n& k3 p- B& x3 E; I+ R
' I. t9 u4 Q4 h! ^! L/ ^& G- e
为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO0 ]# X, _2 o1 D [
2 P+ K. |& S4 a0 _6 q
( e2 K& N7 p8 S' N D" P, O- q# R) d9 w( }
工程管理,保持默认设置,$ Z" C% |* Z1 {/ j" b# V6 Y
% {+ Q/ _% U7 N: A/ ] F
2 K5 t z" G$ L- P2 t# m- h" `
: u! r4 z4 b" S
代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件
3 ]) s& K7 t5 ?; n+ {, d/ z7 Y* W# P' e9 I
, W1 j6 C% e, H/ N8 ^/ o
# Z u& f: V+ j5 I7 a
高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数7 u, @- R0 n5 f& r* q
, f* ?2 a( _, s; R
% J0 T" |1 D4 g" C& ~) Y. s" p( Z9 P) P5 O
点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成) G( @6 k! I4 a' ~& I8 |( M$ s% t
4 p! Q" N% k/ ^: A6 V9 ^* u
) K% l6 V: i# u0 z. n/ H! @, l
5 w/ s3 a6 e2 ~$ i4 G 代码生成后,GPIO接口映射信息配置在main.h中; W3 X( L! Z2 }3 S
+ Y4 ~: i, F: Y- @. \2 R6 t! d) h# y
1 Q0 z2 W! G3 A# q4 s, j0 ~4 \0 p5 u3 t" g
生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。; H: `. Z& a o! n6 I8 O
7 |+ q! p6 `. I, @$ r
# r/ m6 T0 a- u1 K. {7 o0 N
' B: I- j/ l' V. o. { L/ b5 X 先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
^, c2 B$ Y4 _8 c' T0 _& L( R% d5 J7 a! R& X, }+ ?8 u+ P
0 s: \# v! X! E9 r2 m三、编码及编译. t0 ?) H6 X( q
在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件: N# \. y2 I [5 H
/ c/ D) r$ \7 ^. B0 p
( {( q5 e- i/ {; o' c) {' ^. \4 t; M6 j& t( J" S+ M9 L8 F
key.h. {- ]6 Y* N1 b) ?" F& `
- /*
/ M2 n; q% b& ^* ~, ^2 S0 h - * key.h
" ^) y/ K4 R O% S6 v d - *
5 t6 x6 z! k0 `$ z% T - * Created on: Sep 29, 2022
$ s# k- R5 z; }' _& ~. j6 h6 z) h - * Author: py_hp( {: n& n. Z; n+ F4 I- i9 l
- */
( G- u) k( J8 a! P -
2 `3 T8 ~% S( k' [% [ - #ifndef KEY_H_
# }7 Z& M% [6 Y) `+ X! a4 }! k - #define KEY_H_/ v( m2 h0 U* |, Y
-
# s0 L! ?: L/ F1 L - #include "main.h". U1 K2 I8 A- |8 u
- #include "gpio.h"5 C8 Z- [! P. p& a& i: a4 p
-
5 _$ E, d/ d7 j. ?% @% Z- b - GPIO_PinState get_key0_val();
3 K4 M$ F+ C6 Y- O - GPIO_PinState get_key1_val();: j+ p8 R4 k4 S" C9 }, o" o: a: y3 H
- GPIO_PinState get_key2_val();( L: r, ]4 X9 @4 Z( g4 q b" `
- ' T0 A" O! Z' u( P6 P; n
- #endif /* KEY_H_ */
复制代码
% I- n) `" v. T _key.c$ H; e9 \& d% N5 ]9 [# f Y
- /*/ C x3 L+ j6 p, L
- * key.c) J Q+ \6 X: P) y6 i
- *" y& ^% ~' }! [$ l' }4 S+ k
- * Created on: Sep 29, 20227 q. K" j( m( D- E6 W" A# l
- * Author: py_hp. K5 J1 m9 k- K" u7 I+ J* a
- */6 v$ o/ X F9 i# Q8 p
- #include "key.h"
- t1 C: Y- {: W; i# } -
; g: D/ q" j$ D6 [. {$ c3 n - GPIO_PinState get_key0_val()
: t7 S/ y7 M h2 A, S - {7 a% i1 b8 m4 e4 P& P
- return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);; ~/ b' c' @: g2 I" M; L3 |" ~
- }; z- _( [) {! t( F, q+ y
- . I2 b$ @- _+ J) j5 S( C1 L
- GPIO_PinState get_key1_val()' G7 u: P) X$ w# x7 n
- {
, w/ a8 A1 M: V8 l& N6 y - return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
' P. ?4 F0 R$ [, p K: a' x - };( _3 ~' v0 M6 r ?8 r9 h% u
- ( h7 `0 b" B- }, i% G
- GPIO_PinState get_key2_val()
5 L; g, |) D) S" _- c, Q: F6 ]2 r - {
& _5 H/ }3 Y: Z( J' h, L$ }2 _, i) w - return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);5 \" V8 V" ^1 h( W7 {; X
- };
复制代码 # i+ l D- x2 N' r* z! i
- d) a" F: S4 s1 h
led.h
: u: j$ e( P. D4 I& n- /*
. V( }8 k7 Z E& H2 F - * led.h% c, J- E! G. N1 u4 H a
- *
' o# c" t3 I4 F( N8 m0 i+ H L8 b - * Created on: Sep 29, 2022
- Z" y% h6 ^5 L6 q7 [/ i5 W - * Author: py_hp
# g- u3 ?) y3 R) T1 c$ w) K - */
0 a7 ]) ~2 Q3 F0 V -
3 P A2 T" @9 k5 ]" U - #ifndef LED_H_2 I+ K; B, {8 ^( B; b. _ H
- #define LED_H_4 m8 b6 i) x: o, r
- #include "main.h"
( g( p/ v W) O' r1 }; E H& M: [ - #include "gpio.h"0 _" j1 k# O& J* B! K: f7 W
- 5 i) u5 J9 \, D7 a/ H5 A0 v
- void Toggle_led0();! B& M& ^( S/ f2 q
- void Toggle_led1();
" @, v4 Y: }! h! C - void Toggle_led2(); z; p! z# b0 p, _
- 1 b+ t% `, ]; W% \# F5 D
- void set_led0_val(GPIO_PinState PinState);8 c; a7 ]8 A2 n; K1 s+ \1 P
- void set_led1_val(GPIO_PinState PinState);
' ^8 s& Z* O" U - void set_led2_val(GPIO_PinState PinState);
' V0 @- ^6 H |3 H/ H8 i - . T2 J1 u3 |* q
- #endif /* LED_H_ */
复制代码
) C7 h; w6 x! ^; h) b- Eled.c O Y4 ?9 T. g# X( z1 G# z5 h* G
- /*
" |$ F% X/ C. X) ^ - * led.c
; O& _! j/ N* W: g) u - ** {4 z K2 R9 @0 z& i- n
- * Created on: Sep 29, 2022
7 v b- q3 r$ P7 F& M) d - * Author: py_hp5 q: @8 ]9 ^4 [* r) ^
- */! J4 V7 A' t U( k+ o& i
- #include "led.h"
( w: W/ j& n `0 d4 H, Y -
5 r( W* o/ Z4 r" F% {. [, I; o- _, d9 @4 p - void Toggle_led0()
, f& f" X- K: |, d5 e' e2 w - {
" @' R k6 {' c, e# i6 }" I - HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
9 Y, Y: f3 I+ j, S. t0 y - }
* ?0 _1 R- S5 h/ G/ k& E" k - ' _ _' h1 F) a5 f
- void Toggle_led1()) ?5 n" j* }" ^9 n1 Z
- {
7 ^: M2 z# C" S5 v3 L& N - HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);% r* w. [' U. y; S: K: m$ n; W' Q6 Z
- }
1 D3 \' d. u# i) }5 T! M5 T -
4 `% U: P$ g, c2 X6 a" D) G - void Toggle_led2()% @6 B# @# Z; D) M. `$ U
- {/ v* }" ]. w( ?3 Z
- HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);7 R( u: S i( X. v: W
- }4 v$ p/ h( z4 h+ R; p0 W1 ^, s6 S/ X
-
; W6 H, K5 p7 P9 E' b - void set_led0_val(GPIO_PinState PinState)
9 s& Z, ^ G, Z8 J5 P: e - {
! H# f0 c; g4 ? - HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);8 q$ d- ~& Z. u' h7 x& C: n1 Q
- };. p; n% e' ^7 |, D' d& P
- 8 c8 X L( j) P0 `- P1 H5 a* u9 O
- void set_led1_val(GPIO_PinState PinState)
; N7 C6 F" @& a4 G0 Z0 R8 {& k u - {+ U7 }- A: V7 t
- HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
: j: K _0 x; X4 u- t - };1 _/ ?, l( R" V- E. B
-
, e* j) C- s3 V/ q; ^# g9 b, B - void set_led2_val(GPIO_PinState PinState)1 l) M1 z1 n/ L' ^. h# K, U
- {
& K4 g' z/ P# { }+ F( S. r - HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);7 h' a: A3 V1 L' R& j
- };
复制代码
$ \# @& {# J# H, h 在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码- [! c. b' y# R0 p- m+ S+ _
: \/ e5 T# z( r+ L6 N 添加头文件
3 ?5 I* ?. p6 w5 [4 v" M
6 J2 {0 m M9 f. q. ^
% N. D% S3 W/ r7 r7 h$ j! A$ z. Y
. g) P$ [( q. n$ G+ @1 p7 c. I
添加函数调用实现,可自行斟酌调用5 u, I, j, J% |/ Q# k
9 m& l' _% b; B' y* ]
, i$ P% k2 y Z" y6 P4 X+ @. q, N: W+ M4 Z
右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持2 Y0 P1 d- e: g8 g- u+ P. I' c
3 I7 Y0 X, i' A
' @3 H: O& |5 t+ V; I2 U5 Z* {3 N ^7 _% a7 [' X
点击编译按钮完成编译& U3 ?, n: I3 Q
6 P# U0 f9 Z5 b( N
4 }8 g1 _* u. z: d* e* f$ g6 ^' P v" u
4 M# Y4 @# z% E- p' U' |7 P四、加载已编译程序到硬件及测试( r( M I/ H5 g' C; J0 {& f
点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。
" F6 N, d k8 u3 ?0 W J `! E* Y* n$ e. P( V8 i+ s1 P
- I4 w* J6 u, g* B; e( E1 v3 ?
2 A- h, |* D: P: w 点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,& s* x# Y: O+ a6 y' Z# \5 B& k7 Y
. r& y, \: r) W% a% k* r' a; Z
, [- P" }) W& R7 V) y/ h5 A, f
( |; s2 X; I1 h" K5 Y8 d0 q K5 h
P- {( Q8 q. s7 P$ | z
- s) B2 N" o4 c7 z/ N! R 将电脑与硬件用数据线连接,点击运行下载程序
; _8 A- P: S* K; j8 T4 f
' G2 {9 b r/ Q4 ?$ a* K
' R2 X- C7 i: D# u2 t4 n, V: s
' M, O6 r/ S: p 或者采用其他下载工具,如STM32 ST-LINK Utility加载
8 Q) A0 D4 b& x/ U7 r# E
; z# M+ M5 F, z) [
- b, w N- I$ r" @
$ |! }0 Z5 y! R3 c6 \
五、程序运行效果
; o& q+ i) F( N" N7 a 展示效果如下:( j- f+ \$ }; ~' s) B- Y
- Toggle_led2();//闪灯# E8 ^& x+ t5 u- |4 x4 d2 N
- set_led0_val(get_key0_val());//按键亮灯
5 E+ q3 t }) V$ R1 P - HAL_Delay(100);
复制代码
; f. |9 e8 D: v7 Q' [% E 【1】闪灯/ f% O4 [+ g. U+ _* \ P, V
, P( g3 K% ?, D- W& ~" T
) t, E8 b; j# V
+ @7 y. X; n& r
【2】按键亮灯
* }6 a6 |2 l P5 |3 R4 C5 d! g( i# E5 @, H" l/ O
, N6 b7 E8 r, _' F; f$ ]
' `! ]+ R" G* @( i+ j' W————————————————
9 t& i/ I3 @7 W0 f0 s3 U& Z; R版权声明:py_free-物联智能& E2 T6 U A) X _
如有侵权请联系删除
/ k( B5 }* _ C8 E/ o7 t4 m2 G: P. _
$ j7 f8 j- m% H! A: }
2 y5 a2 O2 F* Q8 i! ? |