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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 14:45
“ 从ubuntu20.04入门到完成stm32程序的调试。”
. k% Y- [% L, K8 ~/ t
- K4 B( q4 R5 R; L
微信图片_20240615144535.png
$ ?: V6 K% C8 P, y) R. T

1 `1 `: ^  g( Q1、更换软件源
1 Z5 \" h, m5 ]& O" t% [# X" p% {8 L源文件(sources.list)
* z- A4 k8 U6 O3 m' ~更改源(Ubuntu20.04对应的源)
; @% e  v' [' b2 M- o2 O更新源0 r0 y% J/ s5 j. C6 u" Q
2 d- t  y. z7 I) \9 Z: @, ~+ W
2、安装拼音输入法& u# R0 y7 F( G- I5 t
Region&Language->Language Support->Installed Languages
% u( }$ C6 J5 y" QInput Sources->"+"->chinese->Hanyu Pinyin/ ]* m, b  W& f9 @0 a! p

! D& {* K: y. |3、安装VSCode
  @. _. m- J% {$ y下载.deb程序包
6 g9 N( X/ P: w% {. ]使用dpkg安装
4 ?- @0 N6 z7 k& C调整设置
# z" C* v0 e3 Q+ n2 b" W启用Title Bar
$ m, L3 p  ^* c: A& l安装插件
% Y. S$ Y# h4 t. |6 c, ]6 Q4 S8 B% f6 v$ p( q, F2 I- t
4、安装Build Essential及gdb) I# y( n6 M; n5 u- L5 `
build essential介绍& R  G' P: E5 T: H: z1 G/ ~1 H
命令行安装build essential和gdb
! D" B& ~  Y2 ~! zLinux C程序开发简介4 B8 q0 K% f& t, |8 A( M: g& m
无makefile
( \$ @; _4 `; M4 j8 ^$ Z6 o有makefile# b5 d9 x4 i7 [- N: u4 u1 f
生成.vscode文件下的debug配置文件
, ^, z7 N, [, t0 [4 [8 t/ f' w生成task.json文件
: l! e; I+ g, l" j* E生成launch.json文件- F: n) h. Y9 i* h  t) `" k8 L
生成c_cpp_properties.json文件
' N1 |. `. Q& a- g8 |
! d) ^0 A6 X; X# }( z5 e
5、安装Vim
7 J- x% g) n, X8 w% j, ]
2 _* |) Q7 _. I! z
6、安装gcc-arm-none-eabi
  D! r* L; g8 }7 j! Q# J# X
下载嵌入式gcc编译器# V5 {- |2 O* J) M9 p
解压+ r& s$ y& I$ b3 a/ \$ N; m
添加gcc-arm-none-eabi下的可执行文件命令到Terminal) G6 U/ c: @& q0 I- a# m

0 D/ @0 F" H) h* \! f
7、安装stm32cubemx2 S+ N/ r. o; b6 F6 ~2 [
下载stm32cubemx7 m  D/ u% m2 a: p# C4 b, j* d" U
安装
3 {  f+ _9 ^9 C& {) p* K2 j& A增加图标到菜单+ j, }7 T  h& q: H

: E* A# J; ?+ ~! {
8、使用stm32cubemx生成初始代码
3 ?" v: g0 ^, ~( r- `2 G& B2 f8 X- Q5 z选择芯片->配置->Generate
' m  O5 E9 i" I$ y0 u8 }$ ]1 |  ~勾选PinOut-Debug-SerialWire
' c- H1 C" b( P# P
+ c1 g7 h8 ~6 \( [7 ]& L
9、配置VSCode/ o: J" d9 A  N  P; @# L
使用vscode打开上述生成的初始代码
- Y; a0 H& O) ?# x生成VSCode配置文件
% O' e& J4 o7 H; ?7 @3 o% ?, y4 t% ec_cpp_properties.json1 a5 V6 t' q6 x2 U2 ~$ p' Y
task.json3 x1 a- v: L2 C6 q
settings.json
/ `' S3 Z% d1 L. n宏定义包含
, @+ L5 L5 }: i# M; gmake编译/使用ctrl+shift+B
; ?* G7 E; Z) }  |: P; f3 t) j1 m6 m  b( M
10、调试/ m" ]6 D# E' L
安装openocd- E# g8 n4 G& m1 L) E4 ^* b  k
在tasks.json中使用openocd进行编译后的下载
" m8 Y  ^+ {* k$ G$ p) h" c, ?$ R使用openocd进行调试# ]2 Z! d8 w$ ]6 b
安装Cortex Debug和Venus's Cortex-Debug插件
1 Q1 C: C* Y1 M% J添加调试配置: F' B3 D7 f$ ~) \0 j1 p  Q
选择cortex debug,生成launch.json  C. h  G: [7 _( L7 q
调试9 q9 P* ~, x  |8 n& M' M

6 |) p! u) F4 I
11、使用VSCode串口工具
4 }2 l+ L: X0 T5 l# M4 u安装serial monitor
' {+ C% g) o3 v3 c4 V# p* C; b查看连接的usb, x* I0 z6 I0 z( F: y& d# k, i2 @
加权限
1 l4 |2 Q- y2 d# Q( Q4 F$ O
5 [5 j6 N- x' [5 O+ T" H9 q7 u
12、使用git
* U7 O2 \/ g/ Z/ z8 p( \01更换源
/ ]% J, [) T3 E) H1、源文件(sources.list)4 B! f/ z: k. ?% K
chen@ubuntu:/etc/apt$ ls -a! K) R1 `+ O* e! _2 P9 R
.   apt.conf.d   preferences.d  sources.list    trusted.gpg.d
* o5 ~& v& u0 O0 c3 r2 H& i..  auth.conf.d  sources.bak    sources.list.d
3 U) I4 F5 T7 r+ h* m2 L! `; o, _2 ]# b
2、更改源(Ubuntu20.04对应的源)
1 I0 Y1 X5 Q' w7 Y1 u+ X) I# V
  1. chen@ubuntu:/etc/apt$ sudo gedit sources.list
复制代码
  1. #阿里源(Ubuntu20.04)
    , P2 d; `& w: d0 D2 O5 E
  2. deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse& _. H, Q8 X6 h) m/ i
  3. deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
    4 R0 k0 X, R$ q% c
  4. deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse4 r" H$ e4 C- L. w2 d2 O
  5. deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    4 X" H6 y7 O: R) ]% W- h. h
  6. deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse. r* t* M# K+ s% }0 Q+ I
  7. deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
    $ \( v" y6 u" e: q* B7 Z9 m; c
  8. # deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    ( ?$ u* g- G9 o+ h; W. |
  9. # deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse4 U" r; W" x  r  `! `+ i  r
  10. deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    4 |2 t$ G% I8 Z; V8 K
  11. deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
复制代码
  1. #清华源(Ubuntu20.04)
    , C7 ~. z. ~$ r8 b, \% J
  2. # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
    : A2 d: o: i! |) ~
  3. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse; ^2 B2 ?4 T7 E8 _
  4. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    & N1 m6 x$ N$ k
  5. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse8 N* w. O% {# |) Q9 `* n$ g2 h0 J
  6. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse# C1 u; S# r) s- O) P' {$ Q
  7. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    0 }1 e* W- }2 e9 ~* e, j8 Z
  8. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    % k7 L* m  Z4 e- i) }% Z. k
  9. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    " a, @3 O- A1 I
  10. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    + a, N+ @! n: Y3 w7 _
  11. 1 V! _5 b0 u% Z& k7 X6 X# G

  12. " _5 q3 P7 P6 b; ~- w4 B' |+ ^' }
  13. # 预发布软件源,不建议启用
    . f: r5 y' z, d' j- J% v, k8 i# }
  14. # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse# T; @+ F& z( G- B. i
  15. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码
  1. #中科大源(Ubuntu20.04)" @9 }8 k# L% r! O/ O
  2. deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
    + n2 `1 H; L- s3 f& H7 D3 k0 n
  3. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse/ H) s4 `) M( N
  4. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse( G+ S5 F! }0 X, n7 u) i! [
  5. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
      ^3 N( h; U! ?" c$ D; @
  6. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse$ x1 ^: Q( Y: @6 u
  7. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse2 N5 k- ?' J; J
  8. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse" R+ \0 ~+ C2 E: g* \% Z. V! S
  9. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    / |& A: w0 t& S! |
  10. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse4 l1 }+ u. {4 s" U
  11. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码
7 |" [7 `- P! X2 ^
3、更新源
% e: @; s2 ~/ P4 J7 {+ y! M
  1. sudo apt-get update
复制代码

( ]. v+ G  w, X2 J# I02安装拼音输入法
: C$ W1 M2 U0 k0 N1、Region&Language->Language Support->Installed Languages, J# T; ~' Z/ z& v+ L; c

0 g- {$ T1 Q1 f& d/ n3 d
微信图片_20240615144532.png
; J2 o% \- c# d4 P4 a2 `% b- }' t! p& s+ E
2、Input Sources->"+"->chinese->Hanyu Pinyin
* b& Q$ W( J- `" g& F
  1. chen@ubuntu:~$ sudo apt-get install ibus-pinyin. z2 e) j6 a. B9 S
  2. chen@ubuntu:~$ ibus restart
    + y2 b& l9 J3 C9 h+ O: J# K
  3. chen@ubuntu:~$ ibus-setup
复制代码
4 h7 G3 R8 a$ }! e3 |/ B6 a
微信图片_20240615144527.png
8 \3 G' J" ?1 l+ h
6 r  X+ ^3 D4 |4 P/ j+ U 微信图片_20240615144524.png   s2 ^  a3 e( J4 O, I

$ r% Z* Z# J; Y8 L 微信图片_20240615144520.png
: i0 _: M5 A5 P$ X1 ^

0 S) b) p- w  r' a% L, k03安装VSCODE9 `: g1 E! k. K; K9 F
1、下载.deb程序包https://code.visualstudio.com/( ]5 s3 J- u9 g9 [% B' B
( \" K5 W# Y. ^. A; @2 Q9 i* t0 k
2、使用dpkg安装(在Terminal中Ctrl+Shift+C为复制,Ctrl+Shift+V为粘贴)
& R9 U6 L) H8 t2 f0 q; Z4 i
  1. chen@ubuntu:~/Downloads$ sudo dpkg -i code_1.89.1-1715060508_amd64.deb
    ; @: y1 |. q0 o3 }7 F* i: p
  2. chen@ubuntu:~/Downloads$ code .
复制代码
0 g$ B! x- {6 ^) P, m# `$ ]
3、调整设置8 r4 w& \$ w0 ^' a
启用Title Bar:View->Appearance->Editor Actions Position->Tab Bar- L( i4 w" Y9 B' A

% z6 |2 v. k. ?! M  W; f+ p; K; r
微信图片_20240615144516.png
7 `% Y! j; R/ j# y2 ?0 f  [6 J: u: F$ ]3 p
4、安装插件) R9 `, j6 p' ~& F/ Q' F$ }
git安装8 m( W; {9 S  m2 a. v$ t
Download Git for Linux(https://git-scm.com/download/linux)- f0 E% {4 B/ I1 s. d' d

' [8 L; b# ~0 V. F
微信图片_20240615144512.png
5 s1 O+ ]. o, d" U' c
  m% C' b) |- p, S 微信图片_20240615144509.png
. M& g$ d8 H9 \# V
" d" _8 x: ~; e# H. ]
命令行直接安装(Ctrl+Alt+T呼出Terminal)" P5 w. f$ f+ j. P$ V5 Z* K  K
  1. chen@ubuntu:~$ sudo apt-get install git
    " {! m6 k# D" p9 N4 z- B6 }3 E
  2. chen@ubuntu:~$ git --version
复制代码

0 o4 ~$ p$ y' |- H; Y7 M9 q3 s2 Qgit设置" G% i5 b7 x" b! H% S$ H

, y; K' G0 }; Z$ D% b
微信图片_20240615144504.png
: b5 s  k! ^2 s; a  g
) W& H$ ~% ?5 ?1 S% |. ^
  1. git clone https://gitee.com/kevinkerry/linux-stm32.git6 H/ R9 P) y( A5 F5 C! g
  2. git config --global user.name 'kevin.kerry', a9 h2 _3 U+ }/ m, D8 i" S
  3. git config --global user.email 'ct15762287606@outlook.com'% X: W& E8 i, F8 h: P

  4. & D: G; T  X4 W7 f  [6 u9 X
  5. : p) @" u( E3 A* I
  6. #示例
    ( c7 F$ [; K% J' A# |- x; j
  7. chen@ubuntu:~/prj_vscode$ git clone https://gitee.com/kevinkerry/linux-stm32.git& l2 f  _5 l3 C% V
  8. Cloning into 'linux-stm32'...& n: w% D- i" z- c9 P1 q# q& U( Z
  9. Username for 'https://gitee.com': ct15762287606@outlook.com
    / \  y$ |$ x3 W* t1 Z5 _
  10. Password for 'https://ct15762287606@outlook.com@gitee.com':
    ) O% {) z: A' b, q. t7 G4 h
  11. remote: Enumerating objects: 4, done.; e( g8 m; @* ]# m$ c
  12. remote: Counting objects: 100% (4/4), done.
    / U& `/ O" H- Q: z) b" T
  13. remote: Compressing objects: 100% (4/4), done.
    ' m; h) n7 p$ y3 o% E# Z& a7 ~4 M" _! A# V
  14. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
    0 k# Y- X6 @+ H7 K3 x% h5 V1 x2 m3 Q
  15. Unpacking objects: 100% (4/4), 1.79 KiB | 1.79 MiB/s, done.
    7 m( Y& ~9 i5 v: t' |
  16. chen@ubuntu:~/prj_vscode$ ls* l4 S2 S  ]5 h
  17. linux-stm32
复制代码
# I1 m! M2 S2 `0 o- V
GitLens — Git supercharged插件安装3 K5 ^: R$ E/ b2 k  o

' `! c' d6 \& {9 b/ a# y' ]/ i
微信图片_20240615144459.png
; [% C6 Y6 n* E2 Q+ E
" x6 e) ]6 }. T4 N% w! r
Git History- f/ g: n8 ?) }! L' P, h
4 s' Z- o0 o& P3 q0 V
微信图片_20240615144456.png
3 U# S" P2 [& h& ]9 ]& ?- U+ @
# X) E, |4 i$ B" \$ B) e
Bracket Pair Color DLW: |4 s+ i  E: p4 ~, a3 J

( }1 e0 m1 @1 R  M
微信图片_20240615144454.png
) n% d; E% B, j/ d3 Z: g( W
: E& K& z/ t; uArm Assembly2 {8 P+ K2 }2 c& _
, ?! t: n, g% `, _; U: n: X
微信图片_20240615144451.png
, Q4 a/ {2 D4 k( \' o

0 I# s1 q- i. K* t# yVenu's Cortex-Debug: `8 t# k( }6 {2 s& y

. L# i" N3 \- Q. n8 z2 _  u. D/ h$ }
微信图片_20240615144447.png ) J4 k& s! T8 x; K

/ v# i, R/ p2 A1 _: k$ Y) cC/C++
' Y; K- V7 f  Z1 [& i* k
: r7 ?2 P. l& L" l  ?* A1 C
微信图片_20240615144437.png 7 E# @; m: ^! C3 W8 s  Z

, J7 X, e  P4 b. J, L, X, ]04安装Build Essential及gdb
+ u# }* }$ s2 B5 k1、build essential介绍( n+ \& c, z8 w* Y+ O) R& ]
build-essential 指的是编译程序必须的软件包。它本身不是一个软件,而是一个工具集,包含了在Linux开发程序的一些必要的软件包,包括但不限于gcc、g++、make等。
+ D% E8 @. Q% k/ y; W# L# Q7 u( L
查看该软件包的依赖关系,可以看到以下内容:
9 R$ o( R  Y* k! G
  1. chen@ubuntu:~$ apt-cache depends build-essential
    ; i1 Q; v$ I+ u0 ^9 z
  2. build-essential
    # g3 R: q' N6 H" J
  3. |Depends: libc6-dev
    6 S7 y7 Q7 A- T  D
  4.   Depends: <libc-dev>$ K4 j. B9 O$ e2 {( I( R6 l
  5.     libc6-dev
    4 `9 P9 b, L, N' a
  6.   Depends: gcc$ ~9 J9 z  _' P# p" c
  7.   Depends: g++
    1 u, i3 j$ b' W9 L9 O2 b, l. [) q* c
  8.   Depends: make
    * E9 N" V4 y% X+ g7 J  B9 }$ l
  9.     make-guile
    / Q9 |1 D# W5 ]0 G
  10.   Depends: dpkg-dev
复制代码
2 Z: v6 a% D5 O5 e$ i: C+ t3 i9 `
也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可以了。
* O. V  G% R% ?6 w8 `' J

& U1 k% c2 b$ _. T# ]% ^7 g2、命令行安装build essential和gdb+ C! C1 M) A: o0 M+ _% r
有时候可能会需要安装gdbserver5 U2 ~7 {2 x0 o$ I" _, s
  1. chen@ubuntu:~$ sudo apt-get install build-essential gdb
复制代码
$ u( g0 k9 Z9 F# {/ k0 R8 Y9 l4 C
3、Linux C程序开发简介
* V! p7 T2 }# ~- a( ]& h3.1 无makefile% ^5 n; k% _6 x/ B+ S( }) I
  1. chen@ubuntu:~$ mkdir linux_c
    8 k* G$ \# {5 U' _
  2. chen@ubuntu:~$ cd linux_c% M! O3 o- B  n* T, ^, S- w
  3. chen@ubuntu:~$ touch hello.c
    3 b8 W. i  E0 F  G: G' c; {
  4. chen@ubuntu:~$ sudo vi hello.c
    9 Y' y9 Z: O, K. ?6 v
  5. chen@ubuntu:~$ cat hello.c2 Y9 O$ |) |4 e& j1 f# y8 ]; K
  6. #include <stdio.h>4 n3 ~$ W! T( J# H
  7. int main(int argc,char *argv[])4 ~  U) r3 ^& O$ |! Q2 c2 S! g8 z; O2 }
  8. {
    ( E- [7 u, ]3 f/ m1 P! B+ q
  9.   printf("hello world\n");
    ) {9 V! q& [1 B$ h2 I+ M
  10. }
    * ?5 b( y+ f. {5 c; {: a
  11. chen@ubuntu:~$ gcc hello.c
    # v$ [8 L6 x& _3 a0 M! }  @. o6 `
  12. chen@ubuntu:~$ gcc hello.c -o hello
    ' v, M( m3 y  r; F# B8 m, c
  13. chen@ubuntu:~$ ls -al- @! N# L. `: Z' V- M0 Y2 v
  14. total 526 i3 t7 ^/ a, G) U9 ?( N
  15. drwxrwxr-x 2 chen chen  4096 May 16 18:32 .: r2 \6 v; Z+ L' d2 N' n
  16. drwxrwxr-x 4 chen chen  4096 May 16 17:37 ..7 m: p+ B8 ?' K8 m; w; }6 V; c
  17. -rwxrwxr-x 1 chen chen 16696 May 16 18:29 a.out
    ' j$ v; J+ B$ t0 |( ]$ p# d
  18. -rwxrwxr-x 1 chen chen 16696 May 16 18:32 hello( J* ^; f) T  z& R# D' Q
  19. -rw-rw-r-- 1 chen chen    82 May 16 18:29 hello.c0 u! N! N9 Z9 X& m& W* Z) b
  20. chen@ubuntu:~$ ./a.out' P& ~7 y8 u+ f& S. o, I0 J! v
  21. chen@ubuntu:~$ ./hello
复制代码
  T- x; B5 `1 [3 p4 f% R
3.2 有makefile  n( c6 |5 s. o3 f5 I" c
3.2.1 创建程序文件
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch main.c input.c calcu.c input.h calcu.h
复制代码

% I! e5 a3 b$ B6 j0 j0 N5 g: Zmain.c
0 z% ~5 O9 j. b" s, F3 r
  1. #include <stdio.h>. O! j0 f: M2 g4 I$ S; Q
  2. #include "input.h"
    - x+ M4 N- }( ]- _: p  ]7 F
  3. #include "calcu.h"% Z$ ?% Q4 n) K( A2 j: J# l

  4. ! e& J* P: W) a% v  ?9 f

  5. - q7 [5 G& s3 l/ j& Q% M' V
  6. int main(int argc, char *argv[])
    * j% ~( Y0 Y  ?# [  {0 b1 v9 B
  7. {3 f5 e" ^7 p  K* U

  8. : U9 m" G/ @6 H; B

  9. 3 J' Q4 q6 T! w
  10.   int a, b, num;8 @- B: [# [/ u, y% Y# h1 p" e

  11. , _; ^5 F# z& e6 b2 x! ?
  12. 2 k( P: f. m3 {" ^$ O
  13.    input_int(&a, &b);1 m/ f" f8 t( X; Y/ Q& D' y# M
  14.    num = calcu(a, b);
    9 z7 A9 T% e% p  d% g% m$ }
  15.    printf("%d + %d = %d\r\n", a, b, num);! h- q) \4 C+ M6 Q
  16.    
    ) s- J. r( h6 j$ Z  c
  17. }
复制代码

. ~% _7 L/ b  j4 }input.h
  1. #ifndef _INPUT_H  c& l$ \) @. S$ V: J
  2. #define _INPUT_H
    % h- N: p& }3 M
  3. # p. Z3 B  h3 f  @
  4. void input_int(int *a, int *b);) L3 J% N6 e4 j* n8 I9 \
  5. 3 w2 a- y5 @9 Q$ A* Y7 Z& O
  6. #endif
复制代码
. F5 ]8 }6 z0 s: g. R2 L; b
input.c
8 [& L7 E7 }, o7 R
  1. #include <stdio.h>
    2 a/ f1 h) ]& n7 ?* @' X
  2. #include "input.h"
    5 c; ]  ]3 E2 G8 D0 B- U3 u

  3. + c) T. }6 }$ f0 q+ q

  4. ( E) F) F7 Z( ?' Y
  5. void input_int(int *a, int *b)
    5 R/ w( p0 o9 l. p! L+ q
  6. {' q* i7 l% K5 P
  7. printf("input two num:");
    8 O1 _" \2 i# Z4 m
  8. scanf("%d %d", a, b);& R0 i3 L3 Z; ?# k
  9. printf("\r\n");
    ( q! J0 g8 F2 l" M( D  W
  10. }
复制代码

3 O3 {1 {8 M+ t; {7 F6 Dcalcu.h
  1. #ifndef _CALCU_H" C6 Z& [* G: I3 j+ Y% [
  2. #define _CALCU_H
    5 w/ K6 x3 x6 q- N0 I

  3. 1 K$ Q4 Z8 b+ X. ]- J/ o" T

  4. + y/ m1 K% L" n, j
  5. int calcu(int a, int b);) L# g9 P/ e# T! X4 p' @
  6. #endif
复制代码

0 M2 g$ O; b' W% \* Gcalcu.c8 z4 L+ p: I# @  N2 C! B
  1. #include "calcu.h"
    ' o8 Q( k, }: b' ~. f& n- x1 M/ B
  2. ; j2 y* d+ W3 w- V' _: Y  K8 l
  3. 5 l6 c! s& t8 D6 }# F, c
  4. int calcu(int a,int b)
    5 J! a* h; x% h0 h$ X7 ^# u2 v+ t
  5. {
    + f9 K- Q+ }6 i: i1 }0 ^
  6.   return (a+b);6 x# v! `8 V6 d' j+ I
  7. }
复制代码

  {) V; I* ?! w1 t% K3.2.2 编译测试一下3 C, S7 Q- U6 x7 G
  1. chen@ubuntu:~/prj_vscode/linux-c$ gcc main.c input.c calcu.c -o main, H  g; z# g/ B; {4 I# M
  2. chen@ubuntu:~/prj_vscode/linux-c$ ./main
    8 R+ U- r/ c% N& {( J
  3. input two num:23 56# q* m3 c9 [, ~* R7 |, C! d( O7 x& J- b

  4. , N0 i4 C; L. ^
  5. ) S+ a5 B5 W0 i( @
  6. 23 + 56 = 79
    / F+ r4 U$ a  G" a/ A7 R$ {! c# t: R
  7. chen@ubuntu:~/prj_vscode/linux-c$
复制代码
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch Makefile
    & L8 L  T' O  D) V" n/ r5 }
  2. chen@ubuntu:~/prj_vscode/linux-c$ cat Makefile
    $ `% r" G4 c: X# i* h
  3. main: main.o input.o calcu.o. P- I3 a* m1 q
  4.   gcc -o main main.o input.o calcu.o' i! O! L+ @" I% t. n, |
  5. main.o: main.c+ q1 l% Q( ^/ g) [
  6.   gcc -c main.c- d7 J  \4 T6 [! J& s2 `3 z
  7. input.o: input.c3 }* P8 Q/ V$ @$ Y! t6 l7 b
  8.   gcc -c input.c9 t% Q2 d; L" d: M; |% Y
  9. calcu.o: calcu.c
    0 w3 w' ~) p4 i9 c! a
  10.   gcc -c calcu.c& |8 C  Q( {( t+ R
  11. / V' d3 I1 h& I" O( E) I
  12. * ~0 B7 E, d7 V, T. ^
  13. clean:6 D( [  D: I, B" s( W4 J) T
  14.   rm *.o& ?' E4 B5 R6 L0 u" f7 }
  15.   rm main' o5 D8 f: S3 {  l6 t" y4 `
  16. chen@ubuntu:~/prj_vscode/linux-c$ make clean
    5 ^% Y/ d7 x; h& ~
  17. chen@ubuntu:~/prj_vscode/linux-c$ make
复制代码
3 T  P0 U! X  L
4、生成.vscode文件下的debug配置文件5 t4 N' ~7 h" C5 G3 `: X4 P
tasks.json:该文件主要用于配置编译的选项,如果使用makefile或者cmake进行编译,则用该文件调研make或者cmake命令进行配置。. |* Y8 ?" z8 G+ `; x3 x
launch.json:该文件主要对debugger进行设置
' L" l% ]/ H& z0 [2 l2 `" x5 M) Bc_cpp_properties.json:编译器路径和intellisense设置
. v5 r4 w0 D, J; {

- _* }$ j7 I% y# A! K  J4.1、生成task.json文件: ~( x" }( }: }! P

3 f; H' w/ e' _4 }- K
微信图片_20240615144428.png ( L2 p4 z' g2 i
图4.1.1 Run C/C++File
( {; G2 Z# {* B& E* r( M% _$ S
5 z" u2 Y5 q/ @! R  J8 }) e" n( \
微信图片_20240615144424.png 5 X7 d* S! E8 v1 P; x( }" |
  P9 y6 K1 M& z( D
修改生成的task.json文件如下9 O8 L3 N- K) _$ s
  1. {1 f; }3 }- l& @; q  w0 X
  2.     "tasks": [4 |/ a* e7 ?0 D; s' V2 `
  3.         {
    1 ~1 x0 Y! Z/ p1 n3 [( p
  4.             "type": "cppbuild",
    ' w6 j6 [9 ~  r  r* J1 ]
  5.             "label": "C/C++: gcc build active file",8 I% X! `' `3 V* i" o
  6.             "command": "/usr/bin/gcc",* _# Z( i: j% G% \5 F# G5 e
  7.             "args": [( N9 {* d% Y7 [. g
  8.                 "-fdiagnostics-color=always",# m# I6 v; P: d* b: ~2 y1 I7 A
  9.                 "-g",
    9 i9 B0 a2 p$ w! z+ ]# l
  10.                 "${file}",! Y& Y4 `1 Y3 M9 f0 f1 v  I
  11.                 "-o",5 G8 M+ Q, S7 W2 u! F& ?3 Q
  12.                 "${fileDirname}/${fileBasenameNoExtension}"2 D# Q4 }- K+ h3 |
  13.             ],
    , y: X3 c% h) ~9 d
  14.             "options": {$ W- Z9 r, V. |3 M9 C, D
  15.                 "cwd": "${fileDirname}"( ~! x% l! `" l; G+ V
  16.             },! i) i* g+ F  y+ k* {& o: w
  17.             "problemMatcher": [! M( J# b, f1 H0 u; a
  18.                 "$gcc") n' u, p/ \. A# E
  19.             ],
    , ]3 ^2 Y- e! Q
  20.             "group": {. m6 ^, M9 Q& ~# y. y
  21.                 "kind": "build",2 Q% w+ E6 e1 }6 e/ {0 n  q6 F5 w
  22.                 "isDefault": true
    0 _9 }$ N9 I) b% \2 M  ]$ l) H" _
  23.             },( n- A% }7 _; }' \: O
  24.             "detail": "Task generated by Debugger."$ T" [& Y6 X- S; R# Y5 Q& t3 K3 a
  25.         }
    " d" ~5 |! g& [. t
  26.     ],
    # X- C$ }5 d9 J  S+ ^7 U
  27.     "version": "2.0.0"6 B. ?# {0 u$ }% D6 h3 G, v; N
  28. }
复制代码
5 Y7 ^5 ?. r9 t5 p9 ~
修改如下
  1. {
    1 N: `1 N' b# r+ v, E5 {7 [
  2.   "version": "2.0.0"," v; o& Z$ W3 R- @4 ~* p$ S" O5 M
  3.   "tasks": [
    8 r( Q1 \! u* O9 ]: p6 ]- ~
  4.     {
    - m1 l; v" m8 ^$ V+ Q4 X
  5.       "type": "shell",
    ( D* |* `% t/ x: }- L* _( t
  6.       "label": "C/C++: g++ build active file",5 o/ Y) R4 z* \: o6 C) m9 C3 G3 X
  7.       "command": "/usr/bin/g++",  M: J! |; M- F- k
  8.       "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],4 d' g) K3 z" m8 f5 k1 x
  9.       "options": {
      n( \; J* l2 P
  10.         "cwd": "/usr/bin"
    * [# e2 T2 H9 Z( U8 C
  11.       },* F; D. P* s6 A
  12.       "problemMatcher": ["$gcc"],  L' o' v* o7 h# ]5 `* h
  13.       "group": {
    & O- N* M% E1 w' p' o% k! h
  14.         "kind": "build",8 ]7 ~. w. F* R& E
  15.         "isDefault": true) k# ~( G  p, e: V7 b' T
  16.       },
    , x. T# n2 l  P8 r' |( p
  17.       "detail": "Task generated by Debugger."
    ' k' H9 F1 {- H2 K% Z
  18.     }/ C/ e  W. Y: d! `9 C; R3 k
  19.   ]
    # J% i, g' J- _9 l8 q6 P0 ]
  20. }
复制代码

; C! U) K) c! L/ y: }0 s' |command 代表使用什么程序去执行文件,这里使用的是g++. args表示的是传递给g++的参数,表明使用了什么文件(-g 后面的file文件所指内容),生成了什么文件(-o 后面文件所指的内容)。所以这command 和 args两行参数表达的意思是:使用g++编译器将${file}文件进行编译,生成${fileDirname}/${fileBasenameNoExtension}文件。$ C" ~2 z- [8 @) |' V0 x

1 E1 w6 ^5 d$ n: C) E! U4 L; ]上面部分是对单个c++文件或者多个c++文件进行编译。但是如果一个项目使用makefile进行编译,则如何使用vscode 进行配置呢?我们这里进行讲解。由于我们使用make进行编译,所以我们将command命令后面加上make,args后面添加相应的参数。比如我们需要进行debug 所以要控制makefile 中所有的gcc编译命令后添加-g。不然的话,就会出现,编译成功了。但是debug的时候,断点无效,所有的执行都是一下子执行完的情况。由于在我们的makefile 中通过TAG = dbg来控制加不加编译选项-g,如图3所示。所以这里我们的参数添加了"TAG=dbg",这里根据不同的makefile进行不同的配置。
6 Q, B$ W; ]6 C) G, k) A1 `
  1. {
    # Y7 @7 E$ \1 o
  2.   "version": "2.0.0",
    " I6 U6 ]9 L3 s/ d' D4 K" E/ [2 [- g) M+ `
  3.   "tasks": [, K4 D( t: A- H
  4.     {
    6 S8 q1 o) P8 _( e
  5.       "type": "shell",
    6 g, f5 }  ?8 ^) E1 R8 I$ r' v
  6.       "label": "Build",
    + c: J9 {( c; z8 R% f; n
  7.       "command": "make"," Z, D: @( e$ Y% O6 O1 X
  8.       "args": ["NTHREADS=1", "TAG=dbg"],
    . c- X# @6 c1 p! E/ p) b0 l0 R6 p  i9 |4 ]

  9.   s* h% @- C; e

  10. 3 E8 b: k& O# }5 X4 s/ {$ b8 H/ o5 B& c
  11.       "group": {
    6 P2 C/ K, a. w6 W; Z9 A! N! C
  12.         "kind": "build",
    + |0 \3 F4 s* v
  13.         "isDefault": true
    * k9 o- c; A) g. q3 V
  14.       }," \. d1 c6 e6 x, H* @" l9 K
  15.       // "detail": "compiler: /usr/bin/g++"
    . M/ f2 I( j3 Y3 }: e( e9 }
  16.     }
    + ?! A- U% g( P1 l% c
  17. 2 Q# b. q9 H! E7 O6 `3 \  \
  18. }
复制代码
$ ?9 k% `2 m. H& h: |
一种可行的Makefile文件内容(gcc后添加-g命令)
6 B2 a' u) c/ u6 S7 d6 ^. Q
  1. main: main.o input.o calcu.o
    2 ^5 ^$ g* D- B4 y% V
  2.   gcc -o main1 main.o input.o calcu.o
    # B! T- F4 a+ q5 @6 e$ w9 o5 E
  3. main.o: main.c
    : Z2 U8 V' B# t% K+ f( B
  4.   gcc -c -g main.c
    ' Y) h  M% K6 p! W
  5. input.o: input.c3 [' f, C3 }; N% u$ |
  6.   gcc -c -g input.c
    " i- P( m; f# _$ f1 d# _
  7. calcu.o: calcu.c% t# O# X4 z- P# d: n- f6 {8 M
  8.   gcc -c -g calcu.c
    " G4 N8 V$ b- u4 Q; S# y( q- ]# A
  9. $ a0 E- G, D1 R* a; \8 f$ f+ r1 G
  10. ; t& h9 K! Y! [2 d& H% U6 R6 z
  11. clean:3 y+ r: o. F5 Z3 L3 R- T
  12.   rm *.o
    - ^" I9 b3 j2 `, x9 \! L+ |
  13.   rm main
复制代码
( c4 H. b. j1 ]+ \! p; b
4.2、生成launch.json文件& C0 m- Y  _1 f4 H/ d
(注意只有在.c文件中才会有下图中右上角的图标显示)6 I& ?6 e# [( E" y" Q

7 I+ {$ _9 C& K/ ]' `  U
微信图片_20240615144421.png 4 }! [& T4 W: _" s8 k; ?
5 ]! g8 ]9 P9 ~8 [
微信图片_20240615144417.png
4 l: _' O6 P# E# ^) m图4.2.1 添加调试配置文件, ^, K! {9 S, A. \
  1. {- f' W. M. [! o( g6 g! o/ i9 P" n1 L7 g8 m
  2.     "configurations": [
    4 V" W9 z) m! k4 _+ Z
  3.         {
    ) y, C, ~/ f0 S/ e& w8 t
  4.             "name": "C/C++: gcc build and debug active file",3 J: \5 C. G: J
  5.             "type": "cppdbg",
    7 F' T4 L: g) @5 T9 P% l1 c
  6.             "request": "launch",
    2 l  A6 l8 m' W. ]) R# E0 C
  7.             "program": "${fileDirname}/${fileBasenameNoExtension}",* G# B/ k0 y8 E& ~' U/ n2 g
  8.             "args": [],9 |8 p  v# M- a
  9.             "stopAtEntry": false,
    % U0 v' O- X5 x( C
  10.             "cwd": "${fileDirname}",& ~$ a" l+ ]: M2 H
  11.             "environment": [],
    , n( K1 `- ?1 {
  12.             "externalConsole": false,) A9 z" {8 [3 O
  13.             "MIMode": "gdb",7 Y2 ^( L. }9 [* n$ c" `
  14.             "setupCommands": [  c: d2 D2 W* U4 m5 N( z! ]* r# e
  15.                 {
    8 U  k- q7 t' D# ~8 t1 S! D# @( X9 |
  16.                     "description": "Enable pretty-printing for gdb",
    6 m$ A, n$ C# H
  17.                     "text": "-enable-pretty-printing",
    * o- l; W* t' Q2 Z' [
  18.                     "ignoreFailures": true
    ; S9 x/ K7 ~6 I- u1 }' [) R
  19.                 },- O, u5 v' ^% M; {/ }: l
  20.                 {
    1 a3 \  l6 |" U* N! I
  21.                     "description": "Set Disassembly Flavor to Intel",1 H. V9 a8 a( @/ [9 N) `  H
  22.                     "text": "-gdb-set disassembly-flavor intel"," `* \5 r* b3 O
  23.                     "ignoreFailures": true
    5 K5 ~3 B. n2 o8 Y
  24.                 }
    * x  P. ]) n$ c# _- \
  25.             ],
    9 H$ S/ D  k: M: ?- M
  26.             "preLaunchTask": "C/C++: gcc build active file",4 ?$ v/ z* I5 u, |" L9 |, e( P
  27.             "miDebuggerPath": "/usr/bin/gdb", ~9 @4 M) ]6 E% O3 `5 n. i  N
  28.         }2 Y/ L' ^$ ~" M% d$ q8 v
  29.     ],- Q* l# E. g: v. l& r$ C& z
  30.     "version": "2.0.0"3 T5 s, k7 @" t6 t
  31. }
复制代码

; o) Y7 h1 N: B: L7 d2 d修改生成的launch.json文件如下
8 @- J9 }7 c4 d2 M
  1. {
    4 c, F% e7 V3 T# J& t( W' q( \
  2.     "configurations": [
    - |, A# D6 u; L- K) }
  3.         {/ ^1 L+ ~6 G) g, r% V
  4.             "name": "C/C++: g++ build and debug active file",
    " _' Z# X* ]9 x1 {/ ~, v( u
  5.             "type": "cppdbg",5 O" ^& z. `6 C9 @& N0 n
  6.             "request": "launch",
    3 A& |' b# [; `+ S: V0 n; ^; J  W
  7.             "program": "${workspaceRoot}/a.out",
    5 B2 R. ~9 ?2 }5 ^6 C9 s
  8.             "args": [ "1232"]," V, @3 F. p/ G! g* f9 K! Q
  9.             "stopAtEntry": false,9 _4 v3 X) V) l
  10.             "cwd": "${workspaceRoot}",3 _' L8 a! c7 c8 n$ }9 z- c  _
  11.             "environment": [],. _4 r* v5 `! {$ N2 t0 C9 q* m
  12.             "externalConsole": false,
    " }9 \7 r  X. V+ T. o" u& P* O
  13.             "MIMode": "gdb",3 m# z; X9 U4 E: I, f( \0 |2 |
  14.             "setupCommands": [
    1 V( Y! O/ C) W0 h4 [3 q
  15.                 {
    9 a$ _  v- d0 Z9 [' \
  16.                     "description": "Enable pretty-printing for gdb",+ l; q3 H8 v* P4 b0 Z7 P
  17.                     "text": "-enable-pretty-printing",
    3 d7 R9 |9 S1 R6 S! [% S' u9 G
  18.                     "ignoreFailures": true4 o3 K, g7 i: C# b4 }& P! N
  19.                 },
    ! Y& q& I9 |, ~# K" N- a
  20.                 {5 I4 t0 Z( [2 x8 e0 W3 _" \( W
  21.                     "description": "Set Disassembly Flavor to Intel",# M- I$ P4 q6 Q
  22.                     "text": "-gdb-set disassembly-flavor intel",
    + H/ O% a/ U; h/ L
  23.                     "ignoreFailures": true3 |# Z( U4 a" x1 q5 z( s
  24.                 }
    & |' B7 L4 O# H% t( C! Z
  25.             ],  E, B7 {( H: U- [- s+ G
  26.             "preLaunchTask": "Build",
    ; V5 K  O7 ]5 {- k
  27.             "miDebuggerPath": "/usr/bin/gdb"
    * H* N1 Z3 F6 b# u' e+ K% O3 }
  28.         }0 n+ I" n' x- y$ F2 M2 x4 N
  29.     ],
    3 o6 ~) c6 Q( T/ a1 |2 d8 v
  30.     "version": "2.0.0"
    / a' \! n/ W8 N7 u& R( B; J
  31. }
复制代码

% N2 ~7 p/ G& Q" Y: R, Q+ }"program"选项代表,需要进行调试的程序,所以这里需要修改为对应的文件。"PreLaunchTask" 代表debug流程的前序任务,这里的内容需要和tasks.json中的label相同。"args"可以添加执行程序的过程中,需要添加的参数。在下面的代码中,我们就添加了cacti程序,以及参数。
- z' J$ N: ]2 s5 N/ o
2 v6 u8 M9 d$ D  y) ^# |
4.3、生成c_cpp_properties.json文件% ]0 b, O6 F( S
ctrl+shift+p 搜索C/C++:Edit configurations(UI) 即可生成该文件
1 }& L' o9 B! Y
  1. {, i* n+ C% u7 }% ^  E* @
  2.   "configurations": [7 y; s% m& F4 M- F1 s2 m
  3.     {
    . j  t: T: S7 g$ _" S
  4.       "name": "Linux",
      D( c) F. J7 s0 b3 l# l
  5.       "includePath": ["${workspaceFolder}/**"],
    9 p) X- Y: ~2 I; J7 m
  6.       "defines": [],
    , Y# J) o, F: V7 _3 K. `3 I
  7.       "compilerPath": "/usr/bin/gcc",
    $ f& D: W% _" j+ y+ T0 ~  }7 k
  8.       "cStandard": "c11",
    , r! V+ d" b- c/ d3 j
  9.       "cppStandard": "c++17",' s. ^6 K; b9 }3 T" h8 E- |
  10.       "intelliSenseMode": "clang-x64"* @5 f9 L9 X8 j. t2 {) `
  11.     }
    ! o# R: K8 e4 Q; ^0 t: |
  12.   ],3 g: g0 e8 |- [- C  I+ M2 M6 M5 J8 V
  13.   "version": 4
    7 f0 V8 ~& ~" f+ }0 A
  14. }
复制代码
4 ]3 e5 |. C, V5 x3 C1 S
05安装Vim
  E$ G& p7 H# |" [9 k1、命令行安装  U" N' l8 {; r7 O
  1. chen@ubuntu:~$ sudo apt-get install vim
    # r/ w& G& a- o  f' Z2 x: {
  2. chen@ubuntu:~$ touch a.txt6 B7 B6 I1 i1 U6 I5 g% F
  3. chen@ubuntu:~$ sudo vi a.txt
复制代码
6 U! B5 ]% L* S. }4 U9 m/ ~) U
06安装gcc-arm-none-eabi
' h' P. H# e" i( S( S: Z* _: }1、下载嵌入式gcc编译器
. e. w9 N2 `9 e- Z. dhttps://developer.arm.com/downloads/-/gnu-rm1 V) d% k9 M& y# h9 ^1 _

& ]9 t1 O# O+ X
微信图片_20240615144414.png - p8 k- |( f1 ^: p! g
4 {8 }2 J, r8 i: v7 U0 T6 T0 q4 ^
2、解压gcc-arm-none-eabi-10.3-2021.10
5 L  v' A# ?" d
  1. chen@ubuntu:~$ tar -vxjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
    3 H  g& J/ y( [. [
  2. #对于bz2、gz文件解压
    , h6 |( G2 {2 t
  3. tar -vxjf test1.tar.bz2
    & f7 d: ]% }# R- G3 Y- |+ g
  4. tar -vxzf test2.tar.gz- k$ O* ?! ^' @! E. p" U1 H2 l: M
  5. #对于bz2、gz文件压缩
    $ K& C2 f% V% x
  6. tar -vxjf test1.tar.bz2: G" y; n& ~5 I9 @
  7. tar -vxzf test2.tar.gz
复制代码
  i9 ^( g' [" B( V
3、添加gcc-arm-none-eabi下的可执行文件命令到Terminal(终端)" }) B! F; ~% d$ q8 @1 @
  1. chen@ubuntu:~$ sudo gedit .bashrc1 [! x6 l, y& f1 O3 G. w8 {
  2. #在文末添加下面一行
    7 T, k% a, k! e; f% m5 ]( K
  3. export PATH=$PATH:~/gcc-arm-none-eabi-10.3-2021.10/bin- \5 e6 q/ g) X2 x4 P5 e
  4. #添加上述行
    ( X# F" ~# l, ?! F4 ?3 G
  5. chen@ubuntu:~$ source ~/.bashrc
    4 Y8 t, ~8 s/ L; o" h. N2 g! v: U7 G0 J
  6. chen@ubuntu:~$ arm-none-eabi-gcc --help# l4 o# x" `' V7 M9 P9 |
  7. chen@ubuntu:~$ arm-none-eabi-gcc -v
复制代码

3 n  D) ]: y3 [' [07安装stm32cubemx
( c! A5 O6 \7 H- r' U' a4 x' {5 u1、下载stm32cubemx
5 a- {3 ?- K- @7 T$ t0 [https://www.st.com/zh/development-tools/stm32cubemx.html2 }- S7 N! z8 B2 v
* }& M! \5 M3 e
微信图片_20240615144411.png
: f6 t6 G6 |0 D, m: A' u$ N) A$ T6 e/ t
2、安装
  1. chen@ubuntu:~/Downloads$ unzip en.stm32cubemx-lin-v6-11-1.zip
    7 _: U: f4 i) u0 J) o! U
  2. chen@ubuntu:~/Downloads$ sudo chmod 777 SetupSTM32CubeMX-6.11.1
    1 m+ O2 C6 V+ J1 q; {+ B0 _$ B% W
  3. chen@ubuntu:~/Downloads$ ls -l
    # f  ]5 ]( V0 w3 i$ @( o
  4. -rwxrwxrwx 1 chen chen 539136342 Apr 11 09:41 SetupSTM32CubeMX-6.11.16 n. u) |; |& _; Q
  5. chen@ubuntu:~/Downloads$
    ; L3 |5 E7 U8 }, Z4 N0 F
  6. chen@ubuntu:~/Downloads$ sudo ./SetupSTM32CubeMX-6.11.1& r. x5 e% B+ T" h- x
  7. chen@ubuntu:~/Downloads$ find /usr -name STM32CubeMX
    $ A9 d4 y: x% q( X
  8. chen@ubuntu:/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX$ ./STM32CubeMX
复制代码

0 a6 b9 s3 r$ m3、增加图标到菜单
. v; r1 ~1 Q: w3 t! c7 z
  1. chen@ubuntu:~$ /usr/share/applications/
    5 K6 j: O/ e3 }7 I
  2. chen@ubuntu:/usr/share/applications$ sudo touch stm32cubemx.desktop( j7 p) Q, J$ c5 T* L
  3. chen@ubuntu:/usr/share/applications$ sudo gedit stm32cubemx.desktop
    ; o1 `5 j, ^' t! {  t' s
  4. chen@ubuntu:/usr/share/applications$ cat stm32cubemx.desktop
    . ?' n, l# y' l( q  O! q
  5. [Desktop Entry]
    " x# D' @- t% ]9 P! M. H
  6. Type=Application
    / T9 H  m9 u4 X# ]* x( C8 j
  7. Name=STM32CubeMX1 l+ N6 z5 w8 ]4 m  \, U
  8. Comment=STM32 Development Environment
    * ~/ d; l; O: c7 J
  9. Encoding=UTF-8
    + H6 {: W6 v; j, @3 g& U; D
  10. StartupNotify=true# o  h. R7 H; z  T* b* x$ H4 [- x
  11. Terminal=false
    . Y, Y8 W. Q$ Z: i1 }0 a( _& n
  12. Categories=Development;java;c;c++;
    5 R! U) y8 ]. c
  13. #icon= ##########图标的路径,自己找一个就行/ n/ E0 ^, ~5 ?3 K1 y9 n8 M! Y& A) S
  14. Exec= /usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX( @# M  F+ R; u, `8 I& I4 M
  15. chen@ubuntu:/usr/share/applications$
复制代码
$ k+ D+ A( m% B. ]3 E
08使用stm32cubemx生成初始代码, A. k1 @! H% H
1、选择芯片->配置->Generate : t8 D" \3 ^: b* ~, R
0 A$ K: n6 D( A) b1 q
微信图片_20240615144405.png
8 ]7 j6 K5 w% H4 y- ]5 Y, C) `- l3 I+ o8 F) |
2、一定要记得勾选PinOut-Debug-SerialWire否则后面下载程序时会报错Error: init mode failed (unable to connect to the target) 。这个是巨坑,一定要小心!!!!!!!!!!! u8 F0 S8 `3 E7 J! i4 z, C' \+ p
" U+ p: _; t8 w4 T5 c/ A& V" U
微信图片_20240615144355.png # y: A& e! I7 S% C

& W7 L( B# o( h3 v09配置VSCode
7 g; [8 \; m+ ]6 K' j1、使用vscode打开上述生成的初始代码
, X3 B1 d) m* t( P7 Y2 [6 W2、生成VSCode配置文件: n5 u, R5 }# L: O1 j- }  \4 w
2.1 c_cpp_properties.jason
' t5 m2 y) o# ~" ], U7 R! xctrl+shift+p->Edit Configurations(JSON)生成.vscode/c_cpp_properties.json文件3 u& ^" U. J( y' \6 J9 }

0 B, U+ s* ?- m' D5 p+ r/ |. h
微信图片_20240615144351.png ) O" n, \/ R" U7 l) b" f% M
  1. {
    2 r% Z. f& r% ~% I( R
  2.     "configurations": [
    . [/ R! u- d7 D5 c8 Z( Q* O
  3.         {+ ~; W: g+ r2 T# M( Q6 U" k- ?0 B
  4.             "name": "Linux",% o( H) F; `. e# `7 T
  5.             "includePath": [/ S( P; i6 C7 E2 d2 q3 c: h
  6.                 "${workspaceFolder}/**"+ O& g7 F; P5 N  K) w$ |
  7.             ],: K4 o, A3 @; q- a8 M
  8.             "defines": [
    + [* S6 W7 V* `
  9.                 "USE_HAL_DRIVER",4 W) x9 n5 d9 o; ~8 o/ \& x0 k  ?
  10.                 "STM32F103xB"" R* |. Y( N$ ^/ s8 e% @% D
  11.             ],- c5 i# ]( e' n4 F* z/ L6 G2 G
  12.             "compilerPath": "/home/chen/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc",
    $ `, B2 D: {* N
  13.             "cStandard": "c99",
    , J- W. I( p; A1 ~0 y9 w8 @+ @
  14.             "cppStandard": "gnu++14",
    . F- z) ]# k' V5 b& k' o
  15.             "intelliSenseMode": "gcc-arm"8 G9 H  e8 X0 b- j/ B/ }
  16.         }
    " I2 D. V; p; ~+ P* T. E' V* K
  17.     ],
    & |* [" W$ O% Y) P8 X8 s
  18.     "version": 4
    - _& m6 L, V- q6 F. o
  19. }
复制代码

  ?) r3 T  f3 v% t! l; f2.2 task.json
: K) `; r  R* _0 j, b修改好task.json即可使用ctrl+shift+B对stm32工程进行编译
2 W7 g& J0 r3 f" p# _; w
$ r) l4 x; Z# v6 j8 y
微信图片_20240615144348.png
2 j, K) Z1 t4 K
  `& Y9 V) s- Z
) G: `) F$ z3 t* K8 x
微信图片_20240615144344.png
3 Z  K% z1 G9 W, T1 P2 z
' ]: b8 Q- v4 \7 X# r) O- j
% P0 C  c& z4 n2 _0 k$ s" V
微信图片_20240615144341.png $ ]5 g4 W( P3 U- Q# [" k& o/ n

) Q& y4 Z8 [, Y. P
7 T8 W6 \' n5 m. i% v; l修改如下:* \0 G- t1 ?) u
  1. {
    6 g: `* O. R5 G7 r
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558
    0 Y! y( o  j7 o$ f- M$ M
  3.     // for the documentation about the tasks.json format
    , Q2 X) a/ Z2 ?% p  ]7 K* |5 P- G
  4.     "version": "2.0.0",
    : T& Y! v1 O, F# ?; F; U
  5.     "tasks": [
    1 B/ w" q) U' t' o8 n
  6.         {/ J+ p! S) {5 K6 _3 z2 |& s% n
  7.           "label": "Build",      // 标签名
      W0 w( }1 L# p# p7 `3 B! z
  8.           "type": "shell",      // 终端(shell)型的任务
    4 k. R* O- o5 i& M
  9.           "command": "make",    // *执行的命令
    0 l7 J% m* E! `3 I
  10.           "args": [          // 命令的参数+ Q& g$ M  I) ]) ^4 A
  11.             "-j6"          // 表示六线程同时编译, _% i( ~3 T0 V( [, s6 R: o+ @
  12.           ],
    # n- c' S4 _6 m
  13.           "problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误
    ) t0 L/ W" d! b5 B" D9 [
  14.           "group": {
    : F& c- c* t$ e' R  _, \+ ~" l! N) g
  15.             "kind": "build",4 v( D& ^! y$ G
  16.             "isDefault": true5 p3 [( {5 {% ]
  17.           }7 [. x1 ~* _( U* U. ^
  18.         }
    3 J4 U6 h+ O: P! v5 C

  19. " L( `! b" g9 v# k. j) a) {
  20. }
复制代码

' Y9 J" _0 a2 S" f- ]2.3 settings.json7 i" w! {/ d$ @+ o* B
  m$ ~; R3 \2 s1 f  M
3、上述”defines“字段中的定义应包括stm32cubemx生成的Makefile文件中相关的宏定义9 x  c6 m; p2 h+ F: a: }( j: n9 U/ f
5 i' ?' i6 O1 z! ?2 f
微信图片_20240615144337.png
4 V& H% |" s" o9 k
3 V; w5 j$ Z; X) M  y% w4 @1 @4、make编译/使用ctrl+shift+B
! i6 A, }+ l+ i7 Q6 f3 ]
  1. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make clean
    ' l4 `/ b* A! a6 {& A
  2. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make
复制代码
* R4 V" H* H" J
10调试4 t2 N4 N) m! h6 d
1、安装openocd
  1. chen@ubuntu:~$ sudo apt-get install openocd 9 F: T* l4 F, g& I, ~
  2. chen@ubuntu:~$ whereis openocd
    9 p) j3 r, I+ b) R$ Z. c
  3. openocd:
    . ^$ U, H, r' i) ~
  4. /usr/bin/openocd
    + w% ]8 \' @, H7 l/ {
  5. /usr/share/openocd
    * @5 e4 m" i  J' ^! _
  6. /usr/share/man/man1/openocd.1.gz
    ; V4 X7 _8 g6 `: h
  7. /usr/share/info/openocd.info-2.gz ' E! U& J0 Z0 A+ `- f
  8. /usr/share/info/openocd.info.gz , `) N4 o' `  i: c6 z  Z
  9. /usr/share/info/openocd.info-1.gz& A' S6 z/ n7 m3 u( A
  10. chen@ubuntu:~$
    # }1 M( l4 x! w- w+ k4 y  e
  11. //连接好stlinkv2-1到电脑和pcb板,输入以下命令。完成连接
    ) [. A' F0 x! ^" c3 ^
  12. chen@ubuntu:/usr/share/openocd/scripts$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg
复制代码
+ @- H7 r, S, t, ]2 p$ T/ f8 @- |# J
2、在tasks.json中使用openocd进行编译后的下载
" G/ \; b4 V* A% D
- y0 F& d- J* D在原本的tasks.json中追加popenocd的相关内容8 {, w$ L% ^8 N+ D
  1. {
    & L- V" i/ _% z* V0 T
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558) }/ c: X; N9 a. H  Z5 n" l
  3.     // for the documentation about the tasks.json format& j6 D7 A, _- J6 y9 Q  Y7 a8 m
  4.     "version": "2.0.0",
    & C& T+ T( U" L8 g- X( b0 z
  5.     "tasks": [2 T1 Q4 e0 R; D8 ]+ H2 x! M
  6.         {
    ) z, r3 j1 L9 e; T2 b" S$ O! W/ j
  7.           "label": "Build",      // 标签名) P! h2 q& F) T: D2 Z% }! i
  8.           "type": "shell",      // 终端(shell)型的任务
    3 q) a% \# u% o
  9.           "command": "make",    // *执行的命令
    2 b# h% K& Q8 @) D
  10.           "args": [          // 命令的参数
    ( |1 E: [3 [( C4 {% E' L( z; n7 W9 \
  11.                           // "-j6"表示六线程同时编译
    2 {, Z7 F- q  o1 K% b6 H! O
  12.           ],8 y2 ~7 n  l  Z6 p: m7 q$ p5 r3 _; a
  13.           //"problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误
    , O  p% `" X; b) L- L
  14.           "group": {
    " T+ s2 D# ~8 ]: I- n2 h. A
  15.             "kind": "build",
    6 f% W$ o+ f# f8 {! l
  16.             "isDefault": true
    - Z# I3 @+ |6 m/ X4 D1 x. P- ~! K
  17.           }* a5 C( z) i4 p* l. j7 i3 \
  18.         },9 S3 A( w- b- Q: Z/ m1 F" W
  19.         {
    $ ^' j& n' t/ O$ H
  20.             "dependsOn":"Build",          // 任务依赖) Q- |0 j; ]) v" H& S( U  D9 [
  21.             "label": "Build and Download",; k4 h) U+ l7 u5 _' J; M+ N( r
  22.             "type": "shell",
    . C% N6 ^+ ]" O# g& x* I; U" h: z
  23.             "command": "openocd",! h+ @: {. g9 s" Y/ w
  24.             "args": [
    ! g, K0 l5 m$ Q' `( G0 Y
  25.             "-f",
    5 |: |2 K" \5 [1 s* o
  26.             "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
    0 F' y0 k5 u: n3 k
  27.             "-f",
    & t3 }) ^; D- K8 A% t( ]
  28.             "/usr/share/openocd/scripts/target/stm32f1x_stlink.cfg",$ k2 \; X2 [- {: ?9 c8 J0 n0 s5 z
  29.             "-c",. @3 s. D$ j4 Q- s
  30.             "program ./build/${workspaceFolderBasename}.elf verify reset exit"6 I/ M2 r. p$ {, @3 @& l
  31.             ],
    " ~) a9 V# x4 S- n
  32.             "problemMatcher": []/ _  o* k" _) i" k
  33.         }
    2 G7 I" h- w' H8 r4 X+ ?
  34.         2 Y. X- u$ M9 R5 a' H# {
  35. & D3 J* M( X  Q9 i# _  i9 Q5 _
  36. }
复制代码

7 z. h) y/ l. G- U这个任务要求先进行 Build任务,然后通过命令打开 openocd,加载两个配置文件(-f interface/stlink.cfg 和 -f target/stm32l1.cfg),同时,这个 -c 的选项后面跟着的就是openocd成功加载后执行的内置命令,这里我们让它下载、验证、reset,然后直接退出,这样就实现了一条龙式的下载。
& P3 T5 T: U; U$ o/ U
/ Q# l* O6 w6 |+ o, b
微信图片_20240615144333.png
% y- a6 c3 I5 x# s4 `. W3 `) R, E' O1 Y6 ?; [) A4 X1 t4 s
微信图片_20240615144330.png
. \$ o5 q# U5 q' y' p5 `% p3 O. e. [: F- f& Y+ w
3、使用openocd进行调试* e2 v' v3 F2 u0 E; K* Y
3.1 安装Cortex Debug和Venus's Cortex-Debug插件(第二个插件一定要安装,否则会报错Failed to launch OpenOCD GDB Server: Timeout.)  F: v, k8 |' L0 ~- ]
+ l; }. |2 [$ w2 g
微信图片_20240615144327.png 1 h# \9 R1 N6 d) ^
( O1 h! _/ K$ X. H5 _# y3 P) @
微信图片_20240615144324.png 5 M3 S- j$ n7 V, s$ b5 d
5 w& j! Y9 b0 `8 V; \, X/ K" z' c
3.2、 添加调试配置+ F2 R. t6 v; g2 }- T  |* h
8 L$ H1 X3 A/ \
微信图片_20240615144321.png
+ a: i1 f. v. \( g8 d; |
1 N; K1 x$ C. q
3.3 选择cortex debug,生成launch.json,并修改内容如下
$ ^& z- X! W0 {- p
' K' y  \8 |4 Q* \+ X5 ]+ h5 P
微信图片_20240615144318.png * c" O0 D" e4 O- Z; U8 {

  r3 K. r" ?7 d3 }: `
  1. {
    ) z6 E. G) ^. b% F
  2.     // 使用 IntelliSense 了解相关属性。- l6 g3 |  k2 W8 U6 @& |) U1 u
  3.     // 悬停以查看现有属性的描述。# S0 R! f! m% Y; W8 p( f8 _
  4.     // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387) E0 `7 w! U) q( ~3 J& S
  5.     "version": "0.2.0",
    + T* k, a. o) q7 K! b
  6.     "configurations": [) x) z+ Y- P* U- ^, @. C7 d
  7.         {
      E8 ^, h: T. n6 B  s1 a
  8.             "name": "Cortex Debug",. _4 S1 A" z  K9 e9 k( M% U, U" L
  9.             "cwd": "${workspaceRoot}",  // 输出路径$ `0 L4 x/ ]: \6 W! P
  10.             "executable": "./build/${workspaceRootFolderName}.elf",    // 要调试的程序9 ?5 ~" B: ^6 l) \
  11.             "request": "launch",- |! M, x! x3 x" I: A3 \
  12.             "type": "cortex-debug",  ^) `; j7 W% P, Q0 [- h
  13.             "servertype": "openocd",    // 调试器选择
    6 Y4 H" p: T( i+ B5 D. z! W$ ^2 N
  14.             "device": "STM32F103C8",    // 使用J-link GDB Server时必须;其他GBD Server时可选(有可能帮助自动选择 SVD文件)。支持的设备见 https://www.segger.com/downloads/supported-devices.php
    ! Q3 U/ u4 x( W+ }
  15.             //"svdFile": "./STM32L15xC.svd",  // svd文件,有这个文件才能查看寄存器的值,每个单片机都不同。可以在以下地址找到 https://github.com/posborne/cmsis-svd下载2 h! S! ]1 @/ D, j+ t0 N( z
  16.             "interface": "swd",
    6 r  k' C$ h: u" R+ e
  17.             "configFiles": [
    4 F/ H. t7 l* R0 u; V
  18.                 //"${workspaceRoot}/openocd.cfg",  // *可以通过加载该文件来配置# p# J; r/ g7 q; ?( {# u, ~9 s
  19.                 "/usr/share/openocd/scripts/interface/stlink-v2.cfg",3 j4 M5 q. r$ i4 t+ k1 `
  20.                 "/usr/share/openocd/scripts/target/stm32f1x.cfg"3 [+ P# x! z' w; S4 f4 Y4 H: y
  21.             ],
    # H0 F' k4 ~! s2 c. ~1 h3 G2 ]2 h0 A
  22.             "runToEntryPoint": "false",
    1 [4 S0 J* r5 W! w+ l
  23.             //"runToMain": false,8 i3 b6 ^" E+ V" d" ]! o; h+ o. K
  24.             "preLaunchTask": "Build",   // 在调试前预先执行的任务,此处是tasks.json中的7 u% y9 ^. ?7 w" @; s
  25.             //"armToolchainPath": "C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin"    // 如果没有把 arm工具链路径添加到系统环境变量,则需要这条指令添加你的路径
    + l2 ^  m2 h$ c+ U7 }8 f
  26.         }
    & j* c& `, d$ e  y. k# v
  27. 4 \0 ]9 u5 q, Z7 N* Z
  28. }
复制代码

% g3 C0 _- P# |7 P3.4 调试# t1 x$ a, \6 u1 b0 R  l$ n: B
; w: b& o' E* C- U0 W
微信图片_20240615144314.png ' |! s  c& w/ _9 W0 W( X  N  m1 ~: q

9 b: k8 U$ f0 z8 Y: ^11使用VSCode串口工具
7 T+ k3 x4 A/ `. M3 W
1、安装serial monitor
) Z+ {7 T& t( e
; l$ m8 ~. D. M5 N8 ?  Q- j
微信图片_20240615144304.png & h, b; E, T: ?
/ E% G' _$ T( C7 a" ?% S
2、查看连接的usb6 c  H6 E: a. @2 e2 g% N1 ^6 H, S
  1. chen@ubuntu:~$ lsusb
    5 C3 E7 ?4 l2 r5 N. |
  2. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    $ t) x7 f$ {6 o5 v
  3. Bus 002 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter# F: `9 g6 k9 L/ H7 _8 p
  4. Bus 002 Device 006: ID 0483:3748 STMicroelectronics ST-LINK/V2
    % h, D: _6 e* o
  5. Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse" U! H0 S# Y; _5 P3 Y5 @$ E
  6. Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub  K% d5 ~6 s: b
  7. Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse; h/ b$ O8 l; q
  8. Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub( _, m" G0 k6 O5 g+ @3 ]: T
  9. chen@ubuntu:~$
复制代码
& b1 u- a. P0 M9 Y( f+ R1 t+ `- }
2、加权限
  1. chen@ubuntu:~$ sudo chmod 777 /dev/ttyUSB0
复制代码

2 S, A9 O! ^/ n  ?( k0 o12使用git
2 m2 g3 o5 K; `$ r  d  ^& ~' `1、检查状态9 S  f0 }& `0 o- ^
  1. //在执行 git add 和 git commit 之前,先执行以下命令查看当前仓库的状态:
    0 m. Z/ N! g8 O
  2. git status8 J) q4 \6 B* _8 J: ?
  3. //这将显示工作目录和暂存区的状态。确保没有未追踪的文件,也确保已将需要提交的文件添加到暂存区。
复制代码
  z+ u: V+ O8 s* j9 w, G. h  I
2、确认 Git 配置:9 O2 S+ a3 I5 X
  1. git config user.name
    9 S1 Z& p, R8 c, x0 Q8 k
  2. git config user.email
    + I( Q5 d: \+ P

  3. # L+ G# j% Y+ ^  ]

  4. ! b' m7 t: b: ]% {
  5. 如果没有设置,请使用以下命令设置:; F- ^! }' _% w2 ~
  6. git config --global user.name "Your Name"3 o/ }1 Y5 G' |# H* ~8 x) R
  7. git config --global user.email "your.email@example.com"
复制代码

; y, s/ s# Y3 S) l; u9 M3、检查文件权限
, [9 p% a2 `8 U' s9 K确保你有权限在新文件夹中进行写操作。使用 ls -l 命令检查文件和目录的权限:+ ~+ R3 y+ j4 d# @% `6 }
ls -l0 a( m. t4 j/ K2 X/ _: g
( p9 E5 v' o- S4 i
4、查看错误信息:) r- Z' C- Q' J; a( v
如果 git commit 操作没有反应,尝试使用 -v 参数查看详细的错误信息:
  r- f, T) q9 _( {) Y/ jgit commit -v- G4 [4 U) m. p- c7 I2 B9 p# P! O
8 b1 L" h/ A7 S* W6 G3 U5 v2 Z
5、清理缓存:
8 w9 f  h# }  u, x7 w6 M有时 Git 的内部缓存可能导致问题。尝试清理 Git 缓存并重新尝试:
) J9 a) |+ `5 d( m1 \  cgit rm -r --cached .
' y5 @1 u1 q" Y6 t5 @6 J! j1 _git add .2 n- K# ]; Q; R
git commit -m "Your commit message"
+ w5 p7 E+ C# s1 F  K1 U这将清理缓存并重新添加和提交所有更改。
2 e$ l7 u' l& B) @( n. L4 U
# {, w' }5 `2 h: f$ g6 G
. H. y* E" S+ O- M* Z
转载自:kevin. O+ A- b! P0 m* p3 i+ D

( C! w8 V' [+ O3 @如有侵权请联系删除
  {  p* G$ q% R9 A% X" u# }+ h3 l! ?. N; R/ H
8 g) S! H+ X7 C  {

8 `! i  }7 K/ a6 o
1.png
收藏 评论0 发布时间:2024-6-15 14:45

举报

0个回答

所属标签

相似分享

官网相关资源

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