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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、cubeIDE下载、安装
, O" P& R7 D. J; R- N' F: m        STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。% z# G/ _5 t/ j7 K- {- g
; u4 [6 I* f8 n0 N5 X* M5 v/ C
c4f0ba8449fa419ea0bf844015a11677.png   + I0 D* j7 `: o0 T

2 ]# r8 Y) x  d% T. l下载完stmcubeIDE后,双击安装包完成安装:
6 O" i5 T, K! G% O! P" d% P9 j# `' t/ w) b2 _/ o) k- W
4dd81e8f69bf405aa6bb393b1233136b.png
$ y' h! _* t0 E) E" S2 D& J

" C' W2 Q3 H/ F3 q安装完成后,去help->install new software配置安装汉化包" L) V. M# l. _8 [  Z& r8 {) ]; \

6 p, b6 `: r9 @
fd2da482167648da9b61cafc5a435de7.png
7 L2 A3 l0 g& a5 n, q. C: U% h6 `" P1 Q
选择简体中文完成在线安装
/ i9 Q( J: y: O( T5 i; Y. ?0 J0 q8 X: O. {
f5e4f5a7fa4444ec8300f4fdec9c5a67.png , Y1 R! ?2 M2 z. A% @1 u

7 i9 U$ ^9 l0 I) `1 q二、创建工程及配置芯片引脚4 _/ a2 i  a3 M  x$ r
        汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
! a! _: N' K0 S7 F) j& t4 u
7 ]+ P5 u* D' W1 i4 C3 U& E  x
31f75739597244c9a4c28b7571347b04.png 8 H5 Q+ k% ~6 b% K+ E* B# h4 u
1 s2 T* o( ]3 y, I# p& h- p! |3 k
点击下一步,输入工程名,选择工程路径,完成工程创建- R( ~* v) T, t) k( @. k! f; S

6 B/ v0 o6 q$ q  o% y5 T, J2 C8 e
5516bbb2d9434da9be5c855494ba70f2.png : |+ G$ r7 ~: X  o
# s' Q* o- E! k6 p4 }9 x8 K
         工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口/ X8 s2 Q5 x) ]8 f$ j5 H2 |

8 c$ W  L0 ]8 a9 j9 A4 W        开启USB串口能力" a( j8 R1 k  M* x/ s

0 g% T7 G- T8 z3 `9 B! @
6f0570e5f95b420fa865330947d8c708.png & u* w. ^+ n1 q* o& K3 t
, F; k- F  ?; u4 I1 [
         本文仅开始外部高速时钟(HSE)$ R, D9 I* {' J' K" [3 |) V
6 l! r% f" g* y8 B% h4 O8 S4 }8 W
73d612e17d7a4f0898a188f8d793ad4c.png
& d0 ?% ^9 n# R/ d
, m- L. J5 |* T7 e8 _9 f9 l+ p         系统时钟频率直接拉满到80MHz
7 J) C9 [$ Z; G$ n
, Y; [/ e4 s+ \/ H
563c5200977f40798d2c981301d8a3ec.png & z6 k) E  c7 [$ l% p: I

& K/ Z7 [) K  `         为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO4 \4 ]# H% J, v
: i  L( B; N3 S) `$ U9 F
11d7ba975a014eb7a563d695571eae54.png
5 z  N) n  A) K6 Q( p4 J$ V/ t6 W) S% D. t0 T( s
         工程管理,保持默认设置,  {- J9 P! q8 e  C7 O
- p* u4 `" [9 ~1 z/ [
562df507c9874f41a35825e23699ffbc.png 0 l0 ?# q% F7 w7 h; e2 y; f
9 z# U6 S; a/ C0 Q- L
         代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件
3 @7 X, d' x* ?4 f( `: }) \& O+ Q. a' M( o: T& b  C$ e
3103dc753c66489cb9be69e7bb5d2fd4.png
3 V1 y# x- H+ c* ?7 M3 [7 u
% w* O( z! A9 b6 n         高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数6 q3 I9 c" t0 j1 K2 x5 C: U
  d8 I" e5 p" i* e  F1 t; R8 g
1bb8d8f7d59a4c959f410425ec916bd7.png
+ [8 G1 N0 O9 S  I6 R

2 p" ~/ E5 |2 `: a         点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成
- o; J* _5 x& E6 @6 e, O& D$ o# d% q1 o' N3 ~. x7 o' V* f
6f3a90fcb455448b91429df83dbb01aa.png
$ e/ Q7 h! a% R' c/ J- R8 ~: ^" f
1 }) i% w  R4 _9 Y: T 代码生成后,GPIO接口映射信息配置在main.h中
- ]* S! b6 Y' \- C  }* z
$ o! d' H2 ?( K" k# E+ o% `" b
45238402b5194957a52cb9eccafab3cd.png " O" T8 ^6 L: Q/ {

' s$ E6 V. ~2 P  K" x% N# \: J         生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。
6 d* x9 y! Y. S1 V' J9 Z+ o
$ p# ^8 R2 c. c! W
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png * ?3 P. K! l, `% W

% {2 \- V# d# E5 y        先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
( p; T8 a0 h( Q3 I) ?3 i; G  a9 g

1 C' G. o; v+ `+ J3 Q/ b) [' X三、编码及编译# _) c, i8 r( p: c) R, Q# {9 D
        在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件
7 s* h' ?& y* K$ }) I* M1 ?6 U+ c, J6 c8 G% y" K' X3 U* `
79db70cd289b491690acb7ed03902d95.png 6 a: d- y. U( d" ?: J0 M" D

) o$ j; }) Y4 U7 C" m2 A9 t7 {         key.h
5 z: {' E: d3 B  ?; e
  1. /*; a9 k5 L- Q8 [- X" k" b
  2. * key.h
    / Z, N( |8 g1 @3 }" P  s% j
  3. *
    % \0 `6 m# F. u8 {' c2 T
  4. *  Created on: Sep 29, 20223 j* _# |! I0 k- `# R) c) r/ [
  5. *      Author: py_hp9 B3 ?9 E, h9 B0 `2 C0 ^& N  z
  6. */0 Q( T2 o6 a# |7 L7 Q
  7. 7 h' \( @+ F( t3 D
  8. #ifndef KEY_H_
    ' ?* M" R3 k" R! j* |5 N
  9. #define KEY_H_" |& k! Z; P+ @8 p  V5 S
  10. . [! M' _& w" P8 A) Y' q# G4 b
  11. #include "main.h"
    1 x1 ~; m4 S6 Y- }: M/ H
  12. #include "gpio.h"- ^6 U1 H5 ~; |6 t0 p7 x
  13. ! l! `* [" N/ v8 C6 F
  14. GPIO_PinState get_key0_val();
    # k$ A2 C/ F7 U; f: s
  15. GPIO_PinState get_key1_val();' T6 S# p! E; W9 m1 A: P
  16. GPIO_PinState get_key2_val();
    ) ~/ h9 D, T+ |
  17. 2 M3 X7 R9 r6 t
  18. #endif /* KEY_H_ */
复制代码
; l6 x4 t' T* k' G* D9 O5 w5 _; s; t
key.c
6 {% y! ?" [- E% N$ P6 C
  1. /*
    . K1 J  O- K8 @) }( x8 `& ?7 j2 r
  2. * key.c) f7 s6 M' T% @$ K( X: L3 r
  3. *" P  u. L3 S, ?  W
  4. *  Created on: Sep 29, 2022
    . A+ F* A$ u8 b5 f& ^
  5. *      Author: py_hp
    9 b6 f. n1 Q; F" m1 s2 h
  6. */1 o' j/ f8 R. X( ]8 j& O, b) B- ^9 C
  7. #include "key.h"
    3 d* }$ E7 |) P3 g8 T

  8. * }2 }' T% l( s
  9. GPIO_PinState get_key0_val()
    7 ?3 V4 |- L$ {2 B
  10. {/ F' T, c7 {% q$ Z
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);
    ) M2 \8 T$ \% m# P: A7 _
  12. };: [2 Q+ b+ q" B
  13. 7 _/ Z6 g. x9 M  z. v& B0 w
  14. GPIO_PinState get_key1_val()  s$ H- Y$ e- b& R8 ~
  15. {
    6 _6 j, W* b1 Q: h0 I! T
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);# p& V6 {9 P  V& S
  17. };
    # X3 s1 `2 W( h0 P/ F& x' Y) w
  18. ; ?6 u' ^7 q% f4 z- G4 S
  19. GPIO_PinState get_key2_val()) }* Y" w9 s- |+ C; S. m1 {
  20. {, ^) }" }" E6 G
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);/ g1 d. I# _! E2 H1 F- I
  22. };
复制代码

; [) J$ i1 [/ O

, M! H9 i% j  cled.h% G3 [  C1 ]. J8 W0 w3 s2 l
  1. /*+ M" h+ D+ Z* o
  2. * led.h  W5 r. S4 A* z
  3. *
    # b2 u2 V( O+ x5 D& r2 Q. ~
  4. *  Created on: Sep 29, 2022
    # G; Y4 O' m  f7 A: f7 i
  5. *      Author: py_hp
    / ?8 _$ G% `. X( B% I6 n/ R
  6. */: q1 q" w! X: O0 F4 q7 l: e; [. Y

  7. $ M* y! M3 J9 r. E" L$ @/ R' ~  d3 d
  8. #ifndef LED_H_
    / D0 j, I6 K* L( B
  9. #define LED_H_
    / a  f) W& o9 H1 g. d+ W( a
  10. #include "main.h"" c3 f. w, E+ B
  11. #include "gpio.h"2 G1 }9 g7 S1 R9 z" C+ P
  12. $ t6 O) _9 ~' P
  13. void Toggle_led0();0 W4 ^3 H) u8 M) p! F. b% }
  14. void Toggle_led1();( S7 {: V" ?3 {' u
  15. void Toggle_led2();" K# a( `7 [" [8 N
  16. ; }" F6 s9 Q3 {8 ~! A. l1 t7 H
  17. void set_led0_val(GPIO_PinState PinState);
    0 u* D4 F. r! s; w% D5 ~" K7 z
  18. void set_led1_val(GPIO_PinState PinState);- G. g! t6 U/ B  D7 `
  19. void set_led2_val(GPIO_PinState PinState);/ ]$ w0 ~# C; Z+ a8 i* }! b

  20. 0 p. a6 n. X+ S' `3 ?5 B8 `
  21. #endif /* LED_H_ */
复制代码

% X1 u  w; d" y2 Wled.c
) W' Q% H4 V, x
  1. /*7 t0 r2 Y) _* U
  2. * led.c: \6 z& ~) K6 P5 y$ G' a
  3. *7 \8 {7 z* _- R9 Z* }
  4. *  Created on: Sep 29, 2022; C; v# L3 U! d; N3 M& y) i& F
  5. *      Author: py_hp# o6 g4 ^0 T& W& _9 t7 P
  6. */
    ( f: P$ F" q; H; r! \8 _
  7. #include "led.h"
    ) S1 [, v# O3 [, Q5 M( y/ h
  8. 5 w" p* n% L& K/ v* r
  9. void Toggle_led0()' j4 q! f" C2 G; C& g5 ]! n; {
  10. {2 v$ x0 J7 n/ U6 s# d. `
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);4 n' l+ `# b& @  V2 q
  12. }
    + |: ]0 K$ d. _

  13. 4 |7 n* E+ `) M/ a$ K
  14. void Toggle_led1()2 S5 [/ C6 o( h
  15. {
    4 i. \* u1 [$ [4 o2 C6 A
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    1 T, Q, b: t9 ~
  17. }; C" I3 A" @0 v6 J* R6 q3 E! W

  18. 7 s: n6 u  Z; |) w' y% t% b/ @
  19. void Toggle_led2()
    . S" ^' t+ f) h: M" s  Q
  20. {+ H6 c1 G2 l0 H# i# W# }1 n
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    3 `. {8 f7 _4 W  x" {" z3 W* }
  22. }. ]! P0 n: M" R! x% O

  23. % j5 n6 Y/ b  p# a
  24. void set_led0_val(GPIO_PinState PinState)) n1 c$ C+ ?! h6 M! u3 h
  25. {
    , @% p. c$ B! r! O. B) _
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);
    - t) u6 G' F9 Q0 ^0 D6 L
  27. };- c: M/ @- x$ [; K2 ^* o; A
  28. 4 G0 N: c4 V4 m5 d
  29. void set_led1_val(GPIO_PinState PinState)! R" o, W9 s4 ^. x- Q7 P0 w
  30. {
    + F9 E! D9 E) Z# Q. R( X8 K
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
    ! v  B8 V- y, U
  32. };
    ( J( \2 W1 f# e
  33. $ n0 R4 L/ R4 \$ C
  34. void set_led2_val(GPIO_PinState PinState)
    ' ]/ J' Z) J/ j1 d" K) C
  35. {
    : T0 N% L2 Q2 c1 t3 x' z2 [
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);
    # s) P. v+ ?0 k1 j! I2 {9 p9 n& V
  37. };
复制代码

. D  Q, v! g( `: ?7 V7 z        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码  U# H2 p+ e; O0 j& Z
# q$ m- e2 N1 G0 v( i
        添加头文件- H+ u" H7 j- z! s" D% W2 M6 u
# q/ Y/ e: G1 g0 b8 q
8761282e3c5a47228b95dfc8bb19e60b.png
5 v2 ?1 [% Y6 o% D% h
8 A7 w8 U( d. \# |8 @! C0 }* K' e         添加函数调用实现,可自行斟酌调用1 l$ r2 \% P& {
6 A0 r' B" f! u8 r
ec76797598bf425ebdccd8c6eefe3cd6.png 9 v4 N2 V+ V" n: n+ \2 W+ @

* g5 }* e* k( K9 a/ L6 o          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持# K" e% S+ ^) Q" X

/ Y. {/ M% B5 s
37fc1ae9d2a74b60ad7a608342cf7195.png " S: G& T- k7 K# R* t7 A
  V: P/ _% s# V$ \
         点击编译按钮完成编译
( A3 {: m( L1 c$ q) q  V  R5 X$ o- W2 U- _. G# \" \
ef6f05b27c524b0096f4f66378b2a963.png
0 D* J* P% @; K$ V8 D* d  _5 `1 q5 r2 A. S# Q! k% M
/ I2 W" S" C: e. ~: v" \; V, _
四、加载已编译程序到硬件及测试
& U" y: u$ Q  l& Y' g4 \        点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。% Q- v+ ~8 @( M+ R6 j# ?! g

  R( e% F) G' t
03d2f645130642a888a7d5e9acec7c91.png 2 E& r! T) \) ^) a4 c4 ^

% L& z5 F  {( M- x/ ~6 l        点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,
# u# F! |$ L: z8 U3 ?7 w3 V  b& ~9 g! U# K( y3 v! i
ea188220de4d4ed29e1951d485731ea9.png
6 @2 _2 A; V% ?- [5 u
, _$ V, Q5 B$ Q0 V. _; Q
5a25da299d8e4c92826f620cf30bafe0.png ; q) R9 j) ?8 P0 G1 e( f
! q2 x- I& F' M! l4 D+ f
        将电脑与硬件用数据线连接,点击运行下载程序
$ ~7 E9 w6 A7 {; k) X. L& S7 x4 r# _! e
4ce304e2ee5f469ca23b922e33ebd259.png
; `, H# f5 W. v3 {( M6 h0 E9 w9 _3 @' \& u" B+ [! V6 w
         或者采用其他下载工具,如STM32 ST-LINK Utility加载1 b* h% e+ d- a+ U) g
! A% t7 S# ?; |5 W2 i# K
8e6b4813a59849e6937a4b00119d0e11.png ! l* s$ `! ^( D! W! @$ E

3 q3 Z2 W% b6 G2 Z( t, `- U五、程序运行效果
$ o1 K' J- O( w        展示效果如下:3 D' Y0 a; K* s3 V& H- x2 \7 o9 \
  1.    Toggle_led2();//闪灯
    ) C2 S3 Y" \9 z# y$ l3 I1 P# T- M
  2.           set_led0_val(get_key0_val());//按键亮灯
    + N2 f) i4 t$ U. y
  3.           HAL_Delay(100);
复制代码

) f0 O0 b/ r' _. A! Y        【1】闪灯9 `: R4 S- ?4 V  L) }* D

: t0 \9 B2 n* u1 l% h
23e5ea2f47a6412aa7db675750266d84.png 4 y# r: E1 Y" l; O& T; C

% Z/ D0 f6 R! V( S. f/ V- o! o         【2】按键亮灯) x" r' F. @5 n6 i0 q2 `7 r7 z+ q
7 z3 Y9 H  M, J& e  r* A  K2 H6 w
2efd57ebd5f9409f8c7630dfe3b75e91.png - L" g4 P- ~0 j" g: Q3 H
0 s, G$ F& u) `$ V( ?2 p( J4 n
————————————————
( v& l5 q3 l* w# J9 X# o" r) j3 K" }, ]版权声明:py_free-物联智能
. S8 T. d9 T% k! S' ~如有侵权请联系删除  s* m: q8 U; L$ \, U
3 S' a9 k: b  q

% D, a, y; t* k! r4 I2 e, i! M. K. `% }
收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

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