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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、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$ \
c4f0ba8449fa419ea0bf844015a11677.png   
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
4dd81e8f69bf405aa6bb393b1233136b.png
- 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
fd2da482167648da9b61cafc5a435de7.png ; 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
f5e4f5a7fa4444ec8300f4fdec9c5a67.png
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
31f75739597244c9a4c28b7571347b04.png . 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
5516bbb2d9434da9be5c855494ba70f2.png - 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
6f0570e5f95b420fa865330947d8c708.png + 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! ~
73d612e17d7a4f0898a188f8d793ad4c.png + [* ~% ^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
563c5200977f40798d2c981301d8a3ec.png 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
11d7ba975a014eb7a563d695571eae54.png   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
562df507c9874f41a35825e23699ffbc.png   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
3103dc753c66489cb9be69e7bb5d2fd4.png 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
1bb8d8f7d59a4c959f410425ec916bd7.png
+ 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
6f3a90fcb455448b91429df83dbb01aa.png * \! 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
45238402b5194957a52cb9eccafab3cd.png / 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
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png
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
79db70cd289b491690acb7ed03902d95.png
/ l( g* i0 Z+ c2 ]. v1 D
2 g, w- b2 a* ?4 i0 w         key.h) s$ z! V3 Y' O# s( f
  1. /*0 P& r5 n" X+ k) r1 ?
  2. * key.h; g" P& b+ l7 V( R; g0 w' s# {
  3. *
    + n$ u+ Z5 q9 V, C$ _, W
  4. *  Created on: Sep 29, 2022
    3 Z( F, e* {9 V4 n1 a% @/ P; z
  5. *      Author: py_hp2 C$ D! ?# t3 @% V& n
  6. */
    " O3 S" e6 V4 }) r% j/ s
  7. % a0 I( K. K8 q7 C9 C" E
  8. #ifndef KEY_H_& @6 k) f4 G( }6 X0 n- ^$ y1 G( [
  9. #define KEY_H_
    ! q9 U( }$ {1 J4 Z8 L3 X3 F" p. G

  10. ) Z8 f+ Q4 p3 }  a
  11. #include "main.h"  \. t$ a6 g) R* L' x, Z
  12. #include "gpio.h"
    + V2 t0 \: |# e6 U! d* C

  13. 0 e  g  e. M- k  I7 Q% U
  14. GPIO_PinState get_key0_val();
    % S1 t) L+ p: i' o, p4 L6 h
  15. GPIO_PinState get_key1_val();
    ' ]0 J5 E8 @) v# s$ H
  16. GPIO_PinState get_key2_val();7 N# }6 x: D! p2 q

  17. , J, T8 V) I4 h6 h+ ]5 }
  18. #endif /* KEY_H_ */
复制代码

5 A9 D" B4 y3 lkey.c
# O0 G9 ~+ Y- Q/ e5 E( H8 U
  1. /*
    1 y: n/ k: e# |, i
  2. * key.c
    : z8 t. F. W. `, U; Q3 z+ _! @: F
  3. *7 d0 s: `6 K& I/ s( [6 Y3 W7 k
  4. *  Created on: Sep 29, 2022
    ( C/ |  R, }3 H$ a: S7 K( c+ u. s
  5. *      Author: py_hp. u# F4 k. G/ [8 F# x, z
  6. */
    " q( v) p% U4 d, P! K- q
  7. #include "key.h"0 D8 v. i* e7 C) [
  8. % o$ {  Y% V; o: \- v5 `
  9. GPIO_PinState get_key0_val()
    0 V! h2 U% G' ~- S& T$ x8 s" _
  10. {! l3 ?3 j2 w, Z+ `6 H) R7 `( E
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);, n' {& H5 v& z+ h& Y
  12. };7 L+ k- V: H' C6 D$ L0 ?

  13. 3 `3 y6 x9 S8 y* \4 D- X
  14. GPIO_PinState get_key1_val()
    8 m/ Q4 Y7 \% p* }/ A$ w# e( C
  15. {
    . k4 A$ e- V" `3 W  R
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
    1 P6 N% b- Y7 M
  17. };% x/ j3 R  H) ^3 c7 N
  18. " f6 ?0 z( f# {& N7 v
  19. GPIO_PinState get_key2_val(). W2 L3 f# }4 G! s
  20. {
    # `  c; R5 f( v8 W, _1 k. H
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);4 I, f' g! g( |7 j, X  H: {
  22. };
复制代码

4 m" d4 x; B# U: C& u

% d/ z+ A3 @. ^+ `( @9 f9 |0 [led.h
/ _+ r  U- T' q& f, O! P
  1. /*! f$ ~( {9 J4 ^
  2. * led.h) i& u! T5 T' i8 E. s$ ~' I) I
  3. *
    % k! r3 J& n  l2 }! V' |
  4. *  Created on: Sep 29, 2022
    ' X! A2 Q( U* \6 ?2 @' J# ^
  5. *      Author: py_hp
    " B# g  r' g0 G- i: O: Q' S. d
  6. */
    3 m2 ]* g  t0 U3 f
  7. 4 Q) B7 ?& Z% R$ s
  8. #ifndef LED_H_
      K9 F) f+ d3 ~( Q
  9. #define LED_H_1 [; H9 K# l, L% W% O
  10. #include "main.h"
    0 X* s: C, V, C  {0 M8 y4 k# F
  11. #include "gpio.h"
      l3 c/ o* J! \' }# m
  12. + d) J8 z9 X8 Q* Q9 b& j. j
  13. void Toggle_led0();7 I2 `% e. z, T
  14. void Toggle_led1();7 F: k' p$ S* Q2 F& B
  15. void Toggle_led2();7 r3 Z4 K0 G9 j7 K. y9 U
  16. & O9 Z. |( c! A* |: g8 W% g3 a
  17. void set_led0_val(GPIO_PinState PinState);4 K% H5 W, V# m, R! J
  18. void set_led1_val(GPIO_PinState PinState);
    5 _; D( H4 j2 P( l+ k4 p5 f
  19. void set_led2_val(GPIO_PinState PinState);5 h1 K. X* J. O; U3 M6 W+ u) R
  20. ( B* }/ H+ H4 @
  21. #endif /* LED_H_ */
复制代码
% A, J! U1 \2 ]; ]; E
led.c* O1 r8 W$ r; @2 e* \" _& Y/ u
  1. /*9 ~2 |0 ?* b' m, E0 M: W3 i
  2. * led.c3 _+ O; ?( |$ b. B# \) B2 D
  3. *
    6 J" F* N" _5 K# h2 i: U. Y, u
  4. *  Created on: Sep 29, 20227 T; X5 Z2 i7 s9 ?
  5. *      Author: py_hp: O! [% @1 F; z
  6. */
    + j: s. @7 A3 C. P/ I
  7. #include "led.h"
    ( ?; A5 S4 o6 l3 e4 q* o  e' s4 f

  8. ! ?( S$ p( g/ q2 @5 }
  9. void Toggle_led0()
    , F6 _( V1 Y9 N5 p0 _% a% m
  10. {5 I% j8 X5 [8 X& [$ D/ m
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);. y, D" Y5 r- S
  12. }
    ' y. u- r" f' L" q) N) H$ f4 H

  13. 9 _* g6 ?# @7 [8 ]2 X! t* N( i4 H. Y
  14. void Toggle_led1()  e6 Y/ Y" |( D7 |/ [
  15. {
    2 `( k8 r! I# P( ?! U7 B  g
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    : c0 k7 D' h( s! {
  17. }
    8 [1 d  n6 V1 l8 g0 m1 m

  18. . h$ }8 S. }9 ~/ H  U6 {
  19. void Toggle_led2()+ q6 n( N+ W  L6 q3 F+ J4 A
  20. {9 v- F9 Q5 O9 i$ @
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);6 S4 v3 q% _6 _/ c+ u# c% g$ y
  22. }
    3 Z) k& C7 `6 V5 ~
  23. , J4 p" K  G! A. g
  24. void set_led0_val(GPIO_PinState PinState)
    3 y) S; V  z+ y
  25. {
    7 N% q9 a9 U8 ?% M
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);2 v3 X( R4 x8 P' |
  27. };0 |% W, H9 Z. i" d
  28. - d# E9 ]6 b( V8 a
  29. void set_led1_val(GPIO_PinState PinState)
      @8 |6 I3 _% [; ^( I% J
  30. {; z; o! f, V) A8 u2 Y6 p& o4 l
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);" ^! a4 e# A8 a( _, x1 m0 k6 F
  32. };
    , b% M* O7 Z4 o

  33. 9 c* ?1 M4 m4 Y2 S; [6 m% e
  34. void set_led2_val(GPIO_PinState PinState)
    $ P: {  O: v0 R4 R; P3 B% S
  35. {
    : x( y3 H) D5 N. Z! ~
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);) C  f9 b5 V* F; ~2 T3 N" ^3 }" r; o
  37. };
复制代码

6 |7 ~- T/ \) Y5 S. F1 g        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码
: x3 L$ m- B( F* [" j7 C) w
7 a& i' o+ S: Q1 Y4 j  V
        添加头文件5 a" T) q$ G+ T  b
5 U) i3 {1 w9 C
8761282e3c5a47228b95dfc8bb19e60b.png
& 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
ec76797598bf425ebdccd8c6eefe3cd6.png
" f7 Z* l) Z3 y8 p
" N) A/ |# F, I: v8 k3 R
          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持: P! r5 X/ I7 c
( b* b, v( y- ~2 N
37fc1ae9d2a74b60ad7a608342cf7195.png
: 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
ef6f05b27c524b0096f4f66378b2a963.png - 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
03d2f645130642a888a7d5e9acec7c91.png * ]# 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
ea188220de4d4ed29e1951d485731ea9.png
8 d4 f) e: U$ T# v
! C! [" n. Q/ e/ F9 H- q( e# D5 U
5a25da299d8e4c92826f620cf30bafe0.png
. 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 }
4ce304e2ee5f469ca23b922e33ebd259.png + 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
8e6b4813a59849e6937a4b00119d0e11.png . ^: 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  _
  1.    Toggle_led2();//闪灯/ o/ E& g) _. t$ Y
  2.           set_led0_val(get_key0_val());//按键亮灯
    7 o) O4 [2 J; j, N, Y& b/ g
  3.           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
23e5ea2f47a6412aa7db675750266d84.png ! 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
2efd57ebd5f9409f8c7630dfe3b75e91.png : 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
赞 收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

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