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

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

[复制链接]
攻城狮Melo 发布时间:2024-6-15 14:45
“ 从ubuntu20.04入门到完成stm32程序的调试。”
5 |% f  a: N( T' p8 P
5 o  d3 B- I4 Y) H( D3 Y9 C" c. V. p, [
微信图片_20240615144535.png ! C5 Y8 @1 G" R: Q

1 g) z  N! i: I% g" m" J# g1、更换软件源, q' o. W7 Q5 B  I
源文件(sources.list)( R3 r4 x, t- k8 K: e1 d
更改源(Ubuntu20.04对应的源)  N) b5 b9 N  v3 \
更新源2 j) {0 L  O' }" h

7 T: T7 c+ j: i9 k. c2、安装拼音输入法1 ~" B3 J" w- V$ p, C
Region&Language->Language Support->Installed Languages$ b+ K3 c: E- T& M: q+ \9 m/ ~, n
Input Sources->"+"->chinese->Hanyu Pinyin
/ e! n# P8 P. n# H
' Q! z, y' e. X/ E6 v' j) e9 c. G3、安装VSCode2 L; L) \) v# @4 G6 N- \0 B4 d' T6 |
下载.deb程序包: A0 m: X  n9 G  ?
使用dpkg安装8 N6 `% P& {' G
调整设置1 g4 L$ M6 p. ?. U2 x
启用Title Bar# Y! G! w0 T, l! ?# I! v
安装插件
# [2 Q/ \" ~; _. r1 ~9 k3 z8 R, m
) i  F/ k5 `% L# m
4、安装Build Essential及gdb- @4 [) W, s2 e( M
build essential介绍
; M  j+ T% D1 l7 T" q- `8 w命令行安装build essential和gdb
( |' V0 b4 |2 H7 m7 p1 MLinux C程序开发简介
5 A! L9 Y8 O! z无makefile8 g# O: P- {( t$ m$ E! i& S
有makefile; f8 w. O3 f# E1 B$ J' A2 u
生成.vscode文件下的debug配置文件9 j# W8 k9 p7 w0 \& f
生成task.json文件) d+ Q& t0 O9 W1 J# j# }/ k- ]
生成launch.json文件+ ?: H) ^" G) `5 F
生成c_cpp_properties.json文件* k/ {' Q  _4 P  ?8 {5 l% R

6 D/ y1 X4 |1 g% L5 E5、安装Vim! t- N9 @; m) Q8 s' D

  y% E/ c/ s: Z4 u. m/ I6、安装gcc-arm-none-eabi
! t" m) o5 q' M) S
下载嵌入式gcc编译器
% V# t9 K* O3 p8 ~6 P2 O; s解压
- p# E0 ^: \! c) V添加gcc-arm-none-eabi下的可执行文件命令到Terminal4 Z! S4 Z* P* k1 o9 z

3 `# {) n& ]: j& J) x* u4 @
7、安装stm32cubemx
- j  i) c3 P0 r0 F# x0 E  ?+ q, E! X/ `下载stm32cubemx- Q' ^- C' \4 [" U8 [2 o5 |4 E
安装4 G/ O3 I% }3 Z& X2 t
增加图标到菜单: ~& O1 g6 E. O4 e" u, Y
2 e; |/ U; B) e: R; F
8、使用stm32cubemx生成初始代码
; F) Q9 ^6 g& \) D# h0 `# q选择芯片->配置->Generate* K8 n" k  M9 L
勾选PinOut-Debug-SerialWire
# D. F# m+ Z- c: s0 D. E, @& c3 \+ T6 [6 U, ^: X
9、配置VSCode
* c" N% r; o  ?7 D3 v: _使用vscode打开上述生成的初始代码/ ~- t6 Y$ o' M; b& D9 c7 x
生成VSCode配置文件, [9 K' c8 |7 _4 K
c_cpp_properties.json3 W2 ^$ W) R2 u$ X, u: U4 W, {
task.json
" N2 |, g% w# p0 usettings.json
* o( `5 y6 J& |5 X, t: K宏定义包含9 d+ J: H- R8 Q$ D3 V* L* `! `
make编译/使用ctrl+shift+B
$ D5 B% F( m7 C/ H! P& x: M7 O. F
+ P& y# t% k  Y5 M
10、调试& W  b! n; ?  R
安装openocd4 \) P5 I" I7 c! N3 ~
在tasks.json中使用openocd进行编译后的下载
# o5 s( `! _& {$ \使用openocd进行调试
8 B1 z9 C+ C4 t3 a6 [3 N$ c安装Cortex Debug和Venus's Cortex-Debug插件$ z  Z2 m4 f' I+ }* O( r+ P/ K
添加调试配置
; a$ F3 T; r* p7 l; I选择cortex debug,生成launch.json
% o# t' O" K6 j- h1 K" }调试" u3 T8 i2 W8 V9 E5 l

2 u5 w5 [3 ?8 G* j' s1 j, [( m- _
11、使用VSCode串口工具7 o) s# [, z7 a& E& i# b
安装serial monitor5 J' o) K! S1 E6 K7 _% M' }
查看连接的usb
3 Q" z% s% t/ e1 f; j! i0 Z. f加权限( J* e! j* Q! B
& R  Y4 f6 y0 x; T9 H9 t' _
12、使用git- q6 ^4 \5 k9 g3 y" D. }3 W! L% ~: E8 S
01更换源0 B, h* L4 G( ~$ ?
1、源文件(sources.list)
# w! m( X1 T9 y* C( z9 r+ R+ Lchen@ubuntu:/etc/apt$ ls -a" c9 O! M* e# h$ k4 T5 q
.   apt.conf.d   preferences.d  sources.list    trusted.gpg.d
: X7 \1 y# f5 Z- a..  auth.conf.d  sources.bak    sources.list.d- u) j! L: B; h* _

/ E$ y+ n1 u  W/ s2、更改源(Ubuntu20.04对应的源)
* b# v# B7 O" @$ k4 u' M; c
  1. chen@ubuntu:/etc/apt$ sudo gedit sources.list
复制代码
  1. #阿里源(Ubuntu20.04)
    ) t; @+ {! t7 T9 U
  2. deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse0 Z0 R- j) ]5 v  j* e* q5 v
  3. deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse6 b" D& o3 _7 J' t) ?
  4. deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    2 f4 k7 a) w" u- B/ l7 d1 t8 W
  5. deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
    # g8 N2 u6 @3 D6 t2 J
  6. deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse( q! l0 O  p5 O  m4 p
  7. deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse7 ~' O  {1 l, e% M
  8. # deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse' B) o6 R1 S5 p; ?3 ?, k4 t, A
  9. # deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
    % y9 K5 w  u6 G. h$ J. P& D
  10. deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
    " ?8 P" o& g5 L+ ^& b
  11. deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
复制代码
  1. #清华源(Ubuntu20.04)) D' P" m) B! V7 l+ A' B
  2. # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释( R7 |, v' H# ^& C1 v
  3. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse) Y+ }! ^8 i3 d  @  y- r0 x
  4. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
    % q- z+ ^' z' ?6 h2 y0 ~
  5. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse+ f& a$ Q: G& w. _
  6. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    4 D3 s/ B. a+ x' X$ F/ v2 M6 _
  7. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse! g' M9 y  ~( |+ w. O" }
  8. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse4 c5 d5 h+ n$ j
  9. deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse- Y2 O4 U- D/ U; {0 L
  10. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    1 Q4 b2 M" R& R: z, t: i/ N. P

  11. ( ?1 g* }! J% K1 E; j. T( o

  12. - l3 w6 F$ d+ J$ }( t/ d7 q' A
  13. # 预发布软件源,不建议启用
    " E$ j5 T" j* v% `* G6 [# c
  14. # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
    5 l# _$ S; }( E
  15. # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码
  1. #中科大源(Ubuntu20.04)- E5 m1 y" L- \7 q5 l. [* \# G- O; @
  2. deb https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse. T* c* ]2 m9 Z! x, z
  3. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal main restricted universe multiverse
    5 G& w& Q( H1 h& q5 i  I4 _& c1 k3 T! t
  4. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    ' F3 A* @* [0 t* h
  5. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
    * G7 u5 _" X1 z7 ]) \
  6. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
    - E% I6 T  H2 J  c4 a! M
  7. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-backports main restricted universe multiverse% {3 I# z* M2 M. w& X, J0 ~8 c# X! ~
  8. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse, Z/ L6 q# q( }" t6 i8 n& m
  9. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-security main restricted universe multiverse
    & l4 g* x" K, |5 s
  10. deb https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse, G) |* u& ^6 {9 n) f
  11. deb-src https://mirrors.ustc.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse
复制代码

  u& F( [1 x: j* U9 O. c2 R& J3、更新源
# q' |6 x- X0 W6 G; H9 `9 T# u
  1. sudo apt-get update
复制代码

3 m- }7 Q6 L* p8 f02安装拼音输入法9 L# L( X6 O8 k1 v4 g
1、Region&Language->Language Support->Installed Languages
9 ~- s3 E) ~. c+ \2 u3 g% \. R
8 J0 ~/ d0 ]" D! T2 O% l
微信图片_20240615144532.png ) V# K" h  R; ^6 o) N$ t0 I$ {9 }' v
, U6 b9 I1 d- y; ]& }
2、Input Sources->"+"->chinese->Hanyu Pinyin! u* J+ m2 G5 [1 m5 I$ M; ^& S
  1. chen@ubuntu:~$ sudo apt-get install ibus-pinyin
    ) g) |: d% J. y7 m9 a) M
  2. chen@ubuntu:~$ ibus restart
      \: f( a! G, ]+ y$ o) r
  3. chen@ubuntu:~$ ibus-setup
复制代码

6 n) A4 |: d) _$ N9 J 微信图片_20240615144527.png 2 W" G0 h: }* I& a1 d
  z6 |; W# B! ]8 I6 p* Q. [
微信图片_20240615144524.png
" `, l1 e8 U5 C) z! j2 ?
; U1 q$ O- M  \7 B7 x* V' n 微信图片_20240615144520.png
  N) v) J8 Z- x% `0 a2 u
; v4 O( D$ m- y2 d$ ^
03安装VSCODE
5 g9 J- F5 J' R" w: C. |2 e1、下载.deb程序包https://code.visualstudio.com/
9 a! z" g* J5 [: \6 H+ p4 N$ P3 j6 A6 r, A$ j% `5 U
2、使用dpkg安装(在Terminal中Ctrl+Shift+C为复制,Ctrl+Shift+V为粘贴)
; C) k6 ~' m  z
  1. chen@ubuntu:~/Downloads$ sudo dpkg -i code_1.89.1-1715060508_amd64.deb
      v6 P  [4 O3 x! x2 d% \* ^5 a
  2. chen@ubuntu:~/Downloads$ code .
复制代码

# p3 f, }! d" C$ ~* u3、调整设置
7 ?1 P3 h- b6 k0 i  d, o9 L8 Z启用Title Bar:View->Appearance->Editor Actions Position->Tab Bar  ^# `/ T: d7 Q. z) ?% C* P

" g, u2 ?( }3 w) W! ]% t3 ~0 W
微信图片_20240615144516.png
- O9 l/ F( H( {& k
5 M8 L' _, w  o9 v! |4、安装插件. n4 H+ j- T5 C7 W
git安装2 I$ @1 B7 N. z0 H
Download Git for Linux(https://git-scm.com/download/linux)" Y0 M  D" q2 x% ]1 [. z8 m

; o" X% k# z" i; o4 _' I- u3 B
微信图片_20240615144512.png ' J) f4 Q7 ^8 |
+ X% H7 b( K( A
微信图片_20240615144509.png 5 W! L* E1 F8 B- V7 I' a$ H
! @) O. y* E+ u" O- q: R
命令行直接安装(Ctrl+Alt+T呼出Terminal)
' j, w4 p2 h6 R
  1. chen@ubuntu:~$ sudo apt-get install git
    % L( m$ F6 ~1 t7 E3 [
  2. chen@ubuntu:~$ git --version
复制代码
4 B* q) J# B& D- ^- d- i1 j
git设置
9 s2 Y1 Z1 F) D1 U; U
! L) }; R% a- o
微信图片_20240615144504.png
1 e, D, g- R% |  Y$ d: j
5 ]& m& J  t4 `' f1 K: x
  1. git clone https://gitee.com/kevinkerry/linux-stm32.git2 r4 O9 A% c. [0 ]# l
  2. git config --global user.name 'kevin.kerry'
    5 O8 d* x2 D$ k5 e7 X5 m9 }
  3. git config --global user.email 'ct15762287606@outlook.com'
    6 ]3 w; @2 J4 y& f- x% c% l
  4. $ @8 U5 [6 F0 C- T) ]

  5. ! Z+ {) L: {6 g: m& I7 O& q+ X
  6. #示例3 h- s! u/ `4 R: g
  7. chen@ubuntu:~/prj_vscode$ git clone https://gitee.com/kevinkerry/linux-stm32.git
    2 T! R( [# ~( j, ^' I
  8. Cloning into 'linux-stm32'...) u# z3 Z% j* [' L
  9. Username for 'https://gitee.com': ct15762287606@outlook.com
    " v3 X' ?' [' U6 o
  10. Password for 'https://ct15762287606@outlook.com@gitee.com':
    2 p, ?* P+ p1 c
  11. remote: Enumerating objects: 4, done.
    5 _" Q$ M$ C& a9 D. o
  12. remote: Counting objects: 100% (4/4), done.
      \, L% k$ d! e! y7 J# n& }/ `
  13. remote: Compressing objects: 100% (4/4), done.# a4 Z' w( K) D: X9 _1 l
  14. remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0% \' `. r$ o! Y( e; a) q; u
  15. Unpacking objects: 100% (4/4), 1.79 KiB | 1.79 MiB/s, done.4 i' d+ I% Z: u; _" a) w$ C
  16. chen@ubuntu:~/prj_vscode$ ls
    * {3 F( i2 W) u. G
  17. linux-stm32
复制代码

- }2 ^* ~7 {- [' E& XGitLens — Git supercharged插件安装# J( W' N' ]# f4 \0 `% K
' G% I- L# M7 b0 g' s
微信图片_20240615144459.png $ b+ O3 D% C( s- p8 p6 ]

  ~7 N( y) X8 ~3 _  A; eGit History
% H1 Q9 i5 W& H! \- |9 {5 R$ }4 _/ W; U; Y
微信图片_20240615144456.png
' z8 E: a# H, H, g3 z
# f) H/ r  ?# |- H) t+ J% q
Bracket Pair Color DLW& y( u- R8 Q7 ^  q6 J2 T4 `. M
$ A7 r; F* `6 @8 [2 V1 `7 H
微信图片_20240615144454.png
7 c7 S: U/ z* _& n: h! m7 Z" Z) v# D3 N
Arm Assembly9 P* T- I' P" r, u
2 ~* q& G! M0 ?" K3 k
微信图片_20240615144451.png 0 U$ |5 O4 X3 c: o7 G& N$ `
; O( A& z2 E7 Z4 |) ~
Venu's Cortex-Debug
" J; Y. m; F# K3 m2 O5 g1 }$ O: e+ ~1 W4 C. W
微信图片_20240615144447.png ( h/ i! O7 F5 s9 w( T' k

9 Y. y5 h# K$ V' g1 nC/C++
4 w1 x& m6 H, k' A+ u0 `  T' Q* p+ D8 B6 D% Q2 g- j9 d
微信图片_20240615144437.png % W' P; X& J' q3 L6 U

1 s& T# x/ M* D; m! O& |04安装Build Essential及gdb' o  {: k' ?; W4 v' M
1、build essential介绍! ^! z& t+ ?5 j$ ~$ t; }
build-essential 指的是编译程序必须的软件包。它本身不是一个软件,而是一个工具集,包含了在Linux开发程序的一些必要的软件包,包括但不限于gcc、g++、make等。
- |+ \# A# P+ @$ r4 \, S5 d
/ h( k+ u2 x/ `( c! V7 V
查看该软件包的依赖关系,可以看到以下内容:( G/ L( l; L& Z* J1 \& }
  1. chen@ubuntu:~$ apt-cache depends build-essential, s' z3 V2 k5 v4 x7 o  E- |0 \: R
  2. build-essential
    - j9 q" p. G6 d/ C0 r9 c
  3. |Depends: libc6-dev
    0 A; S, d1 m5 m- y
  4.   Depends: <libc-dev>; _) ]  _! v  h  W9 {- Z
  5.     libc6-dev
    & N  W1 {! N( ~
  6.   Depends: gcc
    : D, g# T+ O& }7 A) q* n8 v  s7 v
  7.   Depends: g++) |* g7 g0 O* v( @  Y- l
  8.   Depends: make
    8 U2 I$ Y! U6 c! Z" ~
  9.     make-guile
    + @) ]: r( w& z: f! B
  10.   Depends: dpkg-dev
复制代码
3 r/ Q% p  b' w8 k
也就是说,安装了该软件包,编译c/c++所需要的软件包也都会被安装。因此如果想在Ubuntu中编译c/c++程序,只需要安装该软件包就可以了。
- v: ?+ s+ _3 U: G! f
( F: Y4 H0 v# a/ T' R, u
2、命令行安装build essential和gdb
1 I! Z: k4 [3 i) \4 D# t. D有时候可能会需要安装gdbserver
2 ~+ D2 \0 \0 `+ D- N- i+ @
  1. chen@ubuntu:~$ sudo apt-get install build-essential gdb
复制代码
2 @# U: d  b& `3 u% \# M. |7 f/ R
3、Linux C程序开发简介; {% s* g% u3 B9 q  E) U2 O
3.1 无makefile+ ~  J4 V0 [2 s
  1. chen@ubuntu:~$ mkdir linux_c! j+ l( t, N2 K! S& |
  2. chen@ubuntu:~$ cd linux_c
    * P8 J" E% z+ j
  3. chen@ubuntu:~$ touch hello.c
    % V8 K& k* l9 v" }
  4. chen@ubuntu:~$ sudo vi hello.c; k" c& d+ s4 N
  5. chen@ubuntu:~$ cat hello.c
    : a+ r8 X* m& \# O3 d( {; S
  6. #include <stdio.h>
    8 ?. @+ B/ i# p/ t
  7. int main(int argc,char *argv[])7 A) s! @# ]0 D
  8. {0 Q+ w! x" F0 Q9 R( n. j, G3 \
  9.   printf("hello world\n");- P/ V7 x* P# x) e2 \* k
  10. }& i  p, A& a& }* C
  11. chen@ubuntu:~$ gcc hello.c( a! G2 K0 }' _7 u
  12. chen@ubuntu:~$ gcc hello.c -o hello& R& W# S( Q# n+ [5 e% s2 ~
  13. chen@ubuntu:~$ ls -al
    5 _# _' j$ U+ j( @$ O) {
  14. total 52# Y1 U5 J" b9 @! ~
  15. drwxrwxr-x 2 chen chen  4096 May 16 18:32 .% e  c7 B4 {8 C/ n8 [9 ?
  16. drwxrwxr-x 4 chen chen  4096 May 16 17:37 ..7 }. g4 ]: b+ N, A
  17. -rwxrwxr-x 1 chen chen 16696 May 16 18:29 a.out6 B1 i7 B1 F9 g% i' H( J
  18. -rwxrwxr-x 1 chen chen 16696 May 16 18:32 hello- ]* Y, J9 ~$ h+ J4 H3 l0 V
  19. -rw-rw-r-- 1 chen chen    82 May 16 18:29 hello.c' a9 Z% v) l& Q9 D  n9 X
  20. chen@ubuntu:~$ ./a.out
    0 r* e9 J: o' ~/ L' L' I
  21. chen@ubuntu:~$ ./hello
复制代码

* y( x7 |' P! _: X3.2 有makefile8 P* }; @  U7 X# R
3.2.1 创建程序文件
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch main.c input.c calcu.c input.h calcu.h
复制代码
* x* Z# g) |% n5 H5 D2 @
main.c
' n+ e8 v8 ~, Y3 H/ p$ {  V
  1. #include <stdio.h>
    : K1 `. _9 z( v' R: I) j( E  b
  2. #include "input.h"9 W; f+ }$ c% j" m1 d
  3. #include "calcu.h"
    1 W- Z$ W' k8 w! k* R
  4. $ S& ]8 ~; f& h' x( x; w6 x; q

  5. # o* h; `1 y; ?3 U" z
  6. int main(int argc, char *argv[])
    ' u# I3 S3 c7 `0 w
  7. {
    ( H) D# g% \$ c, \$ I; t0 a

  8. ' ~+ f6 S( b  l# Z
  9. & @7 @( K7 ^5 ], \; s3 `& M5 r
  10.   int a, b, num;3 ]0 X7 q- L- C8 N0 Q

  11. * q3 g+ U2 T# I$ M" n
  12. * i) |, _9 i7 V- E
  13.    input_int(&a, &b);
    , I$ W4 W6 e( G  C7 Y
  14.    num = calcu(a, b);
    " R. R6 @: d' m+ j; w
  15.    printf("%d + %d = %d\r\n", a, b, num);
    ' d$ q+ J0 Q! S8 g% H
  16.    . D0 m0 S+ ^- q8 g$ w; z
  17. }
复制代码

& X1 i3 R7 J% c; D  Y& c& }5 w1 xinput.h
  1. #ifndef _INPUT_H. B/ b3 p, _* c! u" e# y# I
  2. #define _INPUT_H* U1 S; m- N. @4 L5 h
  3. 9 ~- v* Z' a: _, A
  4. void input_int(int *a, int *b);) k0 i( {2 C9 n0 j+ k' I# M
  5.   n) I0 Z. c. M( ^! ^, c
  6. #endif
复制代码

% _. {0 E1 t4 M* _( K0 ?input.c
2 w3 {6 I& D. @& C! i+ u# y( F5 @& @
  1. #include <stdio.h>
    . j6 I# c/ R7 R) Z
  2. #include "input.h"
    / o6 O, g0 }( e
  3. $ s# @% ]! g5 l! U, o" P

  4. 2 L; X5 Q: `# |; N+ }
  5. void input_int(int *a, int *b)  `8 t! x0 q3 R! l
  6. {
    9 y" ^+ N' r, P/ i! m* }
  7. printf("input two num:");+ {9 M8 d) A7 q5 z
  8. scanf("%d %d", a, b);8 {( f+ `/ _: ?( ?, O; a
  9. printf("\r\n");
    : S4 |+ S. P$ ]& r  U3 ~, i4 ?/ @
  10. }
复制代码

  E+ v9 b; W9 \/ z$ Ccalcu.h
  1. #ifndef _CALCU_H
    0 x  F/ u+ G  Q. |: c: }
  2. #define _CALCU_H/ i2 Q1 @5 F4 ?/ I

  3. 2 Q8 Q- X: t- L$ N# C! O9 C

  4. ! |2 g8 B3 N) c
  5. int calcu(int a, int b);
    ' l! G3 x& `  t: B8 ~( O8 r& N
  6. #endif
复制代码

- G8 l" E9 D9 w9 g& n# W7 z. Jcalcu.c
1 M' q/ F5 G2 Y$ u
  1. #include "calcu.h"
    8 R0 i6 J. _& E6 k! S( `
  2. 0 Q* f$ Z$ e6 e" @

  3. & T# e+ B1 `* f3 u' x3 {6 T
  4. int calcu(int a,int b)7 X4 S* U2 m6 e+ q
  5. {
    1 H$ p  ^* ^9 p
  6.   return (a+b);6 g1 k: U3 V3 @6 v$ ?
  7. }
复制代码
! j6 Z9 X! q! ~3 r5 |
3.2.2 编译测试一下; G4 b9 I) E* \$ d8 G0 w
  1. chen@ubuntu:~/prj_vscode/linux-c$ gcc main.c input.c calcu.c -o main3 a4 r6 z. ~; ?3 I' P
  2. chen@ubuntu:~/prj_vscode/linux-c$ ./main: H% i; R+ `5 P0 ~
  3. input two num:23 56
    ( x# v/ U9 `+ X. m7 l

  4.   ]4 T* C+ W1 h& ~

  5. 5 W7 H( U$ W) m
  6. 23 + 56 = 79  V# f) z5 a4 a# o/ _: T3 L
  7. chen@ubuntu:~/prj_vscode/linux-c$
复制代码
  1. chen@ubuntu:~/prj_vscode/linux-c$ touch Makefile1 C4 z$ M( [+ f6 k- Z" f1 _  j. N) R2 X
  2. chen@ubuntu:~/prj_vscode/linux-c$ cat Makefile
    . ]! B  s! R% W) I; B' ~! P1 r5 W
  3. main: main.o input.o calcu.o
    5 a! K# u* \+ W: Z; v% P
  4.   gcc -o main main.o input.o calcu.o
    # z# A+ h5 o1 ~7 N
  5. main.o: main.c* v6 j3 ]2 v* M/ [2 Y$ {+ \
  6.   gcc -c main.c
    1 C+ b0 Y- R% k) k4 v6 H
  7. input.o: input.c7 B6 {7 R( Y9 E1 A9 G7 |& R
  8.   gcc -c input.c
    ( ^' x8 Z3 i: v1 A' r
  9. calcu.o: calcu.c
    ! ^) t9 I1 g) Y! a. o% Z
  10.   gcc -c calcu.c
    ; L6 B. ]) @$ A

  11. , Y  A; Q: D! I( [; @$ ?  G
  12. % i8 \. @0 B( B( j' T
  13. clean:1 V1 U, Q+ z/ y
  14.   rm *.o" w+ a( S$ x5 ]2 q" s
  15.   rm main
    + G4 O5 Q2 B8 X! _9 P
  16. chen@ubuntu:~/prj_vscode/linux-c$ make clean
    % J, K' E7 o9 Z# h4 Q; `8 v1 r
  17. chen@ubuntu:~/prj_vscode/linux-c$ make
复制代码

0 x0 E. d: ?; `! d; Q$ N4、生成.vscode文件下的debug配置文件4 a- S: `) u  s/ o% j. T' `
tasks.json:该文件主要用于配置编译的选项,如果使用makefile或者cmake进行编译,则用该文件调研make或者cmake命令进行配置。! p. u% j  e( }8 }& p! t
launch.json:该文件主要对debugger进行设置
- A& x; E! S. m0 C. Mc_cpp_properties.json:编译器路径和intellisense设置
% V0 q3 K0 w9 t& e$ h/ A

/ X# p7 I) u& I2 [4.1、生成task.json文件: c2 c2 N/ H9 J; F$ G, z0 J

) X, q9 _+ Q: w2 @% F0 G
微信图片_20240615144428.png
! b- j- A( Z4 A6 J, C- _; ^& N图4.1.1 Run C/C++File# O# Y1 `# v. c) ~" _

  h/ c! E3 w( ]$ I
微信图片_20240615144424.png , o( ]9 S: H' t% r

7 f2 q/ y5 W/ B- z( }. Y修改生成的task.json文件如下
% @  Z" E2 z8 n" {1 o/ d% f
  1. {
    5 x+ O8 w# Q" {; D
  2.     "tasks": [5 N3 p' T& Q$ p4 z. y; g
  3.         {5 N& @# U: t8 N/ D% ?1 C+ o
  4.             "type": "cppbuild",
    8 x7 ~! Q% m  D6 S: o
  5.             "label": "C/C++: gcc build active file",& I9 x5 U3 g& _; _; G4 d0 E- o
  6.             "command": "/usr/bin/gcc",
    ( e7 ~2 Q0 d6 M/ k+ M4 \$ T
  7.             "args": [
    " q# h9 i) }0 N3 r8 j
  8.                 "-fdiagnostics-color=always",2 Z+ M! w' G7 ^  N6 t8 q! F
  9.                 "-g",
    + X. `9 I- W$ i1 I5 m* ?/ ]9 u
  10.                 "${file}",0 e! a% y* w4 E0 c
  11.                 "-o",' w8 b& ]9 r# j! w  i" [
  12.                 "${fileDirname}/${fileBasenameNoExtension}", [' d% B3 L2 v2 A4 ^0 v
  13.             ],9 w0 j1 b2 }* p( m
  14.             "options": {! o+ k* |( H& |+ f* n, |
  15.                 "cwd": "${fileDirname}"6 e" p% M3 Z# f9 [
  16.             },& ]/ p# c2 S, s% @+ v+ @( s4 ]
  17.             "problemMatcher": [
    + A: ~, O9 _/ E
  18.                 "$gcc"6 |) c$ _$ Z! \
  19.             ],; s- `6 I) z/ z! N
  20.             "group": {) l% e: a2 p! E/ s" z$ e4 l. ]
  21.                 "kind": "build",; j. W: D4 k. w, q& M' H
  22.                 "isDefault": true
    9 \3 j4 `  Q* Y3 i% Z
  23.             }," x$ ?, w! a7 r( F0 l8 g5 Q
  24.             "detail": "Task generated by Debugger."# \8 G- d5 b% ]$ w! E% M
  25.         }' f; X! M& _: A* d$ S3 }+ I" C" Z
  26.     ],
    ' L2 t9 e% h. X5 F5 S0 @% |. b7 M5 V
  27.     "version": "2.0.0"; G7 F+ `8 X2 W% m3 R$ t, j
  28. }
复制代码
: N5 p3 ?: f# p# N) R5 }! E
修改如下
  1. {
    ! V9 d! m$ A; m) P! l* v
  2.   "version": "2.0.0",9 g( X6 C' e  O" O; }( s
  3.   "tasks": [; O% R/ P. N' ~5 _  J; C2 j$ O
  4.     {5 O. [4 V& f8 H; B
  5.       "type": "shell",
    . d. T$ f, [: ~; V" u1 e! W
  6.       "label": "C/C++: g++ build active file",
    5 W$ [& ], y; u+ m* w
  7.       "command": "/usr/bin/g++",
    $ w. V6 v8 W9 `5 S: s
  8.       "args": ["-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}"],
    ! B: v! v8 b8 e8 C; s  \
  9.       "options": {
    9 }9 W  H( E( i8 M
  10.         "cwd": "/usr/bin"
    2 r4 v8 K1 y  G( l+ M" J
  11.       },
    * b2 e) d* H/ v
  12.       "problemMatcher": ["$gcc"],# t* A  \5 w2 ~4 Z' i
  13.       "group": {  @5 v' U. |) N6 k9 e3 r2 Z
  14.         "kind": "build",
    6 c- ?+ b; ^. Q* b5 f- n$ R
  15.         "isDefault": true
    . Q' p0 M! g& J$ x
  16.       },% j- C* r+ [/ ?0 e2 d' n
  17.       "detail": "Task generated by Debugger."
    & W4 L" ^! t4 Z2 ~5 g
  18.     }
    7 ]2 m) b0 e# x# I" g6 }$ N6 D
  19.   ]
    5 r/ _) H: F. e  P9 @
  20. }
复制代码

6 E$ L- y1 S3 I! ]command 代表使用什么程序去执行文件,这里使用的是g++. args表示的是传递给g++的参数,表明使用了什么文件(-g 后面的file文件所指内容),生成了什么文件(-o 后面文件所指的内容)。所以这command 和 args两行参数表达的意思是:使用g++编译器将${file}文件进行编译,生成${fileDirname}/${fileBasenameNoExtension}文件。0 h; v: b7 U, l3 B# W4 b9 ?9 V
/ v) T1 C' p' ?9 n+ U  {
上面部分是对单个c++文件或者多个c++文件进行编译。但是如果一个项目使用makefile进行编译,则如何使用vscode 进行配置呢?我们这里进行讲解。由于我们使用make进行编译,所以我们将command命令后面加上make,args后面添加相应的参数。比如我们需要进行debug 所以要控制makefile 中所有的gcc编译命令后添加-g。不然的话,就会出现,编译成功了。但是debug的时候,断点无效,所有的执行都是一下子执行完的情况。由于在我们的makefile 中通过TAG = dbg来控制加不加编译选项-g,如图3所示。所以这里我们的参数添加了"TAG=dbg",这里根据不同的makefile进行不同的配置。
- b* C. [4 s/ [- w0 Y- a' G6 j8 t
  1. {
    & J# x* q0 {8 y2 N2 d6 x
  2.   "version": "2.0.0",
    % N- g; f8 f4 O, y7 ~8 u' w
  3.   "tasks": [9 W! ]2 s( t: d9 }/ ?$ V6 d2 ~' z6 J
  4.     {
    6 X) k" o- [2 i& d9 ?, D7 w
  5.       "type": "shell",; F2 f4 S3 j' j9 ^0 V
  6.       "label": "Build",
    ' X: ^/ f( L  v* M4 a
  7.       "command": "make",1 P, a5 n% H0 H, E; n, t: ?$ |
  8.       "args": ["NTHREADS=1", "TAG=dbg"],
    $ H) \, F, M& F0 s9 ]6 F) [
  9. * \0 x, K9 L# M- x: a

  10. " {8 t: _" B9 y7 I5 j' u1 {
  11.       "group": {  \  H: `  |- Q0 k1 U/ C; t
  12.         "kind": "build",6 D) L' G  w! O
  13.         "isDefault": true
    7 H2 g+ ^+ O4 ]) l' X  t
  14.       },5 q. b  Y' K6 i* W2 |. E7 R5 H& K
  15.       // "detail": "compiler: /usr/bin/g++". H$ J8 Q* b+ U  B: M
  16.     }
    % ~* x+ x0 l1 k3 T& C
  17. " D9 r9 S5 @  r. R% ]. _8 U3 u
  18. }
复制代码

* e$ v' s' S* [' h( x6 O- q一种可行的Makefile文件内容(gcc后添加-g命令)
: P/ C* g' c9 u. E' H' @6 w
  1. main: main.o input.o calcu.o
    / B! Q, a' |9 v9 x( }8 \0 @' N) B
  2.   gcc -o main1 main.o input.o calcu.o
    ' l* g4 @# s% N( T* v3 r
  3. main.o: main.c$ A. B$ \& z9 L2 R) a% a' m
  4.   gcc -c -g main.c
    + l5 J; q# I4 w+ n6 _; K
  5. input.o: input.c; [; o6 A) P* B  _6 L
  6.   gcc -c -g input.c! t4 G% d' q0 g% _5 j3 ~
  7. calcu.o: calcu.c
    * Y' J, d# C6 b& |, k
  8.   gcc -c -g calcu.c8 ?) k: D1 K5 G4 @
  9. ( W; ?; L  C$ r8 U0 Q; Z
  10. 2 p- {% V8 N  N* A# q
  11. clean:$ \. q+ c* R5 g: m$ S& @& U
  12.   rm *.o
    6 ]4 e5 ]  _  f6 e% x
  13.   rm main
复制代码
# D7 U$ V8 t1 U7 c3 S
4.2、生成launch.json文件1 q5 p6 v8 b9 e- W
(注意只有在.c文件中才会有下图中右上角的图标显示)7 _4 F( ^  I$ H: z
' U* h( y' l4 C* _) u
微信图片_20240615144421.png
4 q& r% o1 k$ n" k7 |1 G' y1 L- B" {9 V3 ]7 T8 I7 G) Z5 L- y. F
微信图片_20240615144417.png 0 j7 D! t- W$ x) z) }- x
图4.2.1 添加调试配置文件
- f8 }& E9 y6 ]" s7 C& T4 U
  1. {
    * H- R; l5 ~% |/ R
  2.     "configurations": [# `. v$ F& p9 e% {9 b
  3.         {8 y) [/ ]0 }2 k1 [/ Z" O, `
  4.             "name": "C/C++: gcc build and debug active file",# Z3 C. t4 u7 c& ~6 P! Z
  5.             "type": "cppdbg",
    6 i. z& W7 E  ?
  6.             "request": "launch",
    0 A& W  \. X' {, P/ d. W5 L
  7.             "program": "${fileDirname}/${fileBasenameNoExtension}",% ]6 c+ y' k: @+ n7 J; R
  8.             "args": [],
    # h! i, F6 S, W: o9 p6 g* ~/ ]
  9.             "stopAtEntry": false,6 x0 r5 T% k- {$ M1 ~) W! N! s* d
  10.             "cwd": "${fileDirname}",
    7 p0 a6 N- y7 ?% C- U4 z
  11.             "environment": [],1 r+ S: v. x" c
  12.             "externalConsole": false,
    & U& C" g: X6 F7 [) o. }+ k
  13.             "MIMode": "gdb",: ]" w: d* Y% `) N
  14.             "setupCommands": [
    - @5 ^# b9 c# e; I
  15.                 {
    . x# z6 x9 }; A
  16.                     "description": "Enable pretty-printing for gdb",/ R$ p: N1 a, L5 ~
  17.                     "text": "-enable-pretty-printing",
    + j. k; h5 F! m# U% V) M
  18.                     "ignoreFailures": true
    - R0 Y- v* v- f3 t
  19.                 },
    " u  ^$ K+ T& t6 v* [
  20.                 {
    ! c4 B1 a& C: e. Y
  21.                     "description": "Set Disassembly Flavor to Intel",& ?+ `( C% b2 M" [7 N8 ^5 `
  22.                     "text": "-gdb-set disassembly-flavor intel",
    8 K/ S+ }$ v- n' f9 x$ h, K6 D
  23.                     "ignoreFailures": true3 x! U$ k2 k; t; |% K9 w" U7 q
  24.                 }
    1 e& ]1 n2 P6 C  K
  25.             ],, [9 N/ e! A) y" I- V' G6 r! s8 [
  26.             "preLaunchTask": "C/C++: gcc build active file",: \! @: Z" Y- e
  27.             "miDebuggerPath": "/usr/bin/gdb"  x+ i; r+ C$ Q
  28.         }- g  v& }+ r. \' p  _( r: [
  29.     ],1 Q6 a! B" o4 z  i4 n# P, f/ y
  30.     "version": "2.0.0"
    ' T4 s9 Y2 R) b/ b0 G: g4 K; P3 j
  31. }
复制代码
" M/ {7 a2 e/ J# h4 f
修改生成的launch.json文件如下
9 M, }9 Q5 f- a2 J" b7 @1 d
  1. {; v3 k$ n- `/ e8 \* A
  2.     "configurations": [
      i/ [( {% B0 e
  3.         {
    6 Z* E$ O7 t6 h$ R0 J+ {
  4.             "name": "C/C++: g++ build and debug active file",3 x( E( w4 W" B6 N" a. r$ \% I5 e
  5.             "type": "cppdbg",
    " U5 J6 X0 l8 D7 N8 R
  6.             "request": "launch",' U6 Y# }6 Q; y, F
  7.             "program": "${workspaceRoot}/a.out",
    4 D" O7 N* ~" n: B( \( e/ L
  8.             "args": [ "1232"],1 Q  F* |+ }- r. B- P7 f
  9.             "stopAtEntry": false,; b0 x6 y: x$ x7 F! U  R0 L
  10.             "cwd": "${workspaceRoot}",: e) B2 l& i' o9 O, Z4 K
  11.             "environment": [],( L7 J, L; Z: {! _& g5 K
  12.             "externalConsole": false,5 `9 j7 S0 C( J, ?9 r4 q
  13.             "MIMode": "gdb",
    5 U7 t. `9 O) n0 A
  14.             "setupCommands": [
    + `, g3 a& r% ?& Q: ^# q
  15.                 {) m$ T! ~+ k$ o/ @0 B; U& ~
  16.                     "description": "Enable pretty-printing for gdb",
    ' o4 r6 S8 D6 ^" Z3 F+ `- D
  17.                     "text": "-enable-pretty-printing",
    9 O1 z0 |5 y1 Y# L' G2 ~5 F
  18.                     "ignoreFailures": true/ |+ Y3 ?' T2 E( n+ X
  19.                 },. U$ p3 h- b3 a6 {3 b! w$ y
  20.                 {
    ( O9 o. W2 m" A5 v% G
  21.                     "description": "Set Disassembly Flavor to Intel",
    , k7 H6 G! ^1 Y* \/ Q
  22.                     "text": "-gdb-set disassembly-flavor intel",1 p' v: u* G# A6 ~) K5 C+ L
  23.                     "ignoreFailures": true
    - f: h; B8 V5 E9 G% Z" r" K& e
  24.                 }
    / {' G$ L1 L2 b/ m6 z' w. w
  25.             ],/ M) `5 ^$ @: `7 e. q: B
  26.             "preLaunchTask": "Build",5 i* J! |5 Y4 U1 a) f+ h: ~" Y
  27.             "miDebuggerPath": "/usr/bin/gdb"; D6 d7 ?. S/ Y2 O3 l4 ?8 a6 g# N
  28.         }
    ' \9 Z% `3 U9 W/ j
  29.     ],* K1 M. N& w2 N1 t# g  O
  30.     "version": "2.0.0"& V, L, i# U9 ]
  31. }
复制代码

0 F. H, l- X" {9 d/ O: u"program"选项代表,需要进行调试的程序,所以这里需要修改为对应的文件。"PreLaunchTask" 代表debug流程的前序任务,这里的内容需要和tasks.json中的label相同。"args"可以添加执行程序的过程中,需要添加的参数。在下面的代码中,我们就添加了cacti程序,以及参数。2 U8 Z; `/ i4 L. Z% Y

- Q0 k0 n  R+ `: o4.3、生成c_cpp_properties.json文件7 V% W# C* Q% W3 T4 `$ E
ctrl+shift+p 搜索C/C++:Edit configurations(UI) 即可生成该文件
: }: o6 n9 }( f8 i
  1. {
    ' m5 l) Z7 v3 c) T
  2.   "configurations": [9 `" G; f+ q) ?) n) X
  3.     {  L3 H2 q. N4 O, {* U# S
  4.       "name": "Linux",6 t. t& s9 t- Y# ?# {4 V7 v0 i
  5.       "includePath": ["${workspaceFolder}/**"],; B3 y' O( N% z: I
  6.       "defines": [],
    0 f0 Q) C$ P# Z: J, k2 B: a3 `
  7.       "compilerPath": "/usr/bin/gcc",$ s1 i5 Z+ q1 R- V& A
  8.       "cStandard": "c11",  L) |' p, [0 I0 E
  9.       "cppStandard": "c++17",3 D" W6 y! y+ G: @+ R6 R) _
  10.       "intelliSenseMode": "clang-x64"
    + S( }  J: D+ l5 a  ~+ d! \
  11.     }, x% Y6 Y+ a0 E/ a
  12.   ],
    ; V/ m8 D9 G' p8 C* y* H
  13.   "version": 43 C) ]! r; }( s/ M& }2 M$ `
  14. }
复制代码
3 u+ C; |3 `+ p* j- L( N( x" F
05安装Vim
( A& r& U6 H9 r+ U' t1、命令行安装
! n5 u9 S& G0 y# O! \; ?" G+ o
  1. chen@ubuntu:~$ sudo apt-get install vim+ E: q2 q2 y2 C9 a, A
  2. chen@ubuntu:~$ touch a.txt
    # k6 c$ y, v- J7 c. V
  3. chen@ubuntu:~$ sudo vi a.txt
复制代码

4 p, H4 N, B, V* s5 h8 O0 [06安装gcc-arm-none-eabi
" V# Z/ i. p! S6 N8 K9 V1、下载嵌入式gcc编译器
, {* ^3 K6 N' R# Y+ bhttps://developer.arm.com/downloads/-/gnu-rm+ D& s* P* O  N" W4 ~) |
0 H1 x7 y  L7 M+ h, m
微信图片_20240615144414.png
9 A# m$ `& P8 D: }% F8 H' s/ D
4 i: X* Q/ [/ X2、解压gcc-arm-none-eabi-10.3-2021.10
  ], @: Z1 w/ m1 [# D( E
  1. chen@ubuntu:~$ tar -vxjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2& ^6 ^: v0 ?* l9 k. z9 A
  2. #对于bz2、gz文件解压% A, C0 l2 W% R1 o3 Q
  3. tar -vxjf test1.tar.bz21 w& R+ T6 ~0 l- Y& T* D" c
  4. tar -vxzf test2.tar.gz) q* j. u' Y$ k( `- @
  5. #对于bz2、gz文件压缩
    9 a/ [+ {4 s/ Q2 t3 g& b
  6. tar -vxjf test1.tar.bz2( a5 T9 A; O  w
  7. tar -vxzf test2.tar.gz
复制代码
+ P9 }3 f$ y8 }! K" O
3、添加gcc-arm-none-eabi下的可执行文件命令到Terminal(终端)* J! V/ c( G3 ?- i' x' l1 M
  1. chen@ubuntu:~$ sudo gedit .bashrc
    - B  K6 d$ A  h: J' }$ N# w
  2. #在文末添加下面一行
    , u  p$ M, ~& x7 [6 |
  3. export PATH=$PATH:~/gcc-arm-none-eabi-10.3-2021.10/bin( p! k: ^( a5 ?4 P: v
  4. #添加上述行
    1 e$ G4 ^( d$ |
  5. chen@ubuntu:~$ source ~/.bashrc2 v4 }. E+ X3 ?  J& j6 b( V; S
  6. chen@ubuntu:~$ arm-none-eabi-gcc --help
    : A/ X- a% \: h: i+ T& A) ]
  7. chen@ubuntu:~$ arm-none-eabi-gcc -v
复制代码
$ G  f4 Q- c4 h7 P0 p) x
07安装stm32cubemx
* r( L  {" u" C" y1、下载stm32cubemx
% ?. W- }9 Y/ r. l8 xhttps://www.st.com/zh/development-tools/stm32cubemx.html
/ }( y0 P/ d3 Y& Z, Y! `
( G2 ?! T. N2 Q8 b1 \
微信图片_20240615144411.png
4 c- n8 @+ O* s* J8 r9 a2 `
. u: V  F5 C  b9 F8 k% B2、安装
  1. chen@ubuntu:~/Downloads$ unzip en.stm32cubemx-lin-v6-11-1.zip* \2 x. Q' l- ~& _( O& p
  2. chen@ubuntu:~/Downloads$ sudo chmod 777 SetupSTM32CubeMX-6.11.1
    # c  P' T. b6 z* g
  3. chen@ubuntu:~/Downloads$ ls -l
    1 ~, j: T& k  d. {
  4. -rwxrwxrwx 1 chen chen 539136342 Apr 11 09:41 SetupSTM32CubeMX-6.11.1
    2 N) u+ j2 [2 X6 z
  5. chen@ubuntu:~/Downloads$  Y- u7 k; `/ o2 A0 \5 s& T
  6. chen@ubuntu:~/Downloads$ sudo ./SetupSTM32CubeMX-6.11.1
    ! t4 o  l6 P+ q/ k, U2 _( [
  7. chen@ubuntu:~/Downloads$ find /usr -name STM32CubeMX7 U* j  a. ~% O. M
  8. chen@ubuntu:/usr/local/STMicroelectronics/STM32Cube/STM32CubeMX$ ./STM32CubeMX
复制代码
# s# H: I- m, ]* N
3、增加图标到菜单$ H. _0 v2 L/ E3 l$ r# S* U6 p
  1. chen@ubuntu:~$ /usr/share/applications/1 u8 Q* W2 C8 M
  2. chen@ubuntu:/usr/share/applications$ sudo touch stm32cubemx.desktop2 X3 {" }3 H) n: O
  3. chen@ubuntu:/usr/share/applications$ sudo gedit stm32cubemx.desktop
    ) W& \1 E: P  ~, C+ N' r' f
  4. chen@ubuntu:/usr/share/applications$ cat stm32cubemx.desktop- c7 f8 h1 d. h1 z1 j8 k
  5. [Desktop Entry]
    1 X" p9 s! m- T# L
  6. Type=Application0 z& o" m; M, i/ k/ ~
  7. Name=STM32CubeMX( q  A( Z: C! H; n+ L2 g
  8. Comment=STM32 Development Environment8 x1 ?- @& k0 P. \
  9. Encoding=UTF-8/ g, s1 K3 K- @' V0 i, `
  10. StartupNotify=true
    6 Z) u/ C, F' t1 o5 i
  11. Terminal=false4 ]' [3 S) L8 G* d- D; W0 j
  12. Categories=Development;java;c;c++;2 U( r+ m/ r  |% ]3 f! B- \8 }
  13. #icon= ##########图标的路径,自己找一个就行2 |& G( @: S; o/ V3 g
  14. Exec= /usr/local/STMicroelectronics/STM32Cube/STM32CubeMX/STM32CubeMX# _# E. F  R( ^( D, q& ?; O
  15. chen@ubuntu:/usr/share/applications$
复制代码
. t% A, K# x1 O( x' o: s
08使用stm32cubemx生成初始代码
+ d% B& f/ h( a6 }! X' Y1、选择芯片->配置->Generate , D; k* M: J& c  @5 ~: G5 i
% U# f3 d3 \$ |7 @
微信图片_20240615144405.png
5 b: L+ X# y" \3 j# t4 s/ c" t9 }% I
2、一定要记得勾选PinOut-Debug-SerialWire否则后面下载程序时会报错Error: init mode failed (unable to connect to the target) 。这个是巨坑,一定要小心!!!!!!!!!!2 C6 ~; L2 B2 a
- {  ^. G; V; c. ^8 f- c
微信图片_20240615144355.png
5 x7 c4 `: l6 R( V) L# ]5 R

* |) `+ [3 c# v1 |' v' f2 w& l- A5 ~09配置VSCode
9 r& B* D/ w$ m1、使用vscode打开上述生成的初始代码
8 e! v+ I4 k; {1 I8 p7 A2、生成VSCode配置文件5 r4 {$ l3 a  d+ I: @% N  g
2.1 c_cpp_properties.jason3 M+ f4 Z& P1 ?
ctrl+shift+p->Edit Configurations(JSON)生成.vscode/c_cpp_properties.json文件
0 T# T6 ^0 i5 j: M% Q: x/ Q
( w* w8 O9 U: w6 r1 ]
微信图片_20240615144351.png 9 A/ G5 q5 D* s" z8 z2 f, G1 B
  1. {% l# j& B% O1 f! i- P5 u
  2.     "configurations": [
    1 F; G( I- T+ v* i, v7 j/ c
  3.         {
    ; {- y3 t  @6 C' [& @# C
  4.             "name": "Linux",3 c9 @9 k  {5 Q+ h2 _/ N
  5.             "includePath": [
    ; b3 W/ L  L* F+ b2 t+ l) m
  6.                 "${workspaceFolder}/**"* M. Y1 @5 F: r  V% D- p
  7.             ],$ K9 w+ g- E6 t2 Z9 w9 b. W1 D
  8.             "defines": [
    1 Q  u( I- U( H  K4 g$ w6 U. |6 K( g( u  ?
  9.                 "USE_HAL_DRIVER",9 A! N9 Q! E* }; S- W! Q8 E
  10.                 "STM32F103xB"; l" B# M5 Z; a: B7 T
  11.             ],6 n4 m/ G: e- a$ f) L; b$ \0 M, X9 A
  12.             "compilerPath": "/home/chen/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc",8 F7 J$ y1 b% t3 u' x
  13.             "cStandard": "c99",
    8 [' M. F! ?) [
  14.             "cppStandard": "gnu++14",$ D3 i" u6 n- e( d2 w# y6 c
  15.             "intelliSenseMode": "gcc-arm"
      b/ C- M* R, q
  16.         }" }  U2 z- {0 k! V2 j
  17.     ],7 a& [6 X0 M% g- s/ s/ ~
  18.     "version": 4
      n6 _0 R3 L, m
  19. }
复制代码

+ Z6 t4 _7 K, y6 W1 w# X7 P2.2 task.json; K( d3 X6 ^* H' L) |  h! a
修改好task.json即可使用ctrl+shift+B对stm32工程进行编译
' h# @$ d, d9 G) s; ?" e# I
5 D2 N/ h2 K! _/ z0 R/ i
微信图片_20240615144348.png . {" g) t$ X, G! U, K3 N
& {; i( j6 K2 U+ E( v% r

& [! L. ~/ U9 o6 r- q" E8 G 微信图片_20240615144344.png $ n- c# m- P3 U: j# o4 n/ |
$ D8 O) c8 E* h
8 E: w, c  N/ O. X) q) \
微信图片_20240615144341.png 0 U9 B- K% D  m4 A/ D

) P7 c8 P6 K; V* ^# z- d7 l- s; b1 a+ h5 U* [8 J  Q8 v3 `
修改如下:
8 V, ^$ {& E* k1 @
  1. {) r$ H4 A; b) |+ `8 A  m4 n
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558$ E& C, ]0 h9 O5 \  `9 K+ ^
  3.     // for the documentation about the tasks.json format" i$ |5 A# @. S6 H0 O4 n
  4.     "version": "2.0.0",
    ; A* K8 t7 q) r
  5.     "tasks": [
    / Z4 b- z6 U5 Y" y% p
  6.         {
    : b8 v. l8 R* J
  7.           "label": "Build",      // 标签名5 A) U- e# Z  {
  8.           "type": "shell",      // 终端(shell)型的任务
      g, P" I& z3 S) n" b6 _
  9.           "command": "make",    // *执行的命令
    ( q- u% L+ M  R* L3 P
  10.           "args": [          // 命令的参数: m- |( f8 p8 j# y- G( o- \1 R5 @
  11.             "-j6"          // 表示六线程同时编译
    : u: Q0 I! F; N% ^% L
  12.           ],* O- \. b5 P' J8 ]) h& X
  13.           "problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误7 C  S1 l1 r# ~+ J6 W9 }
  14.           "group": {
    - w  B* u; k2 i
  15.             "kind": "build",$ o- I5 L3 j- p; `& Y* R9 [
  16.             "isDefault": true0 T0 D5 b* S: [& _
  17.           }# i% J, V* G% Y
  18.         }6 k5 w6 D( _6 i. R# E) V3 A

  19. 8 h  A& T' k8 p' M. y
  20. }
复制代码

" v" ?: M, ]& h9 k2.3 settings.json
. C2 Y! h% A, p9 O
: G1 a# n* `: W0 X6 c! i
3、上述”defines“字段中的定义应包括stm32cubemx生成的Makefile文件中相关的宏定义; f( H. B9 G3 Q8 m9 E* r8 Y

* v0 t% p0 @3 S& c9 ^
微信图片_20240615144337.png
: v3 j: D4 g8 A: R; D, H
+ d% ^5 E( ]6 U. v4、make编译/使用ctrl+shift+B
  A1 M; I/ B' e
  1. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make clean
    + {( |  J$ l$ C  I. Q( q' \
  2. chen@ubuntu:~/prj_vscode/linux-stm32/test$ make
复制代码
/ N" E& s2 m, F- k- o8 u
10调试
$ ^! a1 Z! Z- Q( K  F9 e3 T1、安装openocd
  1. chen@ubuntu:~$ sudo apt-get install openocd
    9 t- L8 P% _/ k6 H
  2. chen@ubuntu:~$ whereis openocd
    % ~: d0 `" i5 a/ `9 _# Y* G
  3. openocd: 5 s0 Y4 v% x; k. e$ c! R8 z! A
  4. /usr/bin/openocd
    6 \6 D; g6 t4 T% A
  5. /usr/share/openocd
    ( q5 q9 g4 Y& D
  6. /usr/share/man/man1/openocd.1.gz 7 e& N* _+ ]1 u
  7. /usr/share/info/openocd.info-2.gz 5 h- M9 p# h5 K4 m
  8. /usr/share/info/openocd.info.gz 3 Z# K* k$ B: N% o% ]. b' e
  9. /usr/share/info/openocd.info-1.gz
    5 b' e5 Y' \/ y# Y5 J) K
  10. chen@ubuntu:~$
    6 y6 q! c: o1 U: H
  11. //连接好stlinkv2-1到电脑和pcb板,输入以下命令。完成连接) m. w: c+ n8 ~6 l# e8 D: J
  12. chen@ubuntu:/usr/share/openocd/scripts$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x_stlink.cfg
复制代码
, o" z: }4 p5 y1 F% E
2、在tasks.json中使用openocd进行编译后的下载
  r' Q# @% H* }
, M- q0 L; S, _! `在原本的tasks.json中追加popenocd的相关内容7 k* ?+ y# f' F) T, u; X8 Y, {5 _
  1. {3 A6 n% a. B" ?4 I7 W
  2.     // See https://go.microsoft.com/fwlink/?LinkId=733558! C8 i4 Q! E- k5 {
  3.     // for the documentation about the tasks.json format
    # t, ?& ]( m# i. G- l& |8 i
  4.     "version": "2.0.0",4 Z: E; n+ w3 g& ?
  5.     "tasks": [- q  A3 f# }/ J, Z
  6.         {/ A5 A6 y% `9 G, F
  7.           "label": "Build",      // 标签名
    : {5 n2 A8 n! K, U
  8.           "type": "shell",      // 终端(shell)型的任务
    + w3 d& W# N9 f/ s$ z
  9.           "command": "make",    // *执行的命令
    6 M# M/ |  p! B6 t! y" L* K! b7 J5 S
  10.           "args": [          // 命令的参数; Y7 p' d3 W2 E
  11.                           // "-j6"表示六线程同时编译
    : P' C5 t2 S2 @& H- o
  12.           ],+ X' N7 _9 ]8 o$ N. y3 M
  13.           //"problemMatcher": ["$gcc"],  // 表示如果出现了编译报错,问题面板会显示 gcc类型的错误) p' n) p: h# {- l- {" ^
  14.           "group": {
    # A' C9 D  }6 j$ j3 z
  15.             "kind": "build",' f) @8 d" ~4 R" `# w+ a* G. q# u
  16.             "isDefault": true
    1 T' O: ?/ B" f: }! y1 F9 S
  17.           }% |. j+ H( C, `/ U2 V8 w7 r
  18.         },* p7 p3 t" H# j4 V2 F0 x; {
  19.         {
    % ?) c7 g& J6 Q  H8 Y( g
  20.             "dependsOn":"Build",          // 任务依赖$ W6 u+ o5 C: ]7 ]$ T, g: v# @- t
  21.             "label": "Build and Download",
    , p& k; R8 a2 L  d+ `
  22.             "type": "shell",4 @. W0 I7 R0 u( b
  23.             "command": "openocd",) V; f  v; ~9 v: b2 |% Y9 U
  24.             "args": [5 y* v8 o1 S9 V
  25.             "-f",  a+ h1 Z6 ?$ G9 }; A/ x
  26.             "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
    ! ^  m7 Q( L+ e8 b% |4 @
  27.             "-f",& O( ~; t1 X2 ?6 @# `, [" A/ b$ K0 N( [
  28.             "/usr/share/openocd/scripts/target/stm32f1x_stlink.cfg",
    ) H$ \$ L* d. ~5 M& O* s1 e
  29.             "-c",6 m, _% x3 A7 z  X: X  [9 {
  30.             "program ./build/${workspaceFolderBasename}.elf verify reset exit"# y1 F- W9 U& o* F1 A
  31.             ],# V( k" J# G( R! C
  32.             "problemMatcher": []
    ; I2 Q* {. d3 ^  X) N. T$ F
  33.         }
    5 c4 U( T, R( Z' c
  34.         
    0 J# ?. w1 h, l  G
  35. 0 Z. D! U2 I4 l/ G* s
  36. }
复制代码

6 l% W) j" ]5 J0 c5 l4 `' P$ `3 h1 z- a这个任务要求先进行 Build任务,然后通过命令打开 openocd,加载两个配置文件(-f interface/stlink.cfg 和 -f target/stm32l1.cfg),同时,这个 -c 的选项后面跟着的就是openocd成功加载后执行的内置命令,这里我们让它下载、验证、reset,然后直接退出,这样就实现了一条龙式的下载。
5 @  x, ]- i$ m0 ^% T( c! G
7 T* D! F! ]% C! H! w
微信图片_20240615144333.png 0 B, k; a2 d+ _' P7 F

' J5 h; t, t" r0 d& C3 U; l 微信图片_20240615144330.png
: }8 y" n) N) K% T% H  p! Y8 Y, e
3、使用openocd进行调试
9 M$ ]) r* i' T, ]$ y3.1 安装Cortex Debug和Venus's Cortex-Debug插件(第二个插件一定要安装,否则会报错Failed to launch OpenOCD GDB Server: Timeout.)
- Z  L0 T' v* n2 f$ @+ B, J5 x2 B3 N. p% {1 g) E9 {+ ^# u
微信图片_20240615144327.png
5 b& J& ~3 V0 O, h0 e4 H8 t6 m4 u8 d1 ?3 R6 Q9 G6 h
微信图片_20240615144324.png 5 w1 Y3 }: o0 R2 q' C- x
, M- m* L1 J+ |8 D
3.2、 添加调试配置$ K& |% u0 W( _3 l( V
/ U/ P- _9 }/ d) [0 ]# i: m
微信图片_20240615144321.png 3 P  P" Y& |$ a4 R

- U5 }" S, U  k6 ^7 @4 [' b' E  l, a/ E3.3 选择cortex debug,生成launch.json,并修改内容如下
8 Z& D3 u3 Q2 B- D6 T
& e. n! L+ C3 z7 Q5 `5 m6 I
微信图片_20240615144318.png
8 U- D6 }8 H- p; N/ Y  T  Y* L
# P& D4 p* P* S6 e6 _
  1. {
    # Z8 s% H* w3 Z; M0 M) \/ L
  2.     // 使用 IntelliSense 了解相关属性。
      T$ R- O) K/ I3 Y. E  L+ `( a" H# D
  3.     // 悬停以查看现有属性的描述。
    ; A9 _4 a! p) Y8 A
  4.     // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387. V# ?7 G: r% N' S0 Q
  5.     "version": "0.2.0",
    3 T* r( g! K7 Q5 Z* C" A
  6.     "configurations": [
    6 e1 M6 z8 c, f9 k  \5 S
  7.         {3 e7 Q8 c- L8 H' m1 u- e! L: ?# L
  8.             "name": "Cortex Debug",
    / ?2 c9 Y2 \  @* d
  9.             "cwd": "${workspaceRoot}",  // 输出路径
    ! K  W  h3 q( R) ^7 C
  10.             "executable": "./build/${workspaceRootFolderName}.elf",    // 要调试的程序# X" f8 m. R  C" d
  11.             "request": "launch",. I4 o  ]  a5 \
  12.             "type": "cortex-debug",( o9 v' s- y1 D6 k6 i& ~( P
  13.             "servertype": "openocd",    // 调试器选择
    % E' g; C* R& F7 k- \
  14.             "device": "STM32F103C8",    // 使用J-link GDB Server时必须;其他GBD Server时可选(有可能帮助自动选择 SVD文件)。支持的设备见 https://www.segger.com/downloads/supported-devices.php
    9 A/ D. m/ `+ D# |
  15.             //"svdFile": "./STM32L15xC.svd",  // svd文件,有这个文件才能查看寄存器的值,每个单片机都不同。可以在以下地址找到 https://github.com/posborne/cmsis-svd下载
    + T; ]4 Q; G! F% }0 i
  16.             "interface": "swd",9 H9 n# I6 L" E. g7 I
  17.             "configFiles": [3 u/ @+ d7 R9 t# E# f2 J( z
  18.                 //"${workspaceRoot}/openocd.cfg",  // *可以通过加载该文件来配置
    / o% L! \% R1 Z6 p3 M
  19.                 "/usr/share/openocd/scripts/interface/stlink-v2.cfg",
    % F% W: W* F. k  G
  20.                 "/usr/share/openocd/scripts/target/stm32f1x.cfg"4 _0 Z* m+ ~' L1 x+ m' B2 ^
  21.             ],
    4 T8 _5 m; [5 B
  22.             "runToEntryPoint": "false",
    # D' i& a( C8 p9 r0 q8 m# t) @9 ?
  23.             //"runToMain": false,
    $ E) M/ l0 j$ ^9 {
  24.             "preLaunchTask": "Build",   // 在调试前预先执行的任务,此处是tasks.json中的: x8 [. G& O7 [6 V) L
  25.             //"armToolchainPath": "C:\\Program Files (x86)\\GNU Tools ARM Embedded\\5.4 2016q3\\bin"    // 如果没有把 arm工具链路径添加到系统环境变量,则需要这条指令添加你的路径
      A& c. g5 [* V/ G1 Q
  26.         }
      b# T# |6 g+ R# F/ k( W

  27. 6 o7 F1 T0 y+ l$ `* m% y
  28. }
复制代码
# ^' S0 O5 P8 T4 e, W
3.4 调试
. ?2 ^- [0 h' Y; `; f( @$ x: l7 H, z" [) {
微信图片_20240615144314.png * R% j3 U2 t8 f+ q# c* U
/ V/ w5 A& I0 l/ i
11使用VSCode串口工具
+ `. P3 |# c# m: @! i, F9 z, ]
1、安装serial monitor5 {# m+ [* z* v7 h8 ^; K# {

" u8 W; D7 R0 a' r$ M- f+ y
微信图片_20240615144304.png - v% O; x- B0 I( f, ^. r/ F

7 C" J8 e- E0 C+ V% O% Q2、查看连接的usb+ |* T; X1 F' W8 G/ v
  1. chen@ubuntu:~$ lsusb
    ( [$ _- K( B# Y- y* ]
  2. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub! s8 y6 `. `) ?& J' L+ n, q+ F
  3. Bus 002 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter  Z* `' Z- h% O+ B) Q* Y5 d4 T
  4. Bus 002 Device 006: ID 0483:3748 STMicroelectronics ST-LINK/V29 [/ U5 B5 S# c  Z  M& t6 r
  5. Bus 002 Device 004: ID 0e0f:0008 VMware, Inc. VMware Virtual USB Mouse
    8 T  V- P; F7 M. z8 D% a% I
  6. Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
    2 t* Q: Y6 S& G, m" i( \, l; G
  7. Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
    + G9 n8 ]' e% w! j
  8. Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    - |$ C1 }8 b/ d
  9. chen@ubuntu:~$
复制代码
9 E/ b1 \; c( d. G* X
2、加权限
  1. chen@ubuntu:~$ sudo chmod 777 /dev/ttyUSB0
复制代码
8 j9 V$ z; ?8 G' v( E2 M& q& y
12使用git- q6 b# w  n( }. d7 a! `6 Q, f
1、检查状态
! y: A2 `6 x  `5 C9 \! v9 P1 A$ w
  1. //在执行 git add 和 git commit 之前,先执行以下命令查看当前仓库的状态:3 k6 b' _# \2 G( W6 U5 q
  2. git status
    : \4 Z* `3 e. a8 M: H' T3 f
  3. //这将显示工作目录和暂存区的状态。确保没有未追踪的文件,也确保已将需要提交的文件添加到暂存区。
复制代码
9 c2 K3 [% N3 @3 E: {
2、确认 Git 配置:* S; r9 U. @! c
  1. git config user.name& a4 H8 i: D7 V
  2. git config user.email" X; y8 n$ R  J$ g* c% q; D

  3. : K3 _4 K7 U; n# |3 \/ {

  4. 0 U* G& ^9 |$ f
  5. 如果没有设置,请使用以下命令设置:8 v1 v8 b: A  D' ~" D; B
  6. git config --global user.name "Your Name"5 e8 Y5 `1 W+ Q1 u3 _3 u2 x
  7. git config --global user.email "your.email@example.com"
复制代码
) w7 h1 G$ P% _4 V
3、检查文件权限& `' m6 Y' z0 [! m- c5 @
确保你有权限在新文件夹中进行写操作。使用 ls -l 命令检查文件和目录的权限:
1 L' G7 M# j4 \) O3 ~ls -l1 D5 c2 k* U$ v3 {  H: S

( o# F' s+ f. a- z- @7 q
4、查看错误信息:! h: o0 g4 j$ {3 v# t, P
如果 git commit 操作没有反应,尝试使用 -v 参数查看详细的错误信息:
+ _, `. }7 J# i: b9 M. @* ~git commit -v
$ j. l. e: e) [  }5 r, F7 S+ N8 N# R
5、清理缓存:
5 n: q6 s1 Z' l8 x有时 Git 的内部缓存可能导致问题。尝试清理 Git 缓存并重新尝试:
$ Y8 n9 D' d6 R1 K; W& w6 fgit rm -r --cached .
+ c. _: W0 e& v* H; wgit add .
- H. s; M6 A9 X/ q0 R( ggit commit -m "Your commit message"0 i5 n0 F' G9 v: B  V  O, `
这将清理缓存并重新添加和提交所有更改。) M! o3 B; A+ V! Z+ @- h

; K. j2 _$ F+ y+ d/ j% i0 q

  O) ~! O* }! l- o8 C' L转载自:kevin0 Y4 ]9 v( H' J0 h, m

9 E$ N6 K9 k7 q9 @4 \/ l8 Q- P如有侵权请联系删除" p- X1 Q6 e# ~

. J" H! s' w; c' S6 P; I
$ H. k& e1 ~: o2 v4 O
6 x% w: h; l( W2 Q
1.png
赞 收藏 评论0 发布时间:2024-6-15 14:45

举报

0个回答

所属标签

相似技术帖

官网相关资源

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