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

基于STM3的开发环境搭建经验分享

[复制链接]
攻城狮Melo 发布时间:2024-6-15 14:45
“ 从ubuntu20.04入门到完成stm32程序的调试。”
/ B9 S0 T3 C1 Y( _2 g4 }+ {9 w
/ i- h6 }  h3 l. L6 [
微信图片_20240615144535.png " a1 t: @, d. H8 D! g

, l$ v. T; G; c8 D' {3 v1、更换软件源
; ?% V* g: O5 \2 c2 k4 A源文件(sources.list)* v2 r; y5 N$ l: N0 s
更改源(Ubuntu20.04对应的源)3 P) V- O6 P0 F( `2 h
更新源6 K* V! r" J/ e7 x8 |

/ w8 f' F) C* J" ]  a; R' @' ^2、安装拼音输入法
+ A; s) x& D) N2 _: ^9 vRegion&Language->Language Support->Installed Languages6 y  P" \7 p1 l3 x1 p4 H
Input Sources->"+"->chinese->Hanyu Pinyin
9 l5 a- T1 P0 j8 B9 m8 T. h' X5 t" P3 L) O) ~7 e! G
3、安装VSCode+ _' J( `) y4 n3 E7 X: N) b( x
下载.deb程序包
2 l& j; p8 b3 D使用dpkg安装
- B: ~5 p1 `, G& {, X, i4 ]调整设置
4 T! F  B% ?4 [3 v9 [启用Title Bar4 _3 c% f4 |! v% ]  C9 x7 R
安装插件
3 I6 m0 q% ~) E& D* t+ I  {9 {: U; X
; J, @) k9 {' Z2 n# u* {- a, S
4、安装Build Essential及gdb
3 L2 J2 M2 K6 W+ R  i: Ebuild essential介绍9 f, Z" }$ g8 F, i2 k0 m. @* K
命令行安装build essential和gdb/ o" E* f  k( B# o" q, Y; @& W
Linux C程序开发简介. N' j% ]2 X7 |- s, p1 Q
无makefile
- d, g( `* v$ y- O8 Q有makefile
3 U+ T9 S7 j4 H! o; `; Z生成.vscode文件下的debug配置文件
- Y# w* ?- G' t5 ^1 q" X8 P1 z生成task.json文件/ R! R% F: j7 k: `
生成launch.json文件+ e, L$ Y' G1 e! I8 S
生成c_cpp_properties.json文件
0 b- [+ m8 U8 O- \8 F  V
2 A% P( S" C% O2 G& P
5、安装Vim
5 M$ p' i* B+ F: m" }% I+ Y
, I6 c3 O; O/ r& d
6、安装gcc-arm-none-eabi

+ D3 f5 Q6 A" w) A* e* I* ?下载嵌入式gcc编译器  e4 T! r) Z+ o' M( p& [
解压
2 A% s  v2 P2 d% ^# \添加gcc-arm-none-eabi下的可执行文件命令到Terminal
1 f+ l. j0 m4 b. k+ X% _
' d- c( e7 D9 o& m( E: }( {% i
7、安装stm32cubemx
% g- l/ {; [! l! P+ g7 J下载stm32cubemx- f. M2 ?1 o( s/ e0 E" `7 ?
安装# T+ L/ ^+ h- K6 `3 a
增加图标到菜单. \6 J0 P- }5 L) x

# t' C4 q! `" B8 y3 E9 c# L  v
8、使用stm32cubemx生成初始代码
+ F* y7 F$ r! A: p选择芯片->配置->Generate7 j6 Z4 `# w8 M9 I3 q$ ~4 I
勾选PinOut-Debug-SerialWire
" B/ J+ b9 s: d: Z. [8 z; s' R8 n2 _' E2 w) q  v" `+ K: Q
9、配置VSCode
6 g+ u) `$ ?7 b. Y) p使用vscode打开上述生成的初始代码( r- k- Q: O  u- S, {8 [
生成VSCode配置文件% g! l6 R( D( q+ C) x
c_cpp_properties.json+ a8 r2 o3 g* V+ K9 m8 @
task.json% ?# X2 _: y3 Z! R9 k9 K  b
settings.json  o$ a) n( F* \! y; i, @" T+ ]
宏定义包含
9 A# ^3 G$ k& Q; s$ f# a2 Hmake编译/使用ctrl+shift+B
( R# x4 y" Y# Q& u9 k+ r( M  j0 I" B5 t
10、调试! a3 t1 B- n% q% D
安装openocd
# {$ B8 E# s% Y* j8 a& D/ e在tasks.json中使用openocd进行编译后的下载
/ ]5 b+ U- d( w/ L- ^! D9 Z使用openocd进行调试. }1 p4 u6 [: q* R4 J* H9 m3 [
安装Cortex Debug和Venus's Cortex-Debug插件- E3 ?# M: f2 U# C" X/ P; ^4 q$ T8 k
添加调试配置' |. u2 U! H" s. W
选择cortex debug,生成launch.json/ o/ o- x  I0 M3 U
调试
( z9 n* \! v# e" k# U8 E6 H5 x7 J/ i( @! o) ?% _8 M7 Z
11、使用VSCode串口工具
4 T6 l( A! C% j9 ~, ^, {. c安装serial monitor# X5 f% P7 N: Q7 _* k. N3 Z  T
查看连接的usb
# n2 N/ ^* |- O( D7 s加权限
0 ]4 l, f3 r: ^$ P
+ w8 E; K2 X0 [" q. v$ ]
12、使用git3 K* n" b# S" V
01更换源
: `# b# H$ ?1 B. q$ V1、源文件(sources.list)
1 [9 w: B* W, h5 w4 H; F- jchen@ubuntu:/etc/apt$ ls -a+ M1 ]1 Q! I& H( l; `7 r% Q! |
.   apt.conf.d   preferences.d  sources.list    trusted.gpg.d! n: h* n. Q  H4 ]3 ?* i4 O' I
..  auth.conf.d  sources.bak    sources.list.d6 d6 \9 k4 r, i; P+ U% `  O3 {

, z1 @- a0 h2 j6 M  J2、更改源(Ubuntu20.04对应的源)4 a; y0 I& J* c5 R) r8 ~% A2 z
  1. chen@ubuntu:/etc/apt$ sudo gedit sources.list
复制代码
  1. #阿里源(Ubuntu20.04)1 ]$ @. `$ ~5 h- _1 Z
  2. deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse# f1 I0 f9 k- D( O( I
  3. deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse( l" D, ^# J; q/ Z9 h% d- F1 e1 y
  4. deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse2 t" u5 a% J8 p5 ]5 [$ B" g( u
  5. deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse- V7 e" J- n3 R' P7 q/ C
  6. deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    # z3 ?# D: Q) g  r  b8 P
  7. deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    ' I: X" r1 b& C* X2 D# V" X) B
  8. # deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse! L$ F0 ^3 i5 [8 _5 t
  9. # deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse/ a3 h* B1 }5 W' ^
  10. deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse7 M7 r) U& e$ V! {! I1 E8 n
  11. deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
复制代码
  1. #清华源(Ubuntu20.04)2 [5 W2 R0 K8 V
  2. # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    : h6 {( f, d/ H8 ~
  3. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    ; d& d1 t: R/ o9 W& v
  4. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    ) X5 ~& X9 u- T0 X  j
  5. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    9 m+ ~* f7 V8 z) k! U. h( x; j& s
  6. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse: Y8 K9 b$ c( ^" v# R9 O
  7. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    7 w5 S. J! v0 r( Q; ~0 C
  8. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse$ D/ A7 O- s; x
  9. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse8 U8 [1 Y% l1 _( Y5 I* O! A* F( J
  10. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse; U* f; [* m& ]7 i# U, s0 H
  11. 7 X$ O, G7 R3 @, I

  12. 9 s/ M- T: {; N0 k8 m
  13. # 预发布软件源,不建议启用, j0 D9 Y# ^0 h$ s
  14. # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse2 a" ^/ q# D& V9 A( U
  15. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码
  1. #中科大源(Ubuntu20.04)8 [( \5 ^$ L; _8 O, {6 m
  2. deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
    / S- h5 Z. u9 p; X( k; h$ J
  3. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse2 c/ K+ Y/ f* V# w
  4. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
      s' [/ _. H3 w! o
  5. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    9 \. A  k# |  P
  6. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    2 C: Y; S% ]  J! }0 [# s
  7. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    0 F7 K/ u# `; Y) M& L8 |
  8. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse; N5 x! b# I7 }
  9. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    + J: t3 y; a$ o. ]& v( H+ e
  10. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    . ?+ d. S4 z! t6 l3 \' N( P. E
  11. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码

# o/ J. ?2 C" V" p' i3、更新源
/ `- F  [# e4 p  A1 Z
  1. sudo apt-get update
复制代码
0 d0 }, @) U7 v9 j- X' m/ ~
02安装拼音输入法
2 k. x* j  Y. G  ^1、Region&Language->Language Support->Installed Languages1 Y" i3 }; G9 i* _/ N
; ~% b( ?. i6 K& M+ \2 Y$ \+ Y0 h; r
微信图片_20240615144532.png 8 R5 b# n1 {4 V- m9 e3 q

2 I/ f' s0 q8 z1 W2、Input Sources->"+"->chinese->Hanyu Pinyin. ?) M* g6 c/ p- x; B
  1. chen@ubuntu:~$ sudo apt-get install ibus-pinyin
    7 W, L9 w/ }& x4 ^5 O& a% `6 e
  2. chen@ubuntu:~$ ibus restart9 L( Y! W/ J& n4 X8 L, D
  3. chen@ubuntu:~$ ibus-setup
复制代码
' M  o; e4 G/ x* r
微信图片_20240615144527.png - ?% X# [+ ]- t6 D9 C
( ?. i0 p0 i. {2 G6 F' a) Y
微信图片_20240615144524.png
  ]( e! S$ T* L$ d! k4 z( I8 M5 U9 Q0 g: A- ]9 d- h
微信图片_20240615144520.png / A7 t2 `5 E1 s4 `

9 p9 x6 ]8 l; W7 n. d03安装VSCODE
2 {& R( q) Q* Q2 }' w6 i4 ~3 p1、下载.deb程序包https://code.visualstudio.com/
2 E+ J' M( t! H- `& N6 q6 X, }. ]/ {
2、使用dpkg安装(在Terminal中Ctrl+Shift+C为复制,Ctrl+Shift+V为粘贴)
/ r9 d9 v5 @; ]; ^* d
  1. chen@ubuntu:~/Downloads$ sudo dpkg -i code_1.89.1-1715060508_amd64.deb
    & Y6 x- p2 x- Q( y/ e# t
  2. chen@ubuntu:~/Downloads$ code .
复制代码

1 {% Q( d  c3 K+ g3、调整设置
+ a! v& f. E4 Z7 H! ?启用Title Bar:View->Appearance->Editor Actions Position->Tab Bar
0 |% Y/ ^4 v. l% X2 q* |9 p) b8 Q% L7 i# `" o$ G! c( ~
微信图片_20240615144516.png * o$ s8 H4 Z+ l, j3 D+ {& E& R
% v) L1 x, ~/ V" t" Q7 r$ D
4、安装插件: j' o( ]  h) V
git安装# ]7 r) x8 {  v* r4 m6 n, {" h
Download Git for Linux(https://git-scm.com/download/linux)* d3 h4 Q) [( j& K% K" I
2 C! O, C: {+ D3 @% H) K3 G4 d& C
微信图片_20240615144512.png : N7 U4 V" A: C8 y) e8 {! r

# v% K9 P9 n8 @% g- e8 C: P9 L 微信图片_20240615144509.png
$ D9 F6 Z$ X3 {' }% O
! r; V+ T8 E5 w2 w
命令行直接安装(Ctrl+Alt+T呼出Terminal)
" @2 d# V8 n& n
  1. chen@ubuntu:~$ sudo apt-get install git& F3 K: z7 r+ Y& s" o9 {
  2. chen@ubuntu:~$ git --version
复制代码
0 \% [( O- X' o% v  ~
git设置
9 |$ s9 _* q) K/ ]# g( K  \+ a& ^+ L& q
微信图片_20240615144504.png 6 U8 Q! r' W; |2 q$ t6 D& j2 ?
0 Q  B- L5 k+ B
  1. git clone https://gitee.com/kevinkerry/linux-stm32.git
    8 _% U4 o1 H# K1 F
  2. git config --global user.name 'kevin.kerry'
    * p4 ]; b6 {# N) Y% r
  3. git config --global user.email 'ct15762287606@outlook.com'- ^, v& m  I  L+ {! Z- z: r2 z

  4. 5 o  d; O& ?1 ]" j+ v
  5. " m' @1 R% I5 n" c0 r0 v4 |
  6. #示例
    ; U3 I; i) G2 x4 j3 m& P" e
  7. chen@ubuntu:~/prj_vscode$ git clone https://gitee.com/kevinkerry/linux-stm32.git
    ! Q) |2 z) r: i/ H. h
  8. Cloning into 'linux-stm32'...  u% n# z. v( E. b0 G" _' w- K
  9. Username for 'https://gitee.com': ct15762287606@outlook.com/ z1 K# q6 W. J' ]# _) a2 ^! ~
  10. Password for 'https://ct15762287606@outlook.com@gitee.com':
    9 I7 d! N) @, a% t: C! M# B
  11. remote: Enumerating objects: 4, done.
    . O' f+ f; [0 q# D$ q" i" v6 }  X
  12. remote: Counting objects: 100% (4/4), done.
    2 g- }2 v, b- n% D
  13. remote: Compressing objects: 100% (4/4), done.
    + g* Q( K) K# f6 X  F' o5 Z- z, z
  14. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 03 z+ j- V+ v( ^* y' [) [- u) a
  15. Unpacking objects: 100% (4/4), 1.79 KiB | 1.79 MiB/s, done.8 F! t5 f+ @; _& Z% |3 G# D
  16. chen@ubuntu:~/prj_vscode$ ls
    5 O2 N- |* X# |+ D- H+ E
  17. linux-stm32
复制代码

/ R7 o. a: ]7 ~* w0 bGitLens — Git supercharged插件安装
/ t2 ^& q8 {( T8 W6 Q: m
4 {  T1 q# u/ f6 J$ Y, F' l
微信图片_20240615144459.png 6 D* M3 W1 |- H% L+ i9 B

% P+ C: b$ P3 h% }% A2 {Git History
% [: M* i$ f$ d
; g& S! g3 L4 K* K3 U, j
微信图片_20240615144456.png . e, s! _+ n/ R
% a+ A/ ], y2 N  U3 O8 p
Bracket Pair Color DLW$ p9 j2 S) C4 U1 r+ h

# J2 Q- o# I- K2 p1 R! Y) j
微信图片_20240615144454.png
/ N1 F# G6 X* ]1 M/ }
0 c4 N0 T0 Y% ~) s; B* OArm Assembly
6 k5 d1 u4 X) C! q: q  a
1 R" U! Q$ f  K
微信图片_20240615144451.png 4 j+ e  `/ V% q& ^% ]; D
. }9 l4 D5 A" e/ j5 }/ {$ ~
Venu's Cortex-Debug( j( R! c6 V  ]  U

( r- }) @5 ~9 e5 }# \
微信图片_20240615144447.png " n# M" X1 q" n, r

2 V! U* y0 M  T6 v! W2 K4 zC/C++$ z( z7 |5 u5 u& y0 M2 o

6 Y# _1 x% w( {/ z. }3 Q
微信图片_20240615144437.png   h1 r2 l) \: d" l4 q' s  \
% e* j) ~4 O9 y0 V5 A  v" E
04安装Build Essential及gdb- I8 j4 Z7 ]& g& f7 W% A
1、build essential介绍8 x8 P' _3 l( {0 v, ]
build-essential 指的是编译程序必须的软件包。它本身不是一个软件,而是一个工具集,包含了在Linux开发程序的一些必要的软件包,包括但不限于gcc、g++、make等。
5 b* t6 L7 `! U* b: w. q' \$ P# t* ^3 G
查看该软件包的依赖关系,可以看到以下内容:# c* W) ~8 X% z( Y
  1. chen@ubuntu:~$ apt-cache depends build-essential
    + G" I/ ~( ^6 T( k, B
  2. build-essential- o. \6 C2 G; ~2 h# s3 N, O
  3. |Depends: libc6-dev% a6 x& F7 w6 D4 o3 s6 m
  4.   Depends: <libc-dev>
    ! |  ?9 j4 x& t
  5.     libc6-dev
    9 ~! M, v, q$ ?- Q6 H3 \0 x- A
  6.   Depends: gcc
    " ~& J4 `9 k: N) C! S  o7 C( p
  7.   Depends: g++' ~" R9 _" I4 ]3 T* f3 T9 T
  8.   Depends: make6 @- |! d, d% N, X
  9.     make-guile
    * J, O% x: b# u
  10.   Depends: dpkg-dev
复制代码

; D3 U: B% ~1 O* ~也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可以了。0 z! l1 x. q* T0 ?5 L

! v5 ?2 m$ A8 O; N. B/ ^- ^2、命令行安装build essential和gdb; A" j* c1 t/ ^2 _( b
有时候可能会需要安装gdbserver
% H- w% e* ?/ z) x4 M$ X
  1. chen@ubuntu:~$ sudo apt-get install build-essential gdb
复制代码
, v3 h, a& [! w. X
3、Linux C程序开发简介9 u: v: Y6 w% Y& o
3.1 无makefile' B/ M9 B& N+ s+ ?# @) ?; x
  1. chen@ubuntu:~$ mkdir linux_c. N/ s7 w$ [' K7 R
  2. chen@ubuntu:~$ cd linux_c
    1 M, }3 Y% p  ~" D
  3. chen@ubuntu:~$ touch hello.c
    0 ]# H% ~  f; A9 e
  4. chen@ubuntu:~$ sudo vi hello.c3 S) B- X: Q* a+ O$ n
  5. chen@ubuntu:~$ cat hello.c
    - q6 K: J+ _% K2 P# |4 g
  6. #include <stdio.h>
    # W* c' {  E) y$ B+ e: A  E
  7. int main(int argc,char *argv[])
    - J$ s1 q5 ~3 r2 g* c" A
  8. {
    . [9 W& U3 ]; X9 }* o  u& _
  9.   printf("hello world\n");, ]+ t6 B0 r0 v
  10. }' V" V5 n+ X! c) G1 J& x7 w
  11. chen@ubuntu:~$ gcc hello.c9 `$ z$ H+ \( ^: P1 _
  12. chen@ubuntu:~$ gcc hello.c -o hello% X& l  [& y  K1 M' X, o/ I7 S) T
  13. chen@ubuntu:~$ ls -al
    6 M9 M. l, X0 ~6 ], Q$ \, ^5 o
  14. total 525 R9 u5 A  F2 }) \
  15. drwxrwxr-x 2 chen chen  4096 May 16 18:32 .
    ) J* Z: T' n; n; g9 A6 L
  16. drwxrwxr-x 4 chen chen  4096 May 16 17:37 ..1 a7 `4 `3 ~1 ?7 r
  17. -rwxrwxr-x 1 chen chen 16696 May 16 18:29 a.out  |; l9 J2 W1 k  y! ?; E  h# ~
  18. -rwxrwxr-x 1 chen chen 16696 May 16 18:32 hello. s3 W, a, I0 F" a5 q
  19. -rw-rw-r-- 1 chen chen    82 May 16 18:29 hello.c3 u2 i; s  \$ z- G0 _
  20. chen@ubuntu:~$ ./a.out: N7 [; [; }( R+ c: j4 o
  21. chen@ubuntu:~$ ./hello
复制代码
+ f, @) [# R* j* ~9 k9 I/ p, |+ M) ^
3.2 有makefile
6 i( K  c6 b  P2 }; I3.2.1 创建程序文件
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch main.c input.c calcu.c input.h calcu.h
复制代码

& l% Z8 j; ^9 G- Y0 e: I- d! Hmain.c
0 W: ~: A6 B# B" P% M0 W# d+ V9 p, M
  1. #include <stdio.h>' O6 s! S, V% [
  2. #include "input.h"/ U; b" y7 n( P2 [8 S
  3. #include "calcu.h"# y. b* J  H1 i; q7 [4 U

  4. , f/ f; `0 P+ P( r$ V
  5. # ?8 H! W$ y0 g! `2 B8 K* i0 y# N- U7 d
  6. int main(int argc, char *argv[])+ i7 v. A% p' k: f2 ~/ u. G. F& p
  7. {- T& s1 Q! g9 ^9 E0 M+ m0 p
  8. ) G/ y6 R5 N4 E6 B
  9. / H$ q: n* C' ?8 v
  10.   int a, b, num;" \8 \. T. H5 R& ?( m* e
  11. ( _. v% n! X" N5 T* {4 |

  12. " r" @. f* c* l2 c& h, U
  13.    input_int(&a, &b);" K( J  U. i/ |& k$ ^
  14.    num = calcu(a, b);
    % v- |: [; }7 s7 n0 ^
  15.    printf("%d + %d = %d\r\n", a, b, num);" B/ H$ h9 g# f. v, B/ m# \% t* v
  16.    7 c* ?; X( h! f1 K
  17. }
复制代码
& [+ k8 v" e* X
input.h
  1. #ifndef _INPUT_H% L" f  l! |7 u. Y6 R, s5 s' F) @
  2. #define _INPUT_H
    / G! {; q$ H6 ~4 g  S
  3. 9 C- S& i7 I. n$ \. K7 D0 Q# [$ t- X! f( a
  4. void input_int(int *a, int *b);0 E' F, ~2 ]4 z+ C/ e! X% H$ c1 K

  5. 2 b; S2 ~  c: d
  6. #endif
复制代码
4 s2 E, E1 H2 R5 u! Z
input.c
4 c9 U: x) S$ z5 z
  1. #include <stdio.h>
    3 A# u& s! e1 A, s' h- t
  2. #include "input.h"6 e' G3 O$ |( A* H
  3. 7 _; E% p3 n/ _* q5 c
  4. ' I+ i" m, n/ o
  5. void input_int(int *a, int *b)
    6 L) ]9 W0 n; l5 H- \5 B1 z
  6. {, f! P" j( K* F8 K
  7. printf("input two num:");5 X, _! o9 }0 `2 p/ r
  8. scanf("%d %d", a, b);
    2 L) C! K$ o5 A2 ?& o
  9. printf("\r\n");
    6 Z  X# M& t) h/ H3 c8 @) @
  10. }
复制代码
: e( w. `8 a) x( L* h/ a5 ]1 ]9 C; D
calcu.h
  1. #ifndef _CALCU_H( c1 k' X* l; L
  2. #define _CALCU_H; J, r" [0 G/ v4 J  s/ v8 U
  3. " o6 E% O- H8 V) K1 u

  4. 0 B% j" I3 z6 K- o
  5. int calcu(int a, int b);
    9 H# x. K% x! g% E- d6 u  R
  6. #endif
复制代码

# d; ]1 o7 I- ~2 G0 V' Scalcu.c
' T( M6 z; t& A: X% ^
  1. #include "calcu.h"
      k' I' j5 d, J: O- b  P- {  q! x
  2. 0 W9 n  `; B* }8 _; Y
  3. 4 V0 O# i: |+ J4 N* H5 U. n; k, Q
  4. int calcu(int a,int b)2 E* i7 }) k) K9 Q
  5. {7 K9 d- G! _* B! \, H) i
  6.   return (a+b);* G6 |# I5 `, l$ b3 b3 d, j
  7. }
复制代码
$ j) N8 B! i) a& y+ R0 C
3.2.2 编译测试一下
' ^% r8 v# L0 Z' x2 ^; a9 [
  1. chen@ubuntu:~/prj_vscode/linux-c$ gcc main.c input.c calcu.c -o main8 g- Q0 Y6 C) I! f+ R2 d+ p* Y' j
  2. chen@ubuntu:~/prj_vscode/linux-c$ ./main& D& m9 g4 T) F; l
  3. input two num:23 565 v3 S7 a% u- ~. w( {1 T8 W& Q1 z
  4. % j4 a9 C! }7 m
  5. 3 B& D. T3 M* q
  6. 23 + 56 = 79
    / M. A) v% y: M: q0 n: B  ]4 L
  7. chen@ubuntu:~/prj_vscode/linux-c$
复制代码
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch Makefile
    9 O* j( _5 e! m4 F+ O, w
  2. chen@ubuntu:~/prj_vscode/linux-c$ cat Makefile5 M: o+ z( j( u
  3. main: main.o input.o calcu.o) E, E5 z4 V+ @2 {& K) }
  4.   gcc -o main main.o input.o calcu.o5 E, N1 E5 {3 I5 R4 |  m
  5. main.o: main.c
    ! _2 A+ F3 L! v$ }+ m) G
  6.   gcc -c main.c
    8 X- |; J# U( O7 `+ z8 r
  7. input.o: input.c, Z9 {9 H8 \' l& t' ?) W
  8.   gcc -c input.c; n  L" ]7 p# y& @9 G
  9. calcu.o: calcu.c
    5 W! g5 C2 F' p  u
  10.   gcc -c calcu.c8 Q( Q+ ~6 L7 }1 F
  11.   ^. w% L: ^$ f4 H: R  {

  12. " s3 \8 r6 l: k7 w3 Y
  13. clean:# m# `  T* M! P
  14.   rm *.o
      ?  j7 b1 ?1 u
  15.   rm main
      B6 j: K1 h6 K+ ~( C1 }$ U
  16. chen@ubuntu:~/prj_vscode/linux-c$ make clean" v  r1 @( }* ^5 ]
  17. chen@ubuntu:~/prj_vscode/linux-c$ make
复制代码
- }4 `# |! n5 Q2 g+ C
4、生成.vscode文件下的debug配置文件' o9 i) O# {# Z/ I
tasks.json:该文件主要用于配置编译的选项,如果使用makefile或者cmake进行编译,则用该文件调研make或者cmake命令进行配置。. Q( D. B; h+ ?3 K! s' u6 u
launch.json:该文件主要对debugger进行设置
3 k0 ~" D- p) c  ]# y+ }2 u6 Hc_cpp_properties.json:编译器路径和intellisense设置
& U8 ?* X3 H5 S% h" q) b1 |
' |, n. h! F- s$ R& T+ B
4.1、生成task.json文件3 g2 e# o& f# [4 s8 k0 M

5 @5 K  M& Q2 Q! g2 _/ ]2 C
微信图片_20240615144428.png . w; G$ }$ U+ u# v3 g
图4.1.1 Run C/C++File. J; X1 K" d" ?, Y3 L
' |8 d3 n4 e, `. K6 Y" U, j
微信图片_20240615144424.png
4 b) s7 q3 ^4 d" ]( y' H2 f. X1 b: p( G7 f7 e3 c3 o7 S* H
修改生成的task.json文件如下
; C9 x- D; e4 z! g
  1. {
    + ^7 f+ z) d4 A6 G9 S
  2.     "tasks": [
    6 s( T$ P* c+ w/ }9 d
  3.         {' b3 j' ?% i; j2 Y6 p
  4.             "type": "cppbuild",
    . E; R! ^6 M2 a) n; d5 T
  5.             "label": "C/C++: gcc build active file",
    ) u" b: X( a  H! p" ^
  6.             "command": "/usr/bin/gcc",
    " V7 Q3 v# ~" s( {' H' `
  7.             "args": [
    9 B/ l, u0 w3 A/ S
  8.                 "-fdiagnostics-color=always",# J* `4 T! A: M; a5 ^
  9.                 "-g",
    ! s' S/ |! V; X6 J) t
  10.                 "${file}",' c4 e+ [' U: K" E" l1 p
  11.                 "-o",
    & a1 `" A8 o$ K8 d2 D  \! H
  12.                 "${fileDirname}/${fileBasenameNoExtension}". _# t; W3 a  j
  13.             ],
    ! r/ Z% G$ ]! b" A4 I4 f
  14.             "options": {
    . G/ _- h: R, r! e7 s+ M
  15.                 "cwd": "${fileDirname}"1 }& y' G0 S! Y! `$ T( q4 {
  16.             },
    # k3 F8 {. i2 A* y+ _
  17.             "problemMatcher": [
    * J, P9 j6 S9 G( H6 a- c
  18.                 "$gcc"8 i9 }6 `& b5 I; h0 R1 d9 I
  19.             ],
    . t$ _4 ^* i* i" s9 |0 a
  20.             "group": {/ V+ P0 n+ {0 E7 _$ A3 ?' b. A
  21.                 "kind": "build",
    : a- i$ T" ~5 |6 b
  22.                 "isDefault": true- Y' G; W( h  c
  23.             },0 h+ e4 Y, f) B2 \0 K" n! i
  24.             "detail": "Task generated by Debugger."2 ?$ @/ j+ S1 a% r1 p4 L; j
  25.         }2 a; z( B" e: O% z
  26.     ],
    $ C8 P! N0 Y, m; j: w
  27.     "version": "2.0.0"- {9 a# V) X8 }5 a# @
  28. }
复制代码

0 C- c& Q; C( D  U& C; M修改如下
  1. {2 v5 l6 u2 a' j
  2.   "version": "2.0.0",' T9 \& ]$ G) E" }8 x: B
  3.   "tasks": [
    0 w5 F: v4 H9 }4 L* [2 }5 N/ I
  4.     {
    . u$ I' [( h( A6 G" s( a/ [
  5.       "type": "shell",. I6 q8 {. f- B( f9 g2 Y
  6.       "label": "C/C++: g++ build active file",
    , {! |, w% |. R* B4 P9 O
  7.       "command": "/usr/bin/g++",
    - E( E  u" V) g
  8.       "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"]," J6 p' b3 W0 F# t% Z
  9.       "options": {
    , w: [8 o: I$ t/ M
  10.         "cwd": "/usr/bin"2 m: r1 V3 |/ X! U" A9 u
  11.       },% f. {1 M$ ]  A+ D' d$ B
  12.       "problemMatcher": ["$gcc"],
    # _& A$ q3 x* X+ ^1 V& a
  13.       "group": {
    % e' T; S# \  E6 t! l4 b
  14.         "kind": "build",
    + R( P. v' ?% w: P" L0 i+ z/ h/ p
  15.         "isDefault": true9 n: o: _. D, u
  16.       },- ?% B! F8 w! a' P0 Y
  17.       "detail": "Task generated by Debugger.", C+ B" @) F' D2 U
  18.     }  `0 ], B) z9 T( c4 E
  19.   ]
    7 g0 v8 @3 ]; ^; B0 D
  20. }
复制代码
0 H% K/ x" q+ ^/ I, Y4 H
command 代表使用什么程序去执行文件,这里使用的是g++. args表示的是传递给g++的参数,表明使用了什么文件(-g 后面的file文件所指内容),生成了什么文件(-o 后面文件所指的内容)。所以这command 和 args两行参数表达的意思是:使用g++编译器将${file}文件进行编译,生成${fileDirname}/${fileBasenameNoExtension}文件。$ e: z1 M( o0 N& p# U! l, h
/ g5 N2 a: ]/ A. x
上面部分是对单个c++文件或者多个c++文件进行编译。但是如果一个项目使用makefile进行编译,则如何使用vscode 进行配置呢?我们这里进行讲解。由于我们使用make进行编译,所以我们将command命令后面加上make,args后面添加相应的参数。比如我们需要进行debug 所以要控制makefile 中所有的gcc编译命令后添加-g。不然的话,就会出现,编译成功了。但是debug的时候,断点无效,所有的执行都是一下子执行完的情况。由于在我们的makefile 中通过TAG = dbg来控制加不加编译选项-g,如图3所示。所以这里我们的参数添加了"TAG=dbg",这里根据不同的makefile进行不同的配置。5 p& y6 [" ?# S) H. c/ Q1 ^
  1. {
    - D& t( ?5 [8 S* l' T
  2.   "version": "2.0.0",# Z2 S! y) t+ F7 |$ J+ \, y
  3.   "tasks": [" g# h7 }2 t. j5 C
  4.     {
    " e% |5 n0 W4 @4 r) X
  5.       "type": "shell",
    0 {2 J# `: T( P" F
  6.       "label": "Build",8 m; w) t/ W4 M& {5 `9 C4 P% T
  7.       "command": "make",
    " \# ]; w' T1 p; |
  8.       "args": ["NTHREADS=1", "TAG=dbg"],, }3 p. d- U2 z! o, h
  9. ! f& Y' t$ T6 c9 _, j
  10. " k& n4 [+ A$ D% [5 t1 z  u
  11.       "group": {
    4 M) y' |5 F; q0 ~% ]. a( a+ o9 b
  12.         "kind": "build",
    / Q2 M$ }7 T, z# C5 l( p: Q
  13.         "isDefault": true/ E) q( p9 @! f
  14.       },
    8 W# q0 L- _* z2 @
  15.       // "detail": "compiler: /usr/bin/g++"
    6 H; U( T6 T  r: O8 Q
  16.     }
    / F( L  N! U+ V7 C/ R; g
  17. ; o  f, M" Q# @% [- @- i
  18. }
复制代码

4 z0 a. |3 s7 }" D& h一种可行的Makefile文件内容(gcc后添加-g命令)8 V2 ^! f: J% h$ l
  1. main: main.o input.o calcu.o! R! m  l. M5 [: c! c
  2.   gcc -o main1 main.o input.o calcu.o
    6 X' A. o& [9 K- q( Q
  3. main.o: main.c) d& `6 ~3 f; T- [' ?) Y8 G
  4.   gcc -c -g main.c; E# F/ `8 |# J7 x* _
  5. input.o: input.c
    " {: J, z2 \3 T8 ^0 y( X- D& ]) R1 Z
  6.   gcc -c -g input.c
    8 q- I9 W+ @* ]$ o& L/ h
  7. calcu.o: calcu.c
    + q* d; P2 Z, Y+ S0 n
  8.   gcc -c -g calcu.c' o* N1 M& m( a6 A/ P* P0 p1 V
  9. : @7 P2 n5 c# i3 _9 |

  10. ' a7 r  P( H9 f, p1 r8 I; f1 E
  11. clean:+ m2 }% s0 Z8 f/ R/ c5 f! v) J
  12.   rm *.o5 r$ L' W; {# H4 c0 f- a! N
  13.   rm main
复制代码

  m4 X7 j* t$ r' p1 t4.2、生成launch.json文件
3 N( M) v# z& p2 \" u% F(注意只有在.c文件中才会有下图中右上角的图标显示)$ W9 N: y( r# U3 `6 z0 a- v

7 `- J. O9 a6 z* l4 C! w; Y
微信图片_20240615144421.png
, m# h) v) d6 o0 G* |0 P- i/ ^
2 [! I9 Z% L' i: `7 b 微信图片_20240615144417.png ! {- L9 S1 h" u3 M) B/ b
图4.2.1 添加调试配置文件
$ b3 r% f! a1 W
  1. {
    . \' U' c  V6 S
  2.     "configurations": [
    : i  G8 W3 ^" M  x  `: A
  3.         {
    - y. Y  d9 n" R# [- F& U9 m* c
  4.             "name": "C/C++: gcc build and debug active file",
    8 R* y& D6 f  O; e' ?. M9 Z3 U8 N
  5.             "type": "cppdbg",5 r* n) V4 b8 N# X3 E; Z) z! r
  6.             "request": "launch",
    + X  ?; ?9 z  D1 `5 ?0 v' b
  7.             "program": "${fileDirname}/${fileBasenameNoExtension}",
      d6 ^; c/ y. D/ |1 x* f
  8.             "args": [],
    2 a) Z$ g# _( N+ u3 r# G, b$ y
  9.             "stopAtEntry": false,2 u8 [5 a- Z& E" w0 @
  10.             "cwd": "${fileDirname}",% `. f: ], F, t+ b4 C7 X
  11.             "environment": [],
    3 `: K' t2 n/ y$ n8 P8 |& o( p5 L! j
  12.             "externalConsole": false,3 T( _! T' v0 i* U8 L! x) O! c& c2 E2 c
  13.             "MIMode": "gdb",8 i" L) x; _7 u9 V; _
  14.             "setupCommands": [
    $ J, {+ n+ {& A$ o$ e# b% `: W5 x
  15.                 {$ @9 T4 d8 X+ @$ u& Q
  16.                     "description": "Enable pretty-printing for gdb",! v9 O+ p  J- F1 k0 s0 L( g" a
  17.                     "text": "-enable-pretty-printing",
    " }0 U1 U7 Y, O7 I4 x' F4 s
  18.                     "ignoreFailures": true7 V/ U3 L. o3 y$ ~& y
  19.                 },  P1 E+ S' }+ Y+ _3 a
  20.                 {
    7 X# q: I7 T1 r3 U. E, V
  21.                     "description": "Set Disassembly Flavor to Intel",; {/ I1 ]. T3 l" Z
  22.                     "text": "-gdb-set disassembly-flavor intel",
    7 [# c( {2 o5 w6 Z
  23.                     "ignoreFailures": true
    2 U5 Q& u/ l0 D+ f8 C, S) @0 ]4 O
  24.                 }$ u! E/ k% c0 p6 R/ f" C" U1 w+ h
  25.             ],
    . _3 E- }9 W8 p3 r  }- |
  26.             "preLaunchTask": "C/C++: gcc build active file",9 w8 k! X+ C% P7 X6 T% r7 B; T
  27.             "miDebuggerPath": "/usr/bin/gdb"5 i( T, ^" P) M& q& R0 x
  28.         }* D- e3 W# a+ u, }- [& @. v
  29.     ],# v8 r$ j$ B& l- P
  30.     "version": "2.0.0"
    3 d, b- j3 V9 M' F
  31. }
复制代码
  k8 ^% e1 U4 p: s$ ^* r1 a0 t
修改生成的launch.json文件如下# Z; s% l' W: V
  1. {
    ! Z8 m( x+ J, Q% `7 ?
  2.     "configurations": [
    : N; P& V1 `( W* Z* r5 I
  3.         {
    + f. f8 ]7 ]+ Z3 r% a- x5 @6 p
  4.             "name": "C/C++: g++ build and debug active file",! j/ V2 T! M9 q" `2 I
  5.             "type": "cppdbg"," v( b% {, @7 J' j
  6.             "request": "launch",
    1 K' A9 g: ?9 J# F* E" i. r, Z" [
  7.             "program": "${workspaceRoot}/a.out",3 ~: f" m4 G# `1 @6 D0 f) e
  8.             "args": [ "1232"],
    9 d+ A  f- {. ?$ }7 U9 m
  9.             "stopAtEntry": false,( T! {  a8 T- z5 Z. x
  10.             "cwd": "${workspaceRoot}",
    / u- r8 y9 d, V+ X  D
  11.             "environment": [],
    ; t: M$ f/ B) t( v
  12.             "externalConsole": false,
    2 w- Z; y. b% g! S1 F8 {
  13.             "MIMode": "gdb",; |/ D" U2 A4 }& Y: {
  14.             "setupCommands": [
      k) q* u1 M! k$ S/ |
  15.                 {
    ! `. G1 g& e; V+ A& y3 O4 r
  16.                     "description": "Enable pretty-printing for gdb",
    1 U3 _  j4 D2 j) U' o
  17.                     "text": "-enable-pretty-printing",
    7 `+ d9 c. @2 b! L% p
  18.                     "ignoreFailures": true6 k; i9 S/ C0 n8 ^2 N
  19.                 },4 c7 E& N- {( x. R* E
  20.                 {  Y+ S4 W$ S$ a2 |& X
  21.                     "description": "Set Disassembly Flavor to Intel",1 U: ?1 p4 O8 f* ]" O$ l# T* J
  22.                     "text": "-gdb-set disassembly-flavor intel",
    , ?% x7 N  S5 z9 K) `* z1 i% y
  23.                     "ignoreFailures": true* b9 ]2 V! p9 E/ W
  24.                 }7 _6 d5 B/ p& k; Y* z
  25.             ],6 R% F5 Y# E% R+ k3 F8 `4 k
  26.             "preLaunchTask": "Build",
    9 t/ m* Q- B, b" y7 m
  27.             "miDebuggerPath": "/usr/bin/gdb"
    0 q: C$ O  k6 J% @8 z- M, s
  28.         }
    ( y7 ~2 b9 e; q
  29.     ],  l1 f0 D2 k0 F  c; x/ U, _, X
  30.     "version": "2.0.0"9 @' W, P7 c3 S; r' [7 W) X; s# P
  31. }
复制代码
" x* x1 b. U, @' S/ A; q4 R
"program"选项代表,需要进行调试的程序,所以这里需要修改为对应的文件。"PreLaunchTask" 代表debug流程的前序任务,这里的内容需要和tasks.json中的label相同。"args"可以添加执行程序的过程中,需要添加的参数。在下面的代码中,我们就添加了cacti程序,以及参数。
8 S# K% U, b3 n7 \
8 P  _# Q# E% V+ g6 [& R
4.3、生成c_cpp_properties.json文件
+ @4 G: f' [* N/ ~1 k5 P$ ^ctrl+shift+p 搜索C/C++:Edit configurations(UI) 即可生成该文件$ I8 X. U. X9 F" f4 z
  1. {7 c6 K6 l0 g% ^5 ]' j: Y% s
  2.   "configurations": [6 A2 }6 @' n; B1 y" o
  3.     {
    " w' P7 ~9 H# b' ~8 K$ Z+ e
  4.       "name": "Linux",
    2 p: L% B  S  h+ I! b: O
  5.       "includePath": ["${workspaceFolder}/**"],7 W6 G* Z7 L& R" M* i9 \$ H  B
  6.       "defines": [],
    " u8 g- M# q8 y" [# z1 E' \1 G
  7.       "compilerPath": "/usr/bin/gcc",6 h/ p0 q$ a6 q7 h) h: i2 e
  8.       "cStandard": "c11",& N1 O7 n7 n% ]& A: E  c* T# d
  9.       "cppStandard": "c++17",
    + f3 B+ N! c5 M$ [2 r' T& X
  10.       "intelliSenseMode": "clang-x64"+ I$ C* C, W% U9 F. _0 ^
  11.     }
    0 _. a% g4 s3 T6 E$ z' S
  12.   ],6 c" S' R$ ^7 e. ^
  13.   "version": 4
    % f, h# X0 D# a) O) T
  14. }
复制代码
$ w8 v% t) {- G  n- a( q
05安装Vim
4 m4 z  c$ y5 f' w! P1、命令行安装8 r7 s8 ^' n1 I3 r; Y/ D
  1. chen@ubuntu:~$ sudo apt-get install vim# ?, E' M' I& M4 T+ X
  2. chen@ubuntu:~$ touch a.txt
    9 M* \$ s8 L) l9 {
  3. chen@ubuntu:~$ sudo vi a.txt
复制代码

8 }: i  w$ c. [3 j06安装gcc-arm-none-eabi5 N4 N) X; U* z+ w+ o' J3 K
1、下载嵌入式gcc编译器
( n! `/ A5 ?6 X8 R/ K& }3 H( g4 `3 [https://developer.arm.com/downloads/-/gnu-rm
5 R1 Y0 l6 B; S; n) Q6 r  [5 r- ~5 M$ g7 G% z8 j: ?3 T
微信图片_20240615144414.png
4 ^; s* m$ ~3 _) @/ f8 y# U- I: L0 H' Z) v! D. x
2、解压gcc-arm-none-eabi-10.3-2021.105 z. ^: l1 N, ?7 q; p' J  T
  1. chen@ubuntu:~$ tar -vxjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
    ! v2 O( V* g( J, J, f# }5 S
  2. #对于bz2、gz文件解压  Y  @2 _/ o' e, J' T3 ]
  3. tar -vxjf test1.tar.bz2
      v+ t  B" w' k# h
  4. tar -vxzf test2.tar.gz* A6 ~: I* r6 Q7 P5 H
  5. #对于bz2、gz文件压缩9 f3 U( R2 L8 r5 h; _: _8 M
  6. tar -vxjf test1.tar.bz2
    9 Q! r: g9 M- J; e" G9 f5 u: y8 }
  7. tar -vxzf test2.tar.gz
复制代码

: C# X0 ^$ x, ~2 s, s8 V9 i3、添加gcc-arm-none-eabi下的可执行文件命令到Terminal(终端)
3 j6 \- a* \/ B+ F0 |, n
  1. chen@ubuntu:~$ sudo gedit .bashrc
    1 ~, Y' s3 t) f/ k. C0 B; r
  2. #在文末添加下面一行- X+ Q% s4 X" B* f$ B1 `
  3. export PATH=$PATH:~/gcc-arm-none-eabi-10.3-2021.10/bin$ j& Q7 G& X' l! v# b9 V
  4. #添加上述行
    2 L2 ~, |8 i% q
  5. chen@ubuntu:~$ source ~/.bashrc+ s/ M8 I7 z( x) ~# |) l
  6. chen@ubuntu:~$ arm-none-eabi-gcc --help2 K# W* x, n  ?* \) X
  7. chen@ubuntu:~$ arm-none-eabi-gcc -v
复制代码

/ Q) x2 \9 `: \8 w% K+ u  X% D07安装stm32cubemx
" q  Y% T3 N4 L  Y' H5 u1、下载stm32cubemx2 ]9 e' h3 H1 }% t
https://www.st.com/zh/development-tools/stm32cubemx.html8 J. Q5 {! l4 I: O) x

4 w/ \9 B! E# B* [1 @9 S! m* R1 P
微信图片_20240615144411.png . s8 X& u7 i4 h2 D* j" X& H

3 O. G  }# W3 [) l  _1 y' R2、安装
  1. chen@ubuntu:~/Downloads$ unzip en.stm32cubemx-lin-v6-11-1.zip8 y/ d$ p* ?& z# T% b' ]( m
  2. chen@ubuntu:~/Downloads$ sudo chmod 777 SetupSTM32CubeMX-6.11.1+ }' p# ^. H% d5 i2 c& o! a
  3. chen@ubuntu:~/Downloads$ ls -l% g: W2 @0 p& \; U
  4. -rwxrwxrwx 1 chen chen 539136342 Apr 11 09:41 SetupSTM32CubeMX-6.11.19 ]! |8 d$ y. i0 n! @# k8 v# ~& d/ u5 f2 z
  5. chen@ubuntu:~/Downloads$" {% F7 ]3 d* O& v# P& S
  6. chen@ubuntu:~/Downloads$ sudo ./SetupSTM32CubeMX-6.11.1
    % S7 p  {. x) L" `6 o1 L
  7. chen@ubuntu:~/Downloads$ find /usr -name STM32CubeMX
    ( Q" S- `. v) P# x  d$ A, b
  8. chen@ubuntu:/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX$ ./STM32CubeMX
复制代码

' H& ]: U; Z" I) a- i7 y* W3、增加图标到菜单
$ j8 i5 x. Q  d  R& K7 ^
  1. chen@ubuntu:~$ /usr/share/applications/
    0 B1 O$ A; B7 J: X  L
  2. chen@ubuntu:/usr/share/applications$ sudo touch stm32cubemx.desktop
    8 l3 i! z6 a! W8 a. r) P3 D4 Q
  3. chen@ubuntu:/usr/share/applications$ sudo gedit stm32cubemx.desktop
    8 r% @5 T; `7 {. E* S. B3 d6 G
  4. chen@ubuntu:/usr/share/applications$ cat stm32cubemx.desktop
      m0 f& c) L3 w* y4 f
  5. [Desktop Entry]% w+ O7 b8 W1 K
  6. Type=Application
    + y2 j( K1 h; F: ?/ B
  7. Name=STM32CubeMX
    * s# \: e* M9 i0 Z0 P. V
  8. Comment=STM32 Development Environment5 L, K1 k7 X# ]
  9. Encoding=UTF-8. t/ I8 G4 N: g7 {1 e5 N
  10. StartupNotify=true( j8 X3 o  w  {) Y0 Q
  11. Terminal=false' `4 U3 c8 X6 T9 z- U9 ~% s
  12. Categories=Development;java;c;c++;
    / l/ U- m8 H7 x. x- z1 G) g
  13. #icon= ##########图标的路径,自己找一个就行! [3 ]& r2 K: I$ {. z0 i9 l
  14. Exec= /usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX  L1 k0 f/ U+ E7 `" N& Z& x+ Z
  15. chen@ubuntu:/usr/share/applications$
复制代码
* S8 Y5 q# O, W- z/ P5 A2 r% N2 M
08使用stm32cubemx生成初始代码
: C6 C1 X8 ~" m* F1、选择芯片->配置->Generate
1 Y9 t' b* B. f. {: I
6 L; m" J  F5 E3 K  t; A
微信图片_20240615144405.png
5 f5 J; z8 h1 \$ k' h5 i; \. H( k3 Z4 _) C- \3 P% }# x
2、一定要记得勾选PinOut-Debug-SerialWire否则后面下载程序时会报错Error: init mode failed (unable to connect to the target) 。这个是巨坑,一定要小心!!!!!!!!!!
& k" z# l2 h& }( Z. E( k2 k- o, y7 @' D1 K- G
微信图片_20240615144355.png + c2 v- z" X" o# u+ F
- _/ G- E' F( K3 @  v
09配置VSCode4 V) q- [2 }! z4 Z7 w  e
1、使用vscode打开上述生成的初始代码; m$ I1 v/ p, E5 `* `2 d+ H
2、生成VSCode配置文件
8 W# m! [* G$ D& e2.1 c_cpp_properties.jason
$ B& A; `9 |* Wctrl+shift+p->Edit Configurations(JSON)生成.vscode/c_cpp_properties.json文件
/ T$ ?, L( `% |+ M, U- D( k$ D+ M7 Q6 G# U/ l8 ^, q
微信图片_20240615144351.png 3 S' H6 D4 z! q) O6 j( i+ Z
  1. {
    6 r2 z) j& |* B( ]
  2.     "configurations": [8 d9 P4 u4 u* @& e
  3.         {/ s- S; L. }  X# J% f5 G: u
  4.             "name": "Linux",. u, u4 h5 E9 j+ }7 r
  5.             "includePath": [9 k% x) O  `+ c4 a+ o2 J# Y$ e
  6.                 "${workspaceFolder}/**"7 K- }( d; x$ P- h- o1 ]+ \
  7.             ],
    & @" z5 V4 G: K, k7 I
  8.             "defines": [* R9 p1 }9 t2 ^; B+ N
  9.                 "USE_HAL_DRIVER",
    ( `- v' ~- L7 ]# _5 k% E  ?
  10.                 "STM32F103xB"$ ]& j0 o/ b9 \. C
  11.             ],8 d% q. `8 [1 F4 D) [8 \) S4 p/ R: Y
  12.             "compilerPath": "/home/chen/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc",
    4 J8 Q2 P! G: q! z" a' c
  13.             "cStandard": "c99",1 w3 `9 C. C3 p: K) q+ r
  14.             "cppStandard": "gnu++14",
    # ]! K1 B) U7 Z  N
  15.             "intelliSenseMode": "gcc-arm"* B! ]: H- H( v/ L6 w
  16.         }8 h: \  l4 m$ I, w
  17.     ],. |# d, u: q5 |+ ?6 D3 \. A; I
  18.     "version": 4: M0 k& w9 t  c% `1 C1 W
  19. }
复制代码
3 a' a1 }* _" S5 x" A0 Y
2.2 task.json
: H8 T0 {2 `. I5 `+ a' D$ O: ~修改好task.json即可使用ctrl+shift+B对stm32工程进行编译$ H& r) O$ B! Q% h4 N

7 ^  _( U+ F+ O
微信图片_20240615144348.png
8 v7 a" C! C) A3 a
  {3 |% o4 j( b# }
% c# N8 @' W1 Y' X# o
微信图片_20240615144344.png
9 }' }7 U5 t6 O' M( B1 D

, _. y% V: v* a9 H( o$ k/ s- |& l! {" r1 K3 a
微信图片_20240615144341.png
- o, Y$ q& m) G( N3 C$ C- a7 ~& u2 W
* u9 S/ B3 T% l1 ^
6 C! x" O' N. R9 ~# [8 s8 G修改如下:! h8 O, }: l7 ]' m4 j/ k- g8 Y
  1. {
    8 C0 R9 V8 v8 z4 r/ w
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558* D/ B# D0 L' z0 Q
  3.     // for the documentation about the tasks.json format' E4 }( ~: f  @- u
  4.     "version": "2.0.0",! I& s7 w& g3 J, q
  5.     "tasks": [) Y, ^$ [8 C5 X3 T8 b. L
  6.         {
    4 n8 A9 h, u; t+ X+ K4 {3 f/ N
  7.           "label": "Build",      // 标签名1 j; X$ m0 U( V+ r. B: ?" T
  8.           "type": "shell",      // 终端(shell)型的任务# Z# {1 b: \# b* |
  9.           "command": "make",    // *执行的命令
      N) A: N* V; K
  10.           "args": [          // 命令的参数% ]& ?% C; O' N1 C) u5 Q
  11.             "-j6"          // 表示六线程同时编译. G1 V) V; H9 U
  12.           ],0 N2 O/ A! u6 c
  13.           "problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误7 E/ y7 `3 X3 o( t5 S* p0 t" O, P
  14.           "group": {/ f0 M% V% a, F6 L3 r4 S6 r% a
  15.             "kind": "build",
    , Q7 O* n$ H/ O1 g5 N. n' X; I9 B) ~: M
  16.             "isDefault": true
    9 b* A9 ^% l& c$ z$ d$ ?
  17.           }
    & g0 }. u, Y- S9 x7 J0 ^
  18.         }
    ( d; r% p3 H" s" T

  19. 8 p/ h' G8 _, e& g/ V' o9 z
  20. }
复制代码
/ C- C) r: G3 C  I, @& l
2.3 settings.json
) a$ T# w3 }( ?* x
  X0 T5 u" O3 e- y: Q# ~
3、上述”defines“字段中的定义应包括stm32cubemx生成的Makefile文件中相关的宏定义
1 D4 L6 J; U# ^, k0 Z0 C1 ?2 c9 W* c( E8 K, H- s" l7 z+ l) D2 v9 N
微信图片_20240615144337.png
; t- ^  s8 J( A) V0 N
% C% f. n# u% {0 @3 K8 x  b4、make编译/使用ctrl+shift+B
& Y% p/ T2 M/ K! N, a
  1. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make clean
    " ?: ]- |+ c. u6 D4 v  J$ k
  2. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make
复制代码
) R* w8 _% g* E/ h3 U9 v4 S6 f
10调试1 e* o8 k6 z" |0 t! n' ?
1、安装openocd
  1. chen@ubuntu:~$ sudo apt-get install openocd
    . v$ X+ w1 a" f1 r! F" s
  2. chen@ubuntu:~$ whereis openocd% @8 e% O; a& H7 c+ m' B4 s  z
  3. openocd:
    3 \1 s' ~4 h+ F( g6 L% x
  4. /usr/bin/openocd
    - |9 x% O4 F; c8 b
  5. /usr/share/openocd 8 V# i2 J% z) Z, m
  6. /usr/share/man/man1/openocd.1.gz
    ! ]% X: Z: ]' f
  7. /usr/share/info/openocd.info-2.gz ! i/ [; E& F# K/ X- c
  8. /usr/share/info/openocd.info.gz
    ) W' ]+ Z' d7 ?2 H" F  Q
  9. /usr/share/info/openocd.info-1.gz) e. \( m* j( O# S
  10. chen@ubuntu:~$ 4 R2 N, h6 t' y
  11. //连接好stlinkv2-1到电脑和pcb板,输入以下命令。完成连接! [( o6 D* r6 O
  12. chen@ubuntu:/usr/share/openocd/scripts$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg
复制代码
) ]' B8 l; ~8 F0 K1 q
2、在tasks.json中使用openocd进行编译后的下载
1 X+ n2 i! v: h" S4 v
, \5 G& U  |3 ?5 U2 C在原本的tasks.json中追加popenocd的相关内容
$ I2 |; i2 a: `
  1. {" c9 E. E* a  f
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558
    8 D+ E' {0 p8 \1 P- R2 ^; Z4 [# \7 ~2 }
  3.     // for the documentation about the tasks.json format+ ]4 P; k4 X3 G
  4.     "version": "2.0.0",% K' t; D8 O+ I6 j9 y* ^/ A
  5.     "tasks": [9 D  M! U4 Y# t/ F0 e
  6.         {
    ) z' P+ C: c) M9 y* y- T
  7.           "label": "Build",      // 标签名
    " w  R# Y3 t6 ~: W; r
  8.           "type": "shell",      // 终端(shell)型的任务# B, h# o) _9 g# n7 ?! o7 `3 D
  9.           "command": "make",    // *执行的命令: e! u. |. t3 C  b; U) R7 x" [
  10.           "args": [          // 命令的参数. q: k2 x$ R7 O. A0 M9 k
  11.                           // "-j6"表示六线程同时编译
    : m" B3 O8 P  _* e; R
  12.           ],
    , i# B3 `7 \6 {" A, R6 a. W; W
  13.           //"problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误, k; \4 u5 h& u; k, G
  14.           "group": {/ y) p$ n4 Z+ u8 t$ \/ g
  15.             "kind": "build",
    # ^3 N8 l7 K  r) v
  16.             "isDefault": true' t  P/ U: F6 s+ v/ H, l' F
  17.           }& y2 j) T0 N2 R8 ]
  18.         },
    6 C$ U, d7 R0 z7 b4 x7 s
  19.         {
    4 W6 c% O7 g$ ^+ `
  20.             "dependsOn":"Build",          // 任务依赖4 R$ f1 D- Q0 @; \& a
  21.             "label": "Build and Download",
    5 g2 }7 ~. t0 z4 j9 x3 j5 A7 R3 X* q
  22.             "type": "shell",
      x6 z% P! }* ^; o# S
  23.             "command": "openocd",
    , O. n4 Z% Q1 G+ q6 ~
  24.             "args": [+ o  h- Q! q% t  z; o( R/ S) L7 f  k) ~
  25.             "-f",. S' [2 I5 ~+ w2 y* T
  26.             "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
    , s% I5 x8 t1 n- m7 H- V& R
  27.             "-f",
    3 ?- v) b  I4 A8 K* h, W, K( n4 c
  28.             "/usr/share/openocd/scripts/target/stm32f1x_stlink.cfg",/ L5 n6 c) y( e8 j1 [, ?
  29.             "-c",; ~1 [0 W6 Q% l0 K5 v1 ~% W
  30.             "program ./build/${workspaceFolderBasename}.elf verify reset exit"8 H5 S: q% ?7 Z. l9 s! {$ c1 n
  31.             ],% F3 ]! Q$ s* y7 R: E  z
  32.             "problemMatcher": []( a& z1 A! ]% J( O# ~* a
  33.         }
    % ]9 e, M9 w8 V" Y! b  \: Z
  34.         
    4 p$ t  H  x. \0 u( m3 A9 R% {

  35. - h4 W9 \; f& w' X& V
  36. }
复制代码
  m+ r6 z# W( a
这个任务要求先进行 Build任务,然后通过命令打开 openocd,加载两个配置文件(-f interface/stlink.cfg 和 -f target/stm32l1.cfg),同时,这个 -c 的选项后面跟着的就是openocd成功加载后执行的内置命令,这里我们让它下载、验证、reset,然后直接退出,这样就实现了一条龙式的下载。
: n  v5 @; X; C+ K
6 G7 r$ ], W( ]% X  D
微信图片_20240615144333.png
% R' \  H, ^- _- i
5 v+ N* Z7 m* _7 T0 ~5 A 微信图片_20240615144330.png
; l  o2 ]/ W! a  {) K5 E. {: i, T8 X  G1 f9 `9 ~# _! G; {9 G
3、使用openocd进行调试0 o2 ]; H! R! Z1 e
3.1 安装Cortex Debug和Venus's Cortex-Debug插件(第二个插件一定要安装,否则会报错Failed to launch OpenOCD GDB Server: Timeout.), U9 c7 c/ d( o5 g& t) b. d5 a' b% B

; ^" H# K  k( U# U( o4 I0 u
微信图片_20240615144327.png 3 E9 d: i, ?& R, \
8 q8 G% E! F% L
微信图片_20240615144324.png * C# P( ]9 c) u
' K& }" q3 \& [6 m9 C
3.2、 添加调试配置
  n; K/ f; z. r! `: X! o$ M# v8 x6 C/ R1 t, R
微信图片_20240615144321.png " `9 Y8 X% O" O; l# |" x2 p
2 o' O8 M" T& g/ ~7 c
3.3 选择cortex debug,生成launch.json,并修改内容如下: S8 i/ B$ k8 i" G

& P1 P2 U9 g7 i$ {3 \0 S2 u9 b8 N
微信图片_20240615144318.png . J" \, u7 }! w9 i, M

+ N) s8 j  l8 U! V: a3 Z4 ]! Q/ k
  1. {
    " A8 r( C6 l0 X2 F  H: N( j
  2.     // 使用 IntelliSense 了解相关属性。* P* j) q% b$ C, ], I! \
  3.     // 悬停以查看现有属性的描述。
    * P& f1 _# b3 S' z+ S+ u" v
  4.     // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=8303877 [. ~) s1 ]* a( ~/ F
  5.     "version": "0.2.0",  z# n* v& P" V1 n9 Z
  6.     "configurations": [$ z, |% A" J: j0 U% p7 y
  7.         {/ M6 H9 m$ c( q5 k
  8.             "name": "Cortex Debug",
    " ^1 m* E3 V- J' t& f1 x7 i
  9.             "cwd": "${workspaceRoot}",  // 输出路径
    % p  x! t' o( d8 n# b9 X; `# y
  10.             "executable": "./build/${workspaceRootFolderName}.elf",    // 要调试的程序
    : b3 D1 z. E4 V+ _- [- O* g
  11.             "request": "launch",
    . u' @/ `7 E0 ?; o) S) z( P' O) k
  12.             "type": "cortex-debug",2 M1 b) a( B0 v# n" l/ I5 g0 Z
  13.             "servertype": "openocd",    // 调试器选择
    / O1 x0 w; ?$ r& D
  14.             "device": "STM32F103C8",    // 使用J-link GDB Server时必须;其他GBD Server时可选(有可能帮助自动选择 SVD文件)。支持的设备见 https://www.segger.com/downloads/supported-devices.php  U3 n. [1 S/ l- P+ y5 i$ L
  15.             //"svdFile": "./STM32L15xC.svd",  // svd文件,有这个文件才能查看寄存器的值,每个单片机都不同。可以在以下地址找到 https://github.com/posborne/cmsis-svd下载, C4 f2 ]1 d% z$ D- o, d3 b7 y; a: S
  16.             "interface": "swd",# `5 f/ r1 ]4 W# {, g$ b, I8 W
  17.             "configFiles": [
    % }' W1 w. n& |" s* U
  18.                 //"${workspaceRoot}/openocd.cfg",  // *可以通过加载该文件来配置
    % S! q& a: q( d9 i, j
  19.                 "/usr/share/openocd/scripts/interface/stlink-v2.cfg",8 H! E, u3 z" q0 X1 Q7 R6 j
  20.                 "/usr/share/openocd/scripts/target/stm32f1x.cfg"
    ) V+ n: o& n9 T/ N4 u, H6 R' @
  21.             ],5 C% k( s3 N# K- E  {8 R( Y
  22.             "runToEntryPoint": "false",; ?) I2 K" ?. b% w! Q( O+ E& O) |
  23.             //"runToMain": false,
    , L, T/ X3 n- ^) d6 t$ v0 e+ E
  24.             "preLaunchTask": "Build",   // 在调试前预先执行的任务,此处是tasks.json中的
    1 E6 Q' r+ K, ~8 _
  25.             //"armToolchainPath": "C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin"    // 如果没有把 arm工具链路径添加到系统环境变量,则需要这条指令添加你的路径+ o9 w& R" Z. o7 T
  26.         }' S  I) d! P% F; L" u

  27. / c) m2 H3 G& ~5 `$ b
  28. }
复制代码

5 X1 y7 G- T* X  U3 a8 t3.4 调试
' p# T8 Y% W# {* `' l4 Y: W. @! ^* z0 `% T# f
微信图片_20240615144314.png # I& L7 m9 r" B) E5 o4 r. o

7 B0 F& g8 Y, ~- d11使用VSCode串口工具
) E) [9 u! I( \. c6 H& S( F% e% f
1、安装serial monitor: x# d5 B: e. Q7 ~4 S# \) ^3 u8 l# C

5 Y  M* U5 a! N, Q5 K0 e: y, C
微信图片_20240615144304.png
+ X- q  h- G, D5 v1 M5 s5 d( v
4 R$ {* _( P3 f" q2、查看连接的usb* R* ]0 N& V* ]! D, |. v' J
  1. chen@ubuntu:~$ lsusb4 p; h9 V2 f' h  T
  2. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub5 M" f! q  ^$ S
  3. Bus 002 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
    * c( e/ F' U  y( B% H
  4. Bus 002 Device 006: ID 0483:3748 STMicroelectronics ST-LINK/V20 |" ^- k0 G4 Y
  5. Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse2 X0 b/ B* c" S  K( m
  6. Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
    : }. @/ o0 i- R% e! v2 a# Y
  7. Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse. u" |4 w1 t$ ]& H
  8. Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub8 N3 ~' }2 P+ Y. Q4 d" L# e
  9. chen@ubuntu:~$
复制代码

( l: D5 b7 |5 D8 P( ~4 A" q. d  U2、加权限
  1. chen@ubuntu:~$ sudo chmod 777 /dev/ttyUSB0
复制代码
, T* o+ b: z- k- |$ G* d0 v2 h% l/ Q
12使用git
) Y/ U# H0 F1 U8 \( [$ U1、检查状态6 f4 A9 r5 ~! {5 {+ }
  1. //在执行 git add 和 git commit 之前,先执行以下命令查看当前仓库的状态:
    ' H' A, t2 {: Y7 T* z1 @: Z; B
  2. git status
    9 I6 `- K9 j5 |  F9 |+ B! K
  3. //这将显示工作目录和暂存区的状态。确保没有未追踪的文件,也确保已将需要提交的文件添加到暂存区。
复制代码

! p3 N7 M9 d, ^4 ^1 j+ j2、确认 Git 配置:
0 [  c) h- C5 ?2 u7 G' i! q  }
  1. git config user.name
    ; }$ B7 L; F- }% X
  2. git config user.email
    4 w& A& d* A" h& O! G) C' x
  3. . n2 }- C. l0 ^8 B

  4. , r& H. \5 z( f2 P
  5. 如果没有设置,请使用以下命令设置:+ ^3 `; Q1 e6 V
  6. git config --global user.name "Your Name"' ]4 H# j$ ^1 ]0 r2 _" i! ]! O6 R9 t
  7. git config --global user.email "your.email@example.com"
复制代码
' _; l! J& \; e( g* x4 B9 d  i1 V  V) q
3、检查文件权限; v8 P" v2 e4 o; u( Q2 `
确保你有权限在新文件夹中进行写操作。使用 ls -l 命令检查文件和目录的权限:
  Z3 T& `& |3 o7 e% ?/ }! E9 o% gls -l6 R  T$ f. T. R% J
7 b* j+ o8 E7 |/ f- w% S& }* Z/ @
4、查看错误信息:
# T: s+ S( g& R& U) A如果 git commit 操作没有反应,尝试使用 -v 参数查看详细的错误信息:7 n  K& Q6 @6 l. S8 y
git commit -v) K3 z1 |- x' K( K' d( n  u0 P3 O

, J; D9 _/ _: K3 b7 c" u7 ?, R
5、清理缓存:
) P. ?) {' L1 m有时 Git 的内部缓存可能导致问题。尝试清理 Git 缓存并重新尝试:
: |/ ]' u+ y' ygit rm -r --cached .0 \, G) W: X7 E) X
git add .
; k- n1 }5 y7 y) S& Wgit commit -m "Your commit message", Z! j, y+ r' w' {  t
这将清理缓存并重新添加和提交所有更改。. ~1 X- U8 @8 L* K9 y% w

+ ]% G6 r9 Z: ^0 M
8 P7 G$ L7 P' E. f5 f
转载自:kevin  `7 B: K( s" ?4 D% y# z2 v
% ^$ T5 R& e' a
如有侵权请联系删除% T) t0 P* y) R3 w' }. @

6 v8 K8 x- I0 Y/ y9 l6 c! F+ _

) [+ {' M7 C; m5 H& s( p( q
% t2 s( W. ~' c/ `' @) B* L
1.png
收藏 评论0 发布时间:2024-6-15 14:45

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版