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

STM32CubeIDE快速开发流程经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 14:39
一、cubeIDE下载、安装  n0 `  R1 F- ], X. X; r+ o% a+ N
        STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外设配置、代码生成、代码编译和调试功能。它基于Eclipse®/CDT™框架和用于开发的GCC工具链,以及用于调试的GDB。它支持集成数以百计的现有插件,正是这些插件使Eclipse® IDE的功能趋于完整。STM32CubeIDE集成了STM32CubeMX的STM32配置与项目创建功能,在通过所选板卡或示例选择一个空的STM32 MCU或MPU,或者预配置微控制器或微处理器之后,将创建项目并生成初始化代码。在开发过程的任何时间,用户均可返回外设或中间件的初始化和配置阶段,并重新生成初始化代码,期间不会影响用户代码。
' f- K1 x, t- R7 b0 M" `& S$ m  x5 u6 y: {
c4f0ba8449fa419ea0bf844015a11677.png   
# s* c: ^% i6 b- ?- A2 ^( {3 A! }; z3 {7 R! j3 h( e5 [1 e. h
下载完stmcubeIDE后,双击安装包完成安装:$ Q* a# o  C  u0 U
' i9 x4 g# T# r* i6 W# q0 F
4dd81e8f69bf405aa6bb393b1233136b.png ( S5 r3 g, u: f0 g( Z7 V
" W( f; ]- W4 i  O2 k2 a
安装完成后,去help->install new software配置安装汉化包
% }# i+ L8 l8 N( u. w4 o& V
+ E% X$ n4 @3 A, {7 ?( F) @
fd2da482167648da9b61cafc5a435de7.png ; N" q6 F) S8 b0 G

+ E' G% d2 ?/ F5 N. s- H
选择简体中文完成在线安装
% W; D: [% v9 P9 E' Q4 \
! Z9 S" s+ N3 ~; N; |' @
f5e4f5a7fa4444ec8300f4fdec9c5a67.png 2 g6 m  q& Q0 C& N1 u% K5 u

5 N  |% X2 I4 g# X3 A二、创建工程及配置芯片引脚! k+ U: t+ C' ~
        汉化完后,重启软件,在文件->新建工程->stm32 project,输入自有芯片型号,本文是STM32L496VGTx
- X. b2 H7 g! ^' B+ I4 Q
* L" B/ H, O, p: i  u
31f75739597244c9a4c28b7571347b04.png " q" U  J8 E8 `& j, F7 ?
4 e# b3 ]4 R1 ~+ V5 i( ^
点击下一步,输入工程名,选择工程路径,完成工程创建
! ^$ L3 s6 V' [& L0 T" d: j# c5 g  |, S" s9 T0 p) S
5516bbb2d9434da9be5c855494ba70f2.png ! l, N- h+ T* z- M  L1 G+ L
4 ^$ g$ p: h; b. @) \7 X, }
         工程完成创建后,直接弹出cubeMX配置界面,可以图形化配置芯片引脚接口
2 P9 R  X# W! N
$ M7 B: j1 b0 B        开启USB串口能力6 M% J/ A% E/ V0 ^1 L6 S; L7 \/ c3 F
* V# V; Q) |2 X5 G3 d
6f0570e5f95b420fa865330947d8c708.png 3 l. I1 ^8 @: O3 j
- q$ v9 @1 Q0 G: f6 \
         本文仅开始外部高速时钟(HSE)" C. R7 l9 n/ e$ j: a" i
2 [. h8 l3 T; C
73d612e17d7a4f0898a188f8d793ad4c.png
- A2 n) z0 u7 v8 m1 O6 e; [1 G3 p" y- w- c* N
         系统时钟频率直接拉满到80MHz
+ P* f) }& X% m- n
: N/ C% o0 M, }# t) d- F/ k
563c5200977f40798d2c981301d8a3ec.png 6 h; Z; v2 ~/ I. f: ^/ {- z

/ r# {$ R$ J2 q* @) m/ U         为了简单测试工程,仅仅配置三个按键及三个LED灯的GPIO
; C$ h  Q3 e5 E/ I. H- o+ s8 B* x( x  w0 b
11d7ba975a014eb7a563d695571eae54.png
, g( W/ _  t1 P7 J- M/ m( G
6 p) t/ z2 I$ X4 ?         工程管理,保持默认设置,9 A  S; M5 {& D8 |- A7 F

: m" m0 [0 B0 T
562df507c9874f41a35825e23699ffbc.png
3 c, |& i6 O  l: m8 v: D
0 n8 \) c9 r1 X( C) Y9 \. o, \         代码生产页面,只按需生成,为每个接口类型生成独立头文件及源码文件: Y/ m$ L; N; S# c
. W! v  e  {  @. c  ^* U
3103dc753c66489cb9be69e7bb5d2fd4.png
9 E( s+ ], ?5 a/ ]# t" s  a" ~. ]- H' y- T
         高级设置页面,保持设置,1)本**PIO选择HAL库实现,也可以点击选择LL库,2)GPIO初始化调用直接生成(main.c中实现),也可在Do Not Generate Call勾选去掉,也可以去掉Visibility(Static)选项,不生成GPIO初始化函数8 r; ?; y: _: c) j; N4 V8 B
* d, s; X4 D( l
1bb8d8f7d59a4c959f410425ec916bd7.png 2 j( B* y' i, M
; ^7 ?# R* h* V! B/ m/ x: g
         点击菜单栏保存或代码生产按钮,实现cubeMX配置到源码生成0 b! X+ L  A+ i, p6 F
. E# o6 d  ~# Y6 R  n8 X
6f3a90fcb455448b91429df83dbb01aa.png
: R5 o9 Y& r2 R
$ W6 z9 Y  P) {0 e2 ~/ x4 M- |) J. ~ 代码生成后,GPIO接口映射信息配置在main.h中3 H  x$ `: e- o' [6 s5 j. N/ c6 {; h
/ ~+ {! w. v' x. I8 r' k/ H
45238402b5194957a52cb9eccafab3cd.png
+ g, ~/ R7 \) P- g. r) `* h; `# J2 ~+ n* W  B& }3 u
         生成GPIO接口源码为gpoi.h/c,仅仅提供了GPIO初始化函数,实现时调用HAL库函数来实现的。' I4 Y! o; F' O! T/ C$ I$ Q

1 h% P$ A5 x3 E0 {) q5 S
2d1ff9c9aa1f4adf94657d7b7f90f5cd.png
) X( T$ N$ a6 A# z+ I; N( i1 @
+ Y7 v% R/ |8 I  f6 d        先创建自己的按键及LED驱动,该驱动同样是基于HAL库提供的函数实现,而HAL库和底层硬件打交道,间接帮我们实现对硬件读写控制等能力。
/ D6 X1 L; J- S; W2 ~0 G2 H& n6 w, ~5 b$ ?9 u/ l. R* M# S

+ v1 l! h& p/ ?5 K  V1 [三、编码及编译
1 u+ l3 U% g: f, H        在工程目录右键->新建->source Folder创建一个源目录,并添加key.h/c、led.h/c四个源文件4 j6 s/ q2 F9 d0 |* w, F
- P8 N! q* x% w4 E$ q3 F1 K/ W1 N
79db70cd289b491690acb7ed03902d95.png 3 ?; u) J+ F! b, l

3 Z: R6 E1 d3 {' }         key.h' Z2 Q0 ]( p( v; m- y
  1. /*$ _5 w+ C# ]+ @' w1 v
  2. * key.h
    . r6 u! f6 L7 m! y/ a
  3. *
    / {/ }0 m% j, ]. v( K- n
  4. *  Created on: Sep 29, 2022
    2 ^! c( S! v, B
  5. *      Author: py_hp
    % Q! I6 W' H) G  \2 h5 k# `, r
  6. */" Z) R4 d4 ~' ]9 x1 m

  7. " U, x! i+ Q: U
  8. #ifndef KEY_H_
    1 ^% Y3 |5 |6 K( E! Q0 F
  9. #define KEY_H_
    ! g8 y& J* J3 f- D" W" l

  10. 9 Z  j9 v5 Q3 ]' M; z
  11. #include "main.h"
    4 o- q1 n8 D+ H7 _* a0 t: x
  12. #include "gpio.h"
    $ s, K/ L. ~; W. ~) Y8 V( S
  13. 2 Q9 S( [: {. N7 o5 K( R9 T) d
  14. GPIO_PinState get_key0_val();: h$ C$ N3 Q1 z" H: V
  15. GPIO_PinState get_key1_val();% z9 Q- @# u1 O/ c) f
  16. GPIO_PinState get_key2_val();8 j: O  N! N/ o  J

  17. ' J* D! B& h3 g$ C
  18. #endif /* KEY_H_ */
复制代码

* R5 d3 \$ y# a$ f7 wkey.c
8 _3 [2 k* @1 t  Q
  1. /*% [5 p; _6 }, a2 k  M& Y* y
  2. * key.c0 z& O0 S$ [# x% V; U
  3. *
    . T6 D. W5 }% i  j7 p
  4. *  Created on: Sep 29, 2022
    1 M; u$ x6 Q4 B) h& h  I% t" m
  5. *      Author: py_hp9 }6 g$ q# m; z* k
  6. */  P/ r/ x  N4 L" P$ @# h
  7. #include "key.h": G5 Y( c4 r  y4 A

  8. : X, {- T( o5 M. d% I) W  }+ j9 h
  9. GPIO_PinState get_key0_val()
    5 X  K2 u2 i; @6 N2 D# V# @
  10. {
    / O  O- _6 |0 a3 z1 x# d! H; D
  11.         return HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin);, S7 H7 x* e, U" \( P2 c
  12. };& z$ @0 E2 [6 m. {
  13. 5 X, o! ?5 Y" }; d1 t
  14. GPIO_PinState get_key1_val()) l6 r2 V7 `0 M( l9 T
  15. {6 h8 t# `6 t; w3 ~9 ]- [
  16.         return HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin);
    % G' f. m; w9 c5 d+ h+ H7 ]
  17. };6 o6 Z! \: h9 l0 E

  18. 9 L* x5 A/ L$ W* p4 u8 y
  19. GPIO_PinState get_key2_val()
    9 K/ f  J6 k) @/ X8 `. S
  20. {" P/ B' C0 x2 C+ X
  21.         return HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin);
    ' R9 T6 a- K' f+ @  n  n; s
  22. };
复制代码

3 ^% X- t( Q+ Y; i) K$ ~
7 {5 W; r$ K) K/ @0 j( U
led.h
$ d8 N# J$ b% w& _' n: d" r
  1. /*8 B7 R- |5 K0 ^+ G+ t% e" C
  2. * led.h
    # V! S' A6 Y2 j5 D2 s
  3. *7 w  M% l) N/ l- m* U
  4. *  Created on: Sep 29, 2022
    , i! F0 W  h2 ]0 w
  5. *      Author: py_hp$ Q4 w9 H1 D! D/ j
  6. */
    4 F, A- A( C( ^* O! ?
  7. 2 |: M: M  q6 w. @
  8. #ifndef LED_H_
    ' V/ M9 k; A, A% G+ H
  9. #define LED_H_; @9 d7 f5 t9 R  Q) I4 D* J
  10. #include "main.h") u/ U' V5 u9 o/ i8 J, }& N5 [! b% }
  11. #include "gpio.h"
    ; M) L$ g. V% U* Z- g
  12. 4 ?: f9 s* k3 n5 \! T2 ?! ^
  13. void Toggle_led0();
    ( A' z) x9 i6 m, K
  14. void Toggle_led1();
    : l* C/ {0 F5 t
  15. void Toggle_led2();
    . L3 o& A- T  G

  16. ; f' ~7 v5 H7 B. O- t6 M4 |
  17. void set_led0_val(GPIO_PinState PinState);2 C/ S. L9 f& m+ U' l1 b6 _
  18. void set_led1_val(GPIO_PinState PinState);
    $ t& u$ w7 t6 x# B* h. D: U' X$ ?
  19. void set_led2_val(GPIO_PinState PinState);' N% e9 o7 a! N

  20. : O: ]3 s2 ~6 M( k# `
  21. #endif /* LED_H_ */
复制代码

4 `) U+ e, p" L! xled.c6 b0 e! S9 [8 z  M
  1. /*
    9 J& q- {/ r: S, c- E
  2. * led.c- S' K+ l% d* O& L% V
  3. *+ F# h( x& B4 l. a& V: W
  4. *  Created on: Sep 29, 20221 Q, b9 N$ m$ ?' F5 }
  5. *      Author: py_hp
    % V$ b  q: {# O) W
  6. */
    $ O  |) X; v$ s5 H2 U% r! O! K' c0 Q
  7. #include "led.h": K3 ?$ r  Z* B5 u/ q

  8. / c' \7 ^! s+ f% ^! H! U4 S9 Q( @; d
  9. void Toggle_led0()% l0 }' X/ R6 j% ?5 q1 R
  10. {
    " F1 }. c. m! A: s
  11.         HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);2 W1 K6 c7 K9 J1 n! y3 ^4 c1 E- l
  12. }
    - p; F1 F  L; \1 V. [
  13. 0 g6 b$ a! J. Q5 x% z0 t1 U3 C
  14. void Toggle_led1()3 }$ v6 l' d: g8 W( o
  15. {/ \1 n8 c" q/ q! C! l$ p" R, x
  16.         HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    ! {' R  \0 _' S4 L! \: i, a5 [
  17. }
    - Y8 p5 e7 H/ w
  18. $ }6 G( X$ O& b" U& j  o+ A
  19. void Toggle_led2()9 j9 y9 N9 w4 G9 s! K
  20. {" A) C7 D, {6 o  }0 k
  21.         HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    ) d( g7 R6 B: B. b
  22. }
    % \8 I8 @  f* A+ [

  23. ) y* _! o6 K3 a# Q# I0 ?
  24. void set_led0_val(GPIO_PinState PinState)  j/ U" D" X" J3 S6 k4 t) \: U3 [
  25. {0 T) v3 m$ r) L% I
  26.         HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,PinState);5 e; E1 u) ]) k  {1 H1 H% q
  27. };  r# T4 u1 W  h) S
  28. 2 ?- ~8 N. u6 p
  29. void set_led1_val(GPIO_PinState PinState)2 e( @' _0 h; d9 W/ L
  30. {
    % ~4 c; y3 J* s7 t$ e. X
  31.         HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,PinState);8 R( Z  n, p" c* r2 j( y
  32. };
    + n7 y: o/ t7 x2 c0 W
  33. ! m6 \; u  @6 g' s5 Y8 g# B
  34. void set_led2_val(GPIO_PinState PinState), g9 s" G) N$ b8 g+ v  p7 H
  35. {
    ( M$ }* k8 {) O3 P( R; ]# h! L6 H" ]
  36.         HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,PinState);) y0 t9 M9 v. O3 {% j
  37. };
复制代码

0 R! c3 H0 t9 R0 c        在main.c加入key和led实现,在代码预留用户自行区域加入自主编写代码,这样cubeMX改动后再次生产代码不会修改抹去自己已经写入或修改的代码3 A2 o6 F  L  g7 _- L- t
1 ]9 L* t% C9 J0 ]2 @) u
        添加头文件0 c! K( _4 X- v
4 \9 I6 u1 t) e  v
8761282e3c5a47228b95dfc8bb19e60b.png
8 O% c- C# l% \1 a. P/ P  d. Z( W$ {/ R9 ?8 `! G
         添加函数调用实现,可自行斟酌调用
, Y2 M+ a  H( X3 o& Q
$ v0 ]$ g% T- v/ F4 J
ec76797598bf425ebdccd8c6eefe3cd6.png
, R0 `: T  e/ {) ?/ s5 m$ V* f0 ^

5 I# _. K% K  Y. K          右键点击项目,进入属性页面(也可以直接菜单进入),勾选本项目编译程序输出文件格式支持
" O9 F/ _' M- Q8 P% s, ]
8 f% B. p4 k' e0 L3 g( j6 R
37fc1ae9d2a74b60ad7a608342cf7195.png 4 }; F" Y, o* x9 E. [3 j5 a
- w/ ?2 Z8 ]% ]1 f0 f1 P
         点击编译按钮完成编译
0 w; B7 j/ l4 b- ]' |9 T* e$ o2 J
. l/ G* q0 r6 K) j' f
ef6f05b27c524b0096f4f66378b2a963.png
0 U( P6 O' n' [) J* h' O0 K  A  p% \( q
9 Q- Q1 H/ |: s0 i! }

9 ^: |$ \1 M. H& q- y% m" g四、加载已编译程序到硬件及测试/ X. I1 H1 h! u: O! m
        点击help->ST-Link更新,运行配置更新,便于直接将编译好的软件下载的硬件上。# g' u/ {6 k. o1 J3 _, g
4 W) ?) ?: E/ |/ s; b/ A
03d2f645130642a888a7d5e9acec7c91.png ! v3 E' ^3 M8 R% a8 U3 I

* |$ O# r2 P' g* X- a1 z; o6 S        点击运行工具按钮的运行配置,进入配置页面,在STM32 C/C++ Application新建调试配置,每个项目仅配置一次,后面就可以直接点击运行按钮加载编译好的软件到硬件,
& c& K) d/ S2 i4 O) C8 x6 N. H+ Y# d. u
ea188220de4d4ed29e1951d485731ea9.png
5 B% G1 p0 u. ]5 A; `7 Y+ O; _5 s. }0 K( P. x1 `# M
5a25da299d8e4c92826f620cf30bafe0.png
& A0 h! t% h" Z
# r. \4 ~3 m$ b8 c- Y        将电脑与硬件用数据线连接,点击运行下载程序
+ N0 \$ X) r( o, O8 q! V- k  o' U$ \3 }- r4 D& C
4ce304e2ee5f469ca23b922e33ebd259.png
. [7 n$ {# [3 o! H' @( ]# s" [1 d! a4 R4 E0 `7 d7 V
         或者采用其他下载工具,如STM32 ST-LINK Utility加载
0 C) W2 u) J. g' e0 q$ [0 u
, q" X& y3 \1 e7 z1 u$ @
8e6b4813a59849e6937a4b00119d0e11.png
* N8 }# ?7 H2 o# q! X1 T- q, T2 T6 Q7 O( b
五、程序运行效果
/ v8 H4 j* G0 Z4 U" h8 A# K, X7 A        展示效果如下:
4 F" G% f5 D; `. ^( S0 w4 ?
  1.    Toggle_led2();//闪灯
    % w3 D. C- B0 R: U+ A5 ~+ n8 m
  2.           set_led0_val(get_key0_val());//按键亮灯
    6 D  i$ ?& ~6 ?
  3.           HAL_Delay(100);
复制代码
) x4 W% T9 C2 s) s
        【1】闪灯6 X7 h- c5 ^( e+ V
  q7 S  Q" L) V# U8 r, z
23e5ea2f47a6412aa7db675750266d84.png   _* ~; P2 C/ k

: Q8 e/ U* C* h4 `4 q" U         【2】按键亮灯+ X% D- H7 h" ?( d7 t5 t
2 p2 z, R) h/ @/ e2 h! n! v* Y
2efd57ebd5f9409f8c7630dfe3b75e91.png ) Z$ O) E& N8 |

* Z# d4 X( a+ X, W2 T9 \0 s( v6 T3 s8 Y————————————————
" K' n  x( L( o# d5 g3 @; H. v版权声明:py_free-物联智能
2 O% p6 k* n2 g! \; H如有侵权请联系删除
3 X. U2 `. d& c' _! M9 ]& A, \
0 t8 z4 m" I6 t: c6 }, I3 o9 F9 x
' b: X1 R/ v) a7 f) Y
- M" [# a6 b' @) g
收藏 评论0 发布时间:2023-4-7 14:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

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