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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、cubeIDE下载、安装
' F  \; w4 s+ r, E. l8 y        STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
) u! L3 P/ k& F0 I$ k
3 T$ z* w+ N. Y4 M" N; R4 k
c4f0ba8449fa419ea0bf844015a11677.png   
7 N/ z+ L  ?+ t; Q( H! x- @& [# Q; A  X; h9 ~& ]8 Z
下载完stmcubeIDE后,双击安装包完成安装:. s* F" E, I8 d8 G" D* n

2 ^* b: [7 a0 t& k+ o/ X
4dd81e8f69bf405aa6bb393b1233136b.png
- u( ~8 Y8 F# c: k
$ O. Z/ e6 ~; t2 z3 i  L; i
安装完成后,去help->install new software配置安装汉化包
2 X  Y+ T5 ?% v& Z9 j. f+ f6 @; G; g2 S: B; J+ Y
fd2da482167648da9b61cafc5a435de7.png 6 ]/ [6 J; h' L+ F

) m  X( y* Y( t9 \+ }0 v
选择简体中文完成在线安装6 Q2 d. m' z9 b
9 ~4 p+ C) y- r: O$ b4 p- `
f5e4f5a7fa4444ec8300f4fdec9c5a67.png
) y& I) W- g; v  H& Z. k" E1 s! \8 i  K' D4 z5 X
二、创建工程及配置芯片引脚
) ?; D4 K- z8 ~+ @6 y        汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx2 [- G; C2 c) O1 E% J$ c

$ N5 E) r- X9 g: W! K- S
31f75739597244c9a4c28b7571347b04.png - L$ }* v" I; W& C" W
% N0 W8 v$ h/ B* E' u, S
点击下一步,输入工程名,选择工程路径,完成工程创建
+ _+ j! \) J/ F- j
" O& |# B7 H" Y" u' n
5516bbb2d9434da9be5c855494ba70f2.png # E; _  O0 d) F+ z) }2 H4 ~( `

. _- u/ @6 T: r- e# U         工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口
, U6 _7 O$ i0 G5 p
8 t. s2 M) z2 @( t        开启USB串口能力
( A! h  `9 r9 Z* S, y. A+ O8 ]8 b5 G8 t+ q
6f0570e5f95b420fa865330947d8c708.png # q; L4 M/ c5 f, S# |0 h) j" v
: g' h: Q1 t' G8 b
         本文仅开始外部高速时钟(HSE)
4 L' G* m  Y8 b( w3 ?/ \! n9 I# T2 ^/ w+ m2 @' p
73d612e17d7a4f0898a188f8d793ad4c.png
) K* S0 \$ {2 r( @9 s4 `# N. [$ a% S, o1 N" c: m* F, o
         系统时钟频率直接拉满到80MHz/ v: m2 p: {' U! L6 O( x

" `) l3 @* Z3 l
563c5200977f40798d2c981301d8a3ec.png - u7 n9 X1 ^& G; ]$ p  a
( J3 B" j2 g5 J( n, ^
         为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO
( t; w% Y1 G7 }4 @4 Q  Z4 y' B, e; i+ {  R3 _
11d7ba975a014eb7a563d695571eae54.png
+ [; t* J0 C0 i2 v- a/ z2 l3 z- j8 j+ @/ G9 }  G6 m* l% P0 [
         工程管理,保持默认设置,: z3 f5 `/ |8 p1 K5 ~

1 U. d: h* A& d) R
562df507c9874f41a35825e23699ffbc.png
' B* ]1 G6 g7 C! l# n' P( C
& T% y2 e/ @+ a4 M6 {         代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件! ~  E" I2 W2 l# L" F6 o
5 o, q5 ]7 T* H7 L2 T
3103dc753c66489cb9be69e7bb5d2fd4.png
: c5 q/ {; o% \$ b# f
/ p. ?5 _& H0 f& z- P1 U         高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数2 V6 u7 [+ s  l! n3 L' C. U7 F

, P7 e5 M8 B- M9 m* }3 }) D
1bb8d8f7d59a4c959f410425ec916bd7.png - Y4 X- @- P0 L! Y0 W( q1 c

1 e! P& z) v& ^9 d# f  z         点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成: j$ @$ Y; h* n- P2 m

9 A2 L0 o8 ?: B/ S. U' l
6f3a90fcb455448b91429df83dbb01aa.png
# O& W+ m  Q! _+ `9 f. Y
/ R# n$ }4 F) \% C* X0 Y 代码生成后,GPIO接口映射信息配置在main.h中0 _8 f6 M3 F6 f7 _

7 H" `0 Z( R8 a0 m5 @% t
45238402b5194957a52cb9eccafab3cd.png 2 p+ K2 X: Q  `* A0 ?0 L

- S. v9 F: O& Q1 ]' J         生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。
* n# w  k9 ?0 o* a3 v7 L" j9 }6 @# W/ Y$ X
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png 6 k  S. e1 y6 J

. E6 p3 |. x7 O; n2 h! Y3 E        先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。8 E6 D/ G) m# |( b$ T( L

4 k% x5 E: H1 o1 a6 n8 M3 B
( w4 C# v0 w$ X+ s- [% p
三、编码及编译
! s  w" s. n8 v+ S$ h$ m0 I) x" s        在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件1 N# C; [! {2 S5 l( g' b! y5 _# X

. ?# r, d( |% v% ^% k" ~8 ^
79db70cd289b491690acb7ed03902d95.png
, `3 U# x0 Q/ X( S/ H, K
& a; p* m  f! ]9 P, e9 e, A$ U3 Z$ J         key.h7 |7 Y- x& x9 e" A
  1. /*
    8 ~- K' z) i6 e! B. J0 x8 A
  2. * key.h
    8 S1 V- e4 S- C* P/ H1 k
  3. *3 @, K( }* X# p1 H7 W# K
  4. *  Created on: Sep 29, 2022
    * f# R! t1 e* I0 H7 g' F' a/ S( c, f, A
  5. *      Author: py_hp
    7 C% k( g  x3 [8 Z0 ~
  6. */
    ! _. V4 \6 D4 L# ?% d

  7. 9 j; y6 m  F* c" e: ~9 j8 `0 |
  8. #ifndef KEY_H_
      S: a' @5 U7 |/ }0 ]
  9. #define KEY_H_$ m0 b& U1 g5 T% t1 S* C4 v6 q$ @
  10. 6 ^: o3 X& U  Z/ T+ C0 j) F
  11. #include "main.h"- M6 v4 I4 }6 G: S
  12. #include "gpio.h"
    # s* T- L" X  A7 s' C2 H- \& i

  13. ( f: r8 e( i/ u8 k1 S8 q9 N. a
  14. GPIO_PinState get_key0_val();0 \3 `( m$ c; m- w- l9 w. z
  15. GPIO_PinState get_key1_val();
    # ?: p* _6 |% B# _
  16. GPIO_PinState get_key2_val();
    $ k, l: f# j3 D( }6 F$ v' X0 j

  17. % n7 v# ?3 v6 l4 J6 ~/ L* z
  18. #endif /* KEY_H_ */
复制代码

6 A2 }. q) t' ~6 F) K% [1 mkey.c
) }' v$ ?5 Q' s) V7 o9 P
  1. /*) H+ A# F: P% d# X( a
  2. * key.c
    ; c$ @' @3 F+ k9 K% v! l
  3. *
    & `8 N, i" n3 K& v$ f  m+ t# I
  4. *  Created on: Sep 29, 2022. |& A  @9 z" g% U
  5. *      Author: py_hp; C8 C$ h* \% y- n: F; z' O
  6. */# g2 S  b, G) Y6 J6 s+ |
  7. #include "key.h"
      y, L" L# ~  D4 s
  8. , l2 v1 x- b0 g' u  t! i; g  u  p
  9. GPIO_PinState get_key0_val(). t  E2 T! N+ n- u1 T5 g
  10. {
    - l5 U$ \$ ]/ f' ?" ?  `% G" k
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);
    ( K; \1 U3 D' [" B# s4 {, Q
  12. };: S  @1 d5 ^9 v8 \/ D" D* \+ \
  13. * S2 \7 f& c' ]
  14. GPIO_PinState get_key1_val()
    $ x! x3 _9 h4 T; @- }
  15. {
    ' a2 ^3 S. H7 p- \" w
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);# b! G+ ^" C+ R! C
  17. };
    9 n( W6 P0 |/ J& L

  18. 5 Q; s$ `3 e5 X  p( Z
  19. GPIO_PinState get_key2_val()
    / y- p8 R. R6 F0 N3 l
  20. {( J" R* j( |; P- x3 {/ k. c! P
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);
    & j$ h8 J5 w3 I) d
  22. };
复制代码

* u9 Q4 j4 U) i
6 V2 f6 h" V  V* K$ g5 q
led.h& Q2 n# A8 g1 {, J9 p
  1. /*
    2 o- I4 k# i0 g# P; p
  2. * led.h" b8 Z! U/ {8 [" l! n8 `% R9 V1 F
  3. *4 \# I, T1 J4 u/ W  ?' Q) a
  4. *  Created on: Sep 29, 2022
    $ t# x0 }* {8 [+ W9 ]) `
  5. *      Author: py_hp
    1 C- s' E& R- g! W' \/ X
  6. */
      O% z7 H) q1 J8 p

  7. ( g: Y. c+ |7 V, N
  8. #ifndef LED_H_. D8 Z' u% k. U  z5 ?
  9. #define LED_H_
    , n' ?4 P% r* D/ ^8 G# B: N3 ?& V
  10. #include "main.h"
    ( u3 u# I$ |4 G. P0 y. K
  11. #include "gpio.h"
    7 b! G4 [' l8 H8 I( P# l  @9 f

  12. / V* R, Y+ z7 ^3 v0 E
  13. void Toggle_led0();6 B. m4 n/ _, o. M" v: G! p
  14. void Toggle_led1();1 h, M, `0 A8 p1 W& i
  15. void Toggle_led2();
    ( s+ D8 c+ J; P. d8 N  ?* F

  16. 3 b8 l* \* }! F3 m0 Z! p. O
  17. void set_led0_val(GPIO_PinState PinState);
    / f9 U0 D5 V1 b" b
  18. void set_led1_val(GPIO_PinState PinState);) V9 I' B. ~  a
  19. void set_led2_val(GPIO_PinState PinState);
    2 G& w5 `1 o% C- b: X
  20. , j& M. q( J2 A! ^$ A+ ~
  21. #endif /* LED_H_ */
复制代码
" g: p( N2 ]: H$ @
led.c% m5 g. E! i! O; o4 j6 W
  1. /*
    % f5 K6 q* Z  q: ?3 X. j/ U
  2. * led.c
    9 D1 P& s' q' Q; _9 h' P: K
  3. *, `2 F( z2 b1 s" D% W2 S
  4. *  Created on: Sep 29, 2022% D, v8 V4 E. M( d4 K
  5. *      Author: py_hp2 P: j- I; i: K
  6. */$ @: Q. Y; }7 c# s/ |: O  {0 q
  7. #include "led.h"* \# b; v$ R7 K1 i8 I

  8. & D; N; ?7 a' f1 L4 S6 |
  9. void Toggle_led0()
      j( j3 m2 |. u6 Q. H1 o! l
  10. {
    3 ]/ n# B0 c* i1 c5 F( A: g
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
    1 E7 I8 n! M; k
  12. }2 N6 P- \8 n8 u7 O. @
  13. 0 _2 N# g& _* s& S
  14. void Toggle_led1()$ w# Z4 `; S, H
  15. {  w' V! ?5 i, K: z' m
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);! Z- @) D1 r. l7 ?
  17. }
    % O& y2 k8 b/ C+ l4 ?
  18. ! r! {4 w5 U. x3 m$ Z( _
  19. void Toggle_led2()2 e8 G3 L- B+ a/ H& R
  20. {
    - e7 w3 T2 i3 ]. }! F4 }
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    / S' H5 n% ?8 n5 r: d
  22. }
    . Z: O5 F: c9 }+ p% Q# N% o8 G

  23. ) F( p; [8 U! p; w7 z5 g
  24. void set_led0_val(GPIO_PinState PinState)( ?. t2 f- v* W; C/ i
  25. {) e2 ?9 \) O9 g! S7 X
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);! |. f$ M8 t. }2 q3 L! A, U; P
  27. };
    : \6 M, R+ J% ^) G1 z' Y$ z
  28. 5 u+ n- J( p9 b+ w
  29. void set_led1_val(GPIO_PinState PinState)
    - K/ h% y" D% ^; n0 l" b# H
  30. {
    2 T+ W& v- J8 _: ^3 L
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
    0 n, y: p! y" f  G5 {' W
  32. };
    9 H% p# O! {: l  h7 a

  33. 8 |8 C. y# z- T% n
  34. void set_led2_val(GPIO_PinState PinState)3 @! ~6 e- Y3 ?
  35. {. a, S5 ~3 N/ r9 H) [! K$ |: y
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);2 |  I" q) F( x. ?1 Z0 X1 X" O
  37. };
复制代码

5 p/ d0 G9 @* o& m        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码
( }) Q! p( B& `

& X9 E4 k8 i4 F& A1 R1 v        添加头文件
, \# s" z/ V# s6 O) P3 H3 @2 E; r$ y4 m$ S  U+ u
8761282e3c5a47228b95dfc8bb19e60b.png $ @; [6 D6 L4 C2 g4 J. z* Y4 m

' {: Y$ J4 R& {% n' p9 E7 U8 p) O         添加函数调用实现,可自行斟酌调用! k9 g8 b6 n8 Q) e: Y% z
* n7 H- Q' Y0 z4 s. p$ O/ K0 ^
ec76797598bf425ebdccd8c6eefe3cd6.png
* l" f1 Z2 l7 B

1 t8 ]! _) o5 t. M" z2 G; |0 E          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持) p& H" }5 h' T, J7 _
: N4 I& W: k7 m# a  p, |3 {
37fc1ae9d2a74b60ad7a608342cf7195.png
5 X  X3 T1 P: c% m% C  v- B
. k4 h2 e9 [. n8 s1 {4 y         点击编译按钮完成编译: k( t& P6 B+ N& ^7 v

+ s3 ]4 m7 r9 y* X7 n
ef6f05b27c524b0096f4f66378b2a963.png * W3 d# J+ T" ~8 z3 i
2 a0 v9 F& F- K* G9 n8 J

& C$ l4 k( ~' @, \6 R四、加载已编译程序到硬件及测试8 G, W, X  Y" C) Z% a) r: j
        点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。
( f# u# C5 K1 t# }0 `7 P0 k$ f
0 k: m3 h) Q4 y2 D* }+ ]# w4 `
03d2f645130642a888a7d5e9acec7c91.png
, i) c- Q: B& M9 y
+ U/ x: L/ d9 a& j+ r) u# g        点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,8 U1 F; N% R4 F! ^
/ `0 c& ?/ h% H
ea188220de4d4ed29e1951d485731ea9.png
" [' D7 {8 {  j
3 w7 Y5 x" G. @! Z% ^3 ]( F0 {+ C- c
5a25da299d8e4c92826f620cf30bafe0.png
$ K& U7 c8 r' \) t7 R; u6 e  L/ S
& k0 R+ M0 h6 p9 w( \        将电脑与硬件用数据线连接,点击运行下载程序
& j( ~4 ~: k: D% o2 R
+ e( g+ G  k4 n6 l# {7 p  t- n
4ce304e2ee5f469ca23b922e33ebd259.png
0 N) l4 E6 H8 w7 O3 _* |3 Z0 a9 R! r, H
         或者采用其他下载工具,如STM32 ST-LINK Utility加载  _3 e# |% t. O' P  I( [
5 y% b" x% e) j5 v% D  j. H
8e6b4813a59849e6937a4b00119d0e11.png + e4 M/ \4 @/ S& N7 w. V1 _7 @" p/ k
. U' G( R$ Z% P. E9 U* @
五、程序运行效果
! Y; r8 a( p7 V, E% a8 n        展示效果如下:; A3 l- F. @! }, }9 P% p8 B
  1.    Toggle_led2();//闪灯1 U; [# |) U% z
  2.           set_led0_val(get_key0_val());//按键亮灯% j* N" P0 k3 h/ Y: z
  3.           HAL_Delay(100);
复制代码
# @/ c, I* h$ V" I: _
        【1】闪灯
3 \# i/ h) o8 c- I, A
" G* i& F+ j4 C5 B# p0 v. a6 k
23e5ea2f47a6412aa7db675750266d84.png . q% q" B2 Q9 S" k

( ~- N: y  v1 f4 ]( M         【2】按键亮灯
0 Y! [3 t! f# p
, h! L$ U+ ]( y, C2 n3 j- ?
2efd57ebd5f9409f8c7630dfe3b75e91.png
  |6 U  `1 W* h7 q2 u$ d

. L- D( W1 q# W# A7 J! M————————————————3 x8 `. F/ m3 t" h9 R! C+ I
版权声明:py_free-物联智能
7 p3 H% _2 ^4 a6 B7 M: `2 j  l" x如有侵权请联系删除5 Z7 N0 Z) m/ @2 w/ w9 B
6 R9 u: P+ K9 U! i, e6 P; E( y

& q- M; `- G& ^4 M) O
2 Q6 W( e/ v  }- G  N
赞 收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版