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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、cubeIDE下载、安装
- K6 q: N, ~! x        STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
' t$ d0 ~; j$ a2 R/ R+ ^
: n1 }2 ]% _: C  [; V) p& d: v
c4f0ba8449fa419ea0bf844015a11677.png   3 n5 ~4 h  D; Q* m9 v3 Z# M8 Q5 l
$ `9 O( |5 p" F: _+ k7 J% F
下载完stmcubeIDE后,双击安装包完成安装:; a4 m$ u! B! ]7 P- q7 E9 x% _
9 z5 |" ^/ c, ?# z8 k: W& t: ~
4dd81e8f69bf405aa6bb393b1233136b.png
5 e) ~* n. f: C- F9 H

9 ]; n, B# }- d. x# O安装完成后,去help->install new software配置安装汉化包! y  J& o& p8 [4 l5 {% X
4 s2 {% \: q8 }, [+ G$ [2 ^
fd2da482167648da9b61cafc5a435de7.png
2 D: ~: x+ {6 o. J' |7 @- @" R9 J; a
选择简体中文完成在线安装
% P* c! y# e8 e0 U" ~. l: T0 T* n- @: D7 o
f5e4f5a7fa4444ec8300f4fdec9c5a67.png " s$ O) ^8 d8 ]/ M4 O/ O
( y. G$ h5 x8 v7 A; j: p$ c
二、创建工程及配置芯片引脚' H2 F5 S3 }) W
        汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
. d+ f6 Q: c5 i3 d( F9 g* X" P' F
31f75739597244c9a4c28b7571347b04.png
) l' }! C& w* |+ ?
0 M. T2 x, f: _
点击下一步,输入工程名,选择工程路径,完成工程创建
9 a& H" c1 G9 [) q$ N( r+ B8 g
' g/ {" a# f2 o" F! a" D
5516bbb2d9434da9be5c855494ba70f2.png 5 ^; P4 ?5 Q) @

9 ~; V; @! b7 _% T6 B0 r" g4 f' S         工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口( K" j6 L1 e# Y1 H
/ {. `' p! o& _2 T* d  ?+ l
        开启USB串口能力
8 D$ H4 ^( O9 k  f0 c2 @, u3 K, I1 B; C$ I0 j
6f0570e5f95b420fa865330947d8c708.png
" Z+ F0 Y1 s. i1 x! \: n4 d* E. S! `0 R9 q/ S  V. C( ]7 L1 @7 J
         本文仅开始外部高速时钟(HSE)$ ]$ E: x6 o1 q/ V9 P

. V( ~8 t; ~: E
73d612e17d7a4f0898a188f8d793ad4c.png
3 U: W& u; F4 j* {, u" X/ Y8 x7 B* F* _
         系统时钟频率直接拉满到80MHz. h2 }  T2 O+ z$ i# }/ k# W6 B
! W" f6 f, q% K& T3 s2 c0 I& o
563c5200977f40798d2c981301d8a3ec.png
8 B  u. Q% r* @: w* ?9 G( y: ?/ U) u
8 b; P$ F" o( {) J! R3 v         为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO9 g/ {4 Y, I' [, e: a2 S+ B
2 B" j8 M* l6 g: Q* z
11d7ba975a014eb7a563d695571eae54.png 8 M, k/ t3 D. S- U
2 r% C+ r* m5 X/ R! Z
         工程管理,保持默认设置," S$ u" s! K* p5 [7 @

2 M) O4 a5 ]' u: K4 G" a5 \2 ]
562df507c9874f41a35825e23699ffbc.png 7 m% v4 K! R! m; d  d4 |$ p
+ ?8 z' f: [" |4 o7 u# D
         代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件( j& T: y+ e8 q
. H0 s: u2 t8 Q5 }* _
3103dc753c66489cb9be69e7bb5d2fd4.png - h+ K9 @) ^' f4 p1 r) d

7 P0 L. d' z( o. B* q4 J         高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数, u* S# ~( F# O/ |2 A& u# F# q
% h  s, x' J5 W
1bb8d8f7d59a4c959f410425ec916bd7.png 1 l8 ~& m& k0 q6 p- E. U- f5 z, E# M8 m
: A+ r6 l! x. F
         点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成
8 a# v, o2 ?' [" I/ r& m2 u
) i& @6 m7 I8 b  S" I$ j
6f3a90fcb455448b91429df83dbb01aa.png % R1 a! Z; A( F+ j% q8 x

0 h$ z) a0 D& x* u 代码生成后,GPIO接口映射信息配置在main.h中
$ H) F+ ]) a' u
- A. Z3 P* H2 V1 `; o& S1 @
45238402b5194957a52cb9eccafab3cd.png
! Y1 H5 G- B& m/ B2 S9 N6 y$ Y1 U  N5 y+ v( }8 p+ Z
         生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。2 ]% i( `- |; L
& \8 c% v  R/ y/ ]- ]
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png   X6 B1 f/ m7 j, D& D1 _
: |" X) ^4 T2 F7 Y/ J
        先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
9 Q, n6 [+ `% M9 r! u- t/ J  ]4 R. k6 r, R- ^" r5 j+ V9 l6 T

* L0 I2 l( o2 \三、编码及编译
7 U3 v# B9 J% C; C        在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件4 M% d# C8 g( e9 F

$ J) h# @8 H; T8 {  U5 Z0 [, a: b. o
79db70cd289b491690acb7ed03902d95.png : W8 H" o* K+ I3 n3 g  u* ?4 O; i
! v7 D2 t3 n. H4 O. _. ]5 x8 a: w
         key.h
$ K2 u; T' @) r8 p- B% q' E
  1. /*
    7 @3 I6 X' Q6 f+ Z, @
  2. * key.h
    5 N+ r$ l- H/ y) ~: s7 z; E# M, U4 V
  3. *
    6 V. N' M- K9 I/ [) F/ D
  4. *  Created on: Sep 29, 2022
    - B" ?, |) Y) Y8 `( {  [* R+ b% m
  5. *      Author: py_hp
      \" ^+ W5 B! K! R& q# d
  6. */
    5 c  J* e+ h- t+ ^5 I' f
  7.   Q$ I& o6 M6 Q+ U
  8. #ifndef KEY_H_1 }+ k% {% r2 k" J; ]
  9. #define KEY_H_
    & Q: Z- A% J3 E) a) Q6 q$ v
  10. % D. c5 q- ]4 U3 U* ?& C- X  }
  11. #include "main.h"
    2 H6 ?3 G$ N1 U* `
  12. #include "gpio.h"6 f2 z8 e9 T# M' V
  13. ; X; \8 U- m4 Z% K( d6 l
  14. GPIO_PinState get_key0_val();
    - }; e5 N7 }/ k, v( D5 j: O7 z
  15. GPIO_PinState get_key1_val();+ m6 Y7 M* H7 ]$ {! ^
  16. GPIO_PinState get_key2_val();4 K/ f: B9 @2 T+ T

  17. $ O) N( U8 [$ o4 j; w3 h" ^' H
  18. #endif /* KEY_H_ */
复制代码
1 @; `9 d4 P5 A* ?; R
key.c
( R% b3 M  {; I! A3 t
  1. /*2 e" U, i8 j- N0 W1 K
  2. * key.c' o+ C( U. D6 l3 f0 F
  3. *
    7 w- m2 |# m' a0 o6 }: P) a
  4. *  Created on: Sep 29, 2022
    * i) j1 [' t& v" i9 a
  5. *      Author: py_hp$ [& d5 S1 O0 H6 X, z  A6 l
  6. */
    # `, v. o7 x% P- j/ }8 J
  7. #include "key.h"
    3 q8 j) |( W- v0 T; {8 M& C

  8. , C, o" L0 F3 d
  9. GPIO_PinState get_key0_val()& b0 |' G4 P- U9 I
  10. {
    7 C, {  Y7 d/ Z
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);- |2 U- M2 P( @& I. p
  12. };
    - D# O. N5 O2 N6 R1 H
  13. * E; r4 N; Q! Z( S, Q
  14. GPIO_PinState get_key1_val()" o. h2 G% k- W$ C* Y! A
  15. {5 q( L1 u# S2 ]
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
    : ~8 ?+ C) V  B1 w, a+ B
  17. };4 j. V8 x* K" d$ d3 F) F9 V- F

  18. * B/ u1 X$ n$ q$ l3 j3 w
  19. GPIO_PinState get_key2_val()9 [- u. F0 {! D. O  F' k7 J& i1 n/ l" A
  20. {& A7 ^6 \, ^) A; n" U
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);* F' ]6 U  E& \# r2 q3 Y0 }
  22. };
复制代码
+ C+ L0 G6 b) {, A, ^. ^5 e. R3 h
( N/ a. Z* ^/ B2 t, U2 [
led.h7 `1 g3 q7 s# q) _+ B8 B
  1. /*
    + a& T# @% a4 j, l0 S% K
  2. * led.h
    ' U4 U- ]" S, k) O
  3. *7 ]1 i7 [6 W0 I: Q( C
  4. *  Created on: Sep 29, 20222 v& r4 X1 i* u4 i& j
  5. *      Author: py_hp
    ; X! U0 R) e( d! j
  6. */
    1 C4 D* L4 W+ H2 m& M* b- B: @( o6 X
  7. / X4 ], [/ \, i) y# X3 Z' j# [2 S5 A
  8. #ifndef LED_H_' j; E; I& _, ]1 X1 d1 O/ Z# N
  9. #define LED_H_
    % B" e8 _% F3 E; v
  10. #include "main.h"3 w- \7 P$ \+ P) }. H
  11. #include "gpio.h"
    . u* o+ p! b9 g

  12. / u0 a% r0 Y, Z) x
  13. void Toggle_led0();
    5 s4 o, I- ]( ?8 t- c0 @% |5 e
  14. void Toggle_led1();
    ) V# y6 z0 ^, t
  15. void Toggle_led2();5 X+ y6 W' [. x3 G+ h# N3 u
  16. / u$ f8 v; h% I8 m) U1 W7 X$ u
  17. void set_led0_val(GPIO_PinState PinState);
    8 K) u2 {6 C" W  H' ]* p& \: R
  18. void set_led1_val(GPIO_PinState PinState);1 q& Y9 B% u: l3 W  h
  19. void set_led2_val(GPIO_PinState PinState);
    ) D  ^, `2 t/ I% K

  20. 0 p" T! ~2 C2 F2 [+ |0 C
  21. #endif /* LED_H_ */
复制代码

5 N: O* @5 y8 {; [6 v4 h3 rled.c
! c6 D) c$ c5 \% D: S
  1. /*5 ~, V: b* h1 e' `& \% k0 c
  2. * led.c( h5 ~5 J. _+ r) E5 i# v; X7 |
  3. *" A$ ^+ j( f! E) r6 f% ^( I' y
  4. *  Created on: Sep 29, 2022
    2 \" F5 z  l4 t. B
  5. *      Author: py_hp
    - Q# E8 P3 g3 \7 J
  6. */# p3 h# o% B9 k. @0 u
  7. #include "led.h"
    1 H' H! c+ t% W* I# ~
  8. ! G# t8 W3 X" O! W7 U4 H
  9. void Toggle_led0()
    0 O# h4 r. ]1 j
  10. {
    8 b4 e1 T) w7 Q) \5 V1 f1 c
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);' e8 b- n. p6 I9 h9 w9 }' c
  12. }0 k0 e; T& `& R# I% N+ |

  13. $ E$ Z  W5 v  M2 N: k" A( {1 p
  14. void Toggle_led1()
    . n5 l. e. u  L3 ~* q( W" E
  15. {
    ( L  k" @, [% [7 j1 J  K/ i
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);/ I4 I; z( T6 M8 O( i+ T
  17. }
    ' G' `+ e+ b- O, B; Y" V

  18. ) u7 ~6 ^" ~( v# Z/ a
  19. void Toggle_led2()' v. h- p4 k) s1 Y+ g# D
  20. {
    9 s# u- N9 G  Y6 k
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    + h2 |$ n7 O/ [$ O; e8 b, B
  22. }* H0 q% E# `6 V; U9 O" X
  23. 1 k6 n( [" S  G9 k
  24. void set_led0_val(GPIO_PinState PinState)$ x  B) A4 r. [0 @
  25. {
    6 D3 ~6 j# y3 y6 a
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);/ A1 ]' N  g* N' w& R8 \  E
  27. };4 r, ]0 h9 @) M* `, l! ^
  28. & p* C( p- `' G4 u! ]
  29. void set_led1_val(GPIO_PinState PinState)" a9 ?- Z4 ~* M! V' u
  30. {: g! ]% p$ p  [% [" a, J* Q
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
    / G: t/ y+ B- C
  32. };4 H& I, ]7 k; m8 f
  33. ( z4 u0 R1 @7 y/ L) n$ u
  34. void set_led2_val(GPIO_PinState PinState)
    & P( C5 W, ?( p  n6 m. S% C
  35. {1 `; H0 W* O3 ~: c  b8 Z+ `3 Q- d5 d
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);
    : \0 @3 }$ Q" E6 I3 r  B9 {3 e
  37. };
复制代码
' }* s4 U2 T( o6 l0 c) D
        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码4 i; w/ s! E; {5 N7 m

5 j, o2 u1 Q: {1 n8 R- t6 D        添加头文件
: \# R4 H! M. P3 b1 k2 ~/ ^- r& e* ]; @, H0 z, i) J& h
8761282e3c5a47228b95dfc8bb19e60b.png
& I" ]. O7 ^+ Q' P; V# D$ h  D+ T; d  J9 U: k. f
         添加函数调用实现,可自行斟酌调用! S& w, u" @) S7 w; S* N% T% s. |
$ }! s+ w2 ?: d; Y
ec76797598bf425ebdccd8c6eefe3cd6.png 6 p6 q! I2 F" \0 Q5 n; ]9 e+ b# M

7 {% j& j: p: L% T+ m          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持
4 f0 ^# c7 w( A: D" A6 i4 b8 N' y+ @$ v' M
37fc1ae9d2a74b60ad7a608342cf7195.png $ c9 j4 R* Q) V/ k' n, m1 Y
9 O/ }) q; {6 K/ q' R
         点击编译按钮完成编译
- x. n) \7 d# F; @, P' O- j9 [) p! p: u6 E0 O$ M
ef6f05b27c524b0096f4f66378b2a963.png / ~9 {* |( z* Y! V( Y, c
! ~* c7 E9 X  W* ?$ x

! n, j3 V, h* o+ m* m5 r3 _四、加载已编译程序到硬件及测试
; j6 r) u  T5 o        点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。
* q/ T& f) `' x# N7 K" U) D  }" @* R9 s' _/ @, ^: m
03d2f645130642a888a7d5e9acec7c91.png
, C- n+ |% Q, y0 T5 N. n* [
2 j, d  _, v) K5 E8 ]        点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,
6 ^& f3 A+ ^2 Y* I8 Y. e6 U5 E8 t7 k/ w) M; u
ea188220de4d4ed29e1951d485731ea9.png
/ G1 U! t! O7 _7 J% N* `( Z# P& Y2 e: T
5a25da299d8e4c92826f620cf30bafe0.png
6 S$ W9 G/ G- P2 N6 N  r0 n( k& }, D/ R; x) D3 ~
        将电脑与硬件用数据线连接,点击运行下载程序
& I( X+ P* o! a3 I$ L
8 ]3 I4 S- F) J4 i  ~3 b3 |
4ce304e2ee5f469ca23b922e33ebd259.png ; w: F2 \6 L3 [) Y
1 _- Q# g" \) d9 ]+ D/ y9 X2 B( _
         或者采用其他下载工具,如STM32 ST-LINK Utility加载
- y6 h1 ]& c0 B* N+ I% J/ S- p7 m
8e6b4813a59849e6937a4b00119d0e11.png
6 l2 [+ w# A0 r7 x
7 n' ~! S/ q$ r7 |' V. Z, c5 _% j五、程序运行效果
0 u; [$ h4 k& g" I        展示效果如下:  s; P. h) D" l# ?) a6 Q
  1.    Toggle_led2();//闪灯% ~8 B6 q; N- n/ j4 l9 \$ T
  2.           set_led0_val(get_key0_val());//按键亮灯5 j+ _# A7 I9 l! `- `, B
  3.           HAL_Delay(100);
复制代码

/ S, E1 V0 g6 T. K* Z        【1】闪灯- X( \* n3 x4 P. a0 Q

3 U! Q, v3 r! M3 I& V" W
23e5ea2f47a6412aa7db675750266d84.png $ S1 k: J2 s5 }, v+ |) e

7 w% ?* [# t, I4 E4 k, T' R         【2】按键亮灯- ~2 N+ b$ m$ K
* T1 Z, n& ^( h$ M% A% N* S
2efd57ebd5f9409f8c7630dfe3b75e91.png ) X1 b% R- i6 F# |$ K0 ]
% y( @) V7 U) i0 s
————————————————# m6 h* K4 n! h( z8 n
版权声明:py_free-物联智能& b" i8 ^8 A! J3 ~8 x2 ?7 ]' s
如有侵权请联系删除: ?) w8 }$ O5 X: Q
, I  n8 b5 G. b- @* D
8 s+ }! }! u! m: f- i; P; I0 f, L

' z( |1 a+ j0 x; E. i% M6 m
收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似分享

官网相关资源

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