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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、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
c4f0ba8449fa419ea0bf844015a11677.png   
% 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
4dd81e8f69bf405aa6bb393b1233136b.png
- \) 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
fd2da482167648da9b61cafc5a435de7.png
# 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
f5e4f5a7fa4444ec8300f4fdec9c5a67.png , 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
31f75739597244c9a4c28b7571347b04.png $ 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
5516bbb2d9434da9be5c855494ba70f2.png
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
6f0570e5f95b420fa865330947d8c708.png
  I9 n9 L$ J4 g" x5 G8 F! n, K3 v" }
         本文仅开始外部高速时钟(HSE)
6 P! t1 v& {' ^: R$ z% `' G# j8 C( i( x! R
73d612e17d7a4f0898a188f8d793ad4c.png ; 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/ }
563c5200977f40798d2c981301d8a3ec.png 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
11d7ba975a014eb7a563d695571eae54.png
( 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
562df507c9874f41a35825e23699ffbc.png 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
3103dc753c66489cb9be69e7bb5d2fd4.png , 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
1bb8d8f7d59a4c959f410425ec916bd7.png
% 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
6f3a90fcb455448b91429df83dbb01aa.png
) 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
45238402b5194957a52cb9eccafab3cd.png
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
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png
# 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
79db70cd289b491690acb7ed03902d95.png
( {( q5 e- i/ {; o' c) {' ^. \4 t; M6 j& t( J" S+ M9 L8 F
         key.h. {- ]6 Y* N1 b) ?" F& `
  1. /*
    / M2 n; q% b& ^* ~, ^2 S0 h
  2. * key.h
    " ^) y/ K4 R  O% S6 v  d
  3. *
    5 t6 x6 z! k0 `$ z% T
  4. *  Created on: Sep 29, 2022
    $ s# k- R5 z; }' _& ~. j6 h6 z) h
  5. *      Author: py_hp( {: n& n. Z; n+ F4 I- i9 l
  6. */
    ( G- u) k( J8 a! P

  7. 2 `3 T8 ~% S( k' [% [
  8. #ifndef KEY_H_
    # }7 Z& M% [6 Y) `+ X! a4 }! k
  9. #define KEY_H_/ v( m2 h0 U* |, Y

  10. # s0 L! ?: L/ F1 L
  11. #include "main.h". U1 K2 I8 A- |8 u
  12. #include "gpio.h"5 C8 Z- [! P. p& a& i: a4 p

  13. 5 _$ E, d/ d7 j. ?% @% Z- b
  14. GPIO_PinState get_key0_val();
    3 K4 M$ F+ C6 Y- O
  15. GPIO_PinState get_key1_val();: j+ p8 R4 k4 S" C9 }, o" o: a: y3 H
  16. GPIO_PinState get_key2_val();( L: r, ]4 X9 @4 Z( g4 q  b" `
  17. ' T0 A" O! Z' u( P6 P; n
  18. #endif /* KEY_H_ */
复制代码

% I- n) `" v. T  _key.c$ H; e9 \& d% N5 ]9 [# f  Y
  1. /*/ C  x3 L+ j6 p, L
  2. * key.c) J  Q+ \6 X: P) y6 i
  3. *" y& ^% ~' }! [$ l' }4 S+ k
  4. *  Created on: Sep 29, 20227 q. K" j( m( D- E6 W" A# l
  5. *      Author: py_hp. K5 J1 m9 k- K" u7 I+ J* a
  6. */6 v$ o/ X  F9 i# Q8 p
  7. #include "key.h"
    - t1 C: Y- {: W; i# }

  8. ; g: D/ q" j$ D6 [. {$ c3 n
  9. GPIO_PinState get_key0_val()
    : t7 S/ y7 M  h2 A, S
  10. {7 a% i1 b8 m4 e4 P& P
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);; ~/ b' c' @: g2 I" M; L3 |" ~
  12. };  z- _( [) {! t( F, q+ y
  13. . I2 b$ @- _+ J) j5 S( C1 L
  14. GPIO_PinState get_key1_val()' G7 u: P) X$ w# x7 n
  15. {
    , w/ a8 A1 M: V8 l& N6 y
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
    ' P. ?4 F0 R$ [, p  K: a' x
  17. };( _3 ~' v0 M6 r  ?8 r9 h% u
  18. ( h7 `0 b" B- }, i% G
  19. GPIO_PinState get_key2_val()
    5 L; g, |) D) S" _- c, Q: F6 ]2 r
  20. {
    & _5 H/ }3 Y: Z( J' h, L$ }2 _, i) w
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);5 \" V8 V" ^1 h( W7 {; X
  22. };
复制代码
# i+ l  D- x2 N' r* z! i
- d) a" F: S4 s1 h
led.h
: u: j$ e( P. D4 I& n
  1. /*
    . V( }8 k7 Z  E& H2 F
  2. * led.h% c, J- E! G. N1 u4 H  a
  3. *
    ' o# c" t3 I4 F( N8 m0 i+ H  L8 b
  4. *  Created on: Sep 29, 2022
    - Z" y% h6 ^5 L6 q7 [/ i5 W
  5. *      Author: py_hp
    # g- u3 ?) y3 R) T1 c$ w) K
  6. */
    0 a7 ]) ~2 Q3 F0 V

  7. 3 P  A2 T" @9 k5 ]" U
  8. #ifndef LED_H_2 I+ K; B, {8 ^( B; b. _  H
  9. #define LED_H_4 m8 b6 i) x: o, r
  10. #include "main.h"
    ( g( p/ v  W) O' r1 }; E  H& M: [
  11. #include "gpio.h"0 _" j1 k# O& J* B! K: f7 W
  12. 5 i) u5 J9 \, D7 a/ H5 A0 v
  13. void Toggle_led0();! B& M& ^( S/ f2 q
  14. void Toggle_led1();
    " @, v4 Y: }! h! C
  15. void Toggle_led2();  z; p! z# b0 p, _
  16. 1 b+ t% `, ]; W% \# F5 D
  17. void set_led0_val(GPIO_PinState PinState);8 c; a7 ]8 A2 n; K1 s+ \1 P
  18. void set_led1_val(GPIO_PinState PinState);
    ' ^8 s& Z* O" U
  19. void set_led2_val(GPIO_PinState PinState);
    ' V0 @- ^6 H  |3 H/ H8 i
  20. . T2 J1 u3 |* q
  21. #endif /* LED_H_ */
复制代码

) C7 h; w6 x! ^; h) b- Eled.c  O  Y4 ?9 T. g# X( z1 G# z5 h* G
  1. /*
    " |$ F% X/ C. X) ^
  2. * led.c
    ; O& _! j/ N* W: g) u
  3. ** {4 z  K2 R9 @0 z& i- n
  4. *  Created on: Sep 29, 2022
    7 v  b- q3 r$ P7 F& M) d
  5. *      Author: py_hp5 q: @8 ]9 ^4 [* r) ^
  6. */! J4 V7 A' t  U( k+ o& i
  7. #include "led.h"
    ( w: W/ j& n  `0 d4 H, Y

  8. 5 r( W* o/ Z4 r" F% {. [, I; o- _, d9 @4 p
  9. void Toggle_led0()
    , f& f" X- K: |, d5 e' e2 w
  10. {
    " @' R  k6 {' c, e# i6 }" I
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
    9 Y, Y: f3 I+ j, S. t0 y
  12. }
    * ?0 _1 R- S5 h/ G/ k& E" k
  13. ' _  _' h1 F) a5 f
  14. void Toggle_led1()) ?5 n" j* }" ^9 n1 Z
  15. {
    7 ^: M2 z# C" S5 v3 L& N
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);% r* w. [' U. y; S: K: m$ n; W' Q6 Z
  17. }
    1 D3 \' d. u# i) }5 T! M5 T

  18. 4 `% U: P$ g, c2 X6 a" D) G
  19. void Toggle_led2()% @6 B# @# Z; D) M. `$ U
  20. {/ v* }" ]. w( ?3 Z
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);7 R( u: S  i( X. v: W
  22. }4 v$ p/ h( z4 h+ R; p0 W1 ^, s6 S/ X

  23. ; W6 H, K5 p7 P9 E' b
  24. void set_led0_val(GPIO_PinState PinState)
    9 s& Z, ^  G, Z8 J5 P: e
  25. {
    ! H# f0 c; g4 ?
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);8 q$ d- ~& Z. u' h7 x& C: n1 Q
  27. };. p; n% e' ^7 |, D' d& P
  28. 8 c8 X  L( j) P0 `- P1 H5 a* u9 O
  29. void set_led1_val(GPIO_PinState PinState)
    ; N7 C6 F" @& a4 G0 Z0 R8 {& k  u
  30. {+ U7 }- A: V7 t
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);
    : j: K  _0 x; X4 u- t
  32. };1 _/ ?, l( R" V- E. B

  33. , e* j) C- s3 V/ q; ^# g9 b, B
  34. void set_led2_val(GPIO_PinState PinState)1 l) M1 z1 n/ L' ^. h# K, U
  35. {
    & K4 g' z/ P# {  }+ F( S. r
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);7 h' a: A3 V1 L' R& j
  37. };
复制代码

$ \# @& {# 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. ^
8761282e3c5a47228b95dfc8bb19e60b.png % 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* ]
ec76797598bf425ebdccd8c6eefe3cd6.png
, 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
37fc1ae9d2a74b60ad7a608342cf7195.png
' @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
ef6f05b27c524b0096f4f66378b2a963.png
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
03d2f645130642a888a7d5e9acec7c91.png - 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
ea188220de4d4ed29e1951d485731ea9.png , [- P" }) W& R7 V) y/ h5 A, f
( |; s2 X; I1 h" K5 Y8 d0 q  K5 h
5a25da299d8e4c92826f620cf30bafe0.png
  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
4ce304e2ee5f469ca23b922e33ebd259.png
' 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) [
8e6b4813a59849e6937a4b00119d0e11.png - b, w  N- I$ r" @
$ |! }0 Z5 y! R3 c6 \
五、程序运行效果
; o& q+ i) F( N" N7 a        展示效果如下:( j- f+ \$ }; ~' s) B- Y
  1.    Toggle_led2();//闪灯# E8 ^& x+ t5 u- |4 x4 d2 N
  2.           set_led0_val(get_key0_val());//按键亮灯
    5 E+ q3 t  }) V$ R1 P
  3.           HAL_Delay(100);
复制代码

; f. |9 e8 D: v7 Q' [% E        【1】闪灯/ f% O4 [+ g. U+ _* \  P, V
, P( g3 K% ?, D- W& ~" T
23e5ea2f47a6412aa7db675750266d84.png ) 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
2efd57ebd5f9409f8c7630dfe3b75e91.png , 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! ?
赞 收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

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