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

Linux 下 STM32 开发环境搭建

[复制链接]
STMCU-管管 发布时间:2020-9-24 13:16
安装编译器

如果还没安装编译器的,先安装:

7 @: k- k( D( @6 u: S. f3 I3 O) y
8 ^$ O8 C( X* w
  1. sudo apt install gcc-arm-none-eabi
    / M6 R$ {8 ]. `  B1 {9 e
  2. sudo apt install gdb-arm-none-eabi! Q8 |; p) g' A* V
  3. sudo apt install binutils-arm-none-eabi
复制代码
* D5 [9 l8 D% C' T3 L- r
3 s" O' G. I; J

$ F& w- y4 A0 t2 M; `6 T) z+ d安装 cmake 和 libusb
' ]. @% U4 O0 Q9 t
  • CMake(版本大于 v2.8.7)
  • Libusb 1.0(版本大于 v1.0.9)
    ! e" R. O  I4 }

) v6 \) W7 K/ I+ {5 Z8 R( _% _3 ^

: _1 G. T0 y: G3 a/ E6 p$ Q
  1. sudo apt update6 b  ~, T- [& W6 i
  2. sudo apt install cmake* g- s& {0 W5 u/ Y
  3. sudo apt install libusb-1.0-0 libusb-1.0-0-dev libusb-1.0-0-dbg
复制代码
6 T% {) x5 \6 H2 j% ]5 o# C/ r
+ z( g+ q2 o/ O9 [
安装 stlink
. E' ]' M4 Q* f' n9 u

下载开源的 STLink 驱动代码

  1. git clone <a href="http://github.com/texane/stlink.git" target="_blank">http://github.com/texane/stlink.git</a>
复制代码

编译、安装

/ S' w# N1 X( b7 ~0 v0 f! o

  1. cd stlink/
    ' L0 m7 s0 }9 r7 A/ v$ [. w
  2. make, k/ }; V! Y# J) j) R
  3. make install
复制代码
0 H% X9 V4 h' d3 b& i9 C

默认安装路径为 /usr/local/,可以根据需要指定安装路径,例如 make install DESTDIR=$HOME

安装成功后,系统增加了如下几个工具:

! K" E9 E; \* Z

7 `* w- x. o- n
工具
功能
st-flash
将二进制文件固化到 STM32 设备
st-info
查询已连接 STLink 的 STM32 设备信息
st-util
运行 GDB 服务与 STM32 设备进行交互
stlink-gui
STlink 图形化工具,如下所示
" q, g# p* U4 |/ i

1_meitu_1.jpg

连接测试
0 S1 i: w9 A) n- V5 H; I: ?. D1 Q' x2 Y1 G: i+ c

刚好我手上有一块 STM32 NUCLEO-F411R,下面我们将利用它来做个简单的实验。

使用 USB 线连接开发板和电脑,执行 lsusb 可以看到已经识别到 ST-LINK/v2.1 设备。


* Z1 y% ?% v  l

2_meitu_2.jpg


; b, k2 q# |  c% n: D$ b  b) E' A' ~/ b3 C3 K

执行 st-info --probe 查看 STLink 设备信息。


/ F6 g/ [5 i- f: y' y8 ~( v. m+ t

3_meitu_3.jpg

* P2 V3 }- Z. @$ M% o
编译 bsp 工程

前面我们已经下载好的 rt-thread-4.0.1 源码,进入 stm32f411-st-nucleo 的 BSP 目录,直接编译一下看看。

# p  E/ e( O8 H5 D
6 x7 I7 W2 n1 H: a$ g7 O
  1. cd /bsp/stm32/stm32f411-st-nucleo/) z$ E8 K  o8 o7 Q1 j4 B
  2. source ~/.env/env.sh
    & f8 A! d. Z9 d
  3. scons
复制代码

; X! q+ l, c( s/ u0 a* M) g! n- w7 d" i2 D) @3 Y
* G# x, x/ y- A
编译不了,原因是交叉编译工具没有配置好。打开 rtconfig.py 文件,找到对应编译器选项中的 EXEC_PATH 变量,将其修改为本地编译器所在的目录,我这里是 /usr/bin。

% {$ B4 y/ j4 z0 Y% B/ @  W
! ?  v& f  }6 t* K; k& w3 O

4_meitu_4.jpg


, S+ n  W8 @5 Q9 U9 A
/ C$ C: x) O  [, e; x; \* L' E

执行 scons 构建工程,出现如下错误:

. P4 m! Y  b2 p9 o

  1. ......
    ' }+ x9 L& b# A% n+ a3 `+ c. L
  2. /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c: In function 'rt_hw_usart_init':
    ! {9 Q5 G& e  f1 Q; g* L2 W$ d
  3. /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: error: 'for' loop initial declarations are only allowed in C99 or C11 mode8 k3 \4 o& i5 X3 z9 o
  4.      for (int i = 0; i < obj_num; i++)% y: w$ r5 Z: p
  5.      ^  t* I% g! K9 E, p  `" b( W* y
  6. /home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.c:662:5: note: use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code( |* T: u9 W- }8 t0 O" ^. B
  7. scons: *** [/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.o] Error 1- k4 Z. v, ?) b) ]+ W
  8. scons: building terminated because of errors.
复制代码
3 J/ I' h) A4 z& ^3 J1 n

很明显,因为代码中变量定义的风格是 C99 以上标准才支持的,所以需要为编译器指定 C99 或 C11 模式。打开 rtconfig.py 文件,在对应编译器选项中的 CFLAGS 变量末尾添加 -std=c99 参数。


8 r4 ~) B8 I" y4 b/ |- j

5_meitu_5.jpg

& o# R( U4 ?+ o6 I2 c1 R! ?
5 w3 [/ L. Y" j$ W1 |4 L& a% o

重新执行 scons 命令,稍等片刻出现 scons: done building targets. 提示,表示编译成功。可以看到当前目录下多了 rtthread.elf 和 rtthread.bin 两个二进制文件。

! G2 ?6 }  e: @' _

下载测试
; L5 l" i( G$ q8 h  q. Y' ~8 S

打开 applications/main.c 文件,在 main 函数中添加一行打印:


6 D5 I# z7 H. @3 f) R( k8 _

  1. int main(void)# e+ V: L' P0 N9 h
  2. {
    & c/ g' E9 B9 U1 m4 ~. p# l7 X
  3.     int count = 1;" _  \8 [# k' ~
  4.     /* set LED0 pin mode to output */: s3 R8 O/ T' V
  5.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);5 R! U) ^7 T2 h) D1 I

  6. 6 g8 b. ?6 t5 Y2 q! t. z
  7.         rt_kprintf("\nI am running RT-Thread in STM32 NUCLEO-F411RE.\n\n");
    " f& ]0 G1 M0 o1 D( N
  8. 6 w2 H, h6 z, y
  9.     while (count++)! j# Q! b3 e* \
  10.     {
    ' L" l: r0 c& R6 U1 Z7 m
  11.         rt_pin_write(LED0_PIN, PIN_HIGH);* r4 z" ~# v+ o
  12.         rt_thread_mdelay(500);
    ' `+ g8 n  E+ J/ _* @
  13.         rt_pin_write(LED0_PIN, PIN_LOW);+ D2 z( @6 ]% Q3 w8 d6 u
  14.         rt_thread_mdelay(500);
    ( T" B& a0 l8 g  ~% Q% b  @
  15.     }9 R5 N  g7 O8 j9 @/ r

  16.   y+ u' ^1 l8 Q$ |) O. j
  17.     return RT_EOK;
    & I; Z2 r# ]1 w9 t% T% d5 l
  18. }
复制代码
" a/ w0 O+ N. u& H0 K5 I

重新构建工程

8 o9 T, p) q! C/ a! Z' [: r

6_meitu_6.jpg


# w$ D8 ]( P, l' n+ H( e3 b

接下来执行 sudo st-flash write rtthread.bin 0x8000000,将 rtthread.bin 文件烧写到板子的 0x8000000 地址。


6 ]; o8 s% Y' n  T3 K

7_meitu_7.jpg


& @' R" k  F" @9 S& \1 j5 P1 o

看来烧写成功了!


$ J/ O; o: p9 o5 o5 h

minicom 连接虚拟串口. f! o) p, S1 T+ m3 b7 m3 v  K

我们还需要连接 STLink 虚拟串口,看看有没有打印出我们想要的信息。首先要确定设备节点,这里是 /dev/ttyACM0,然后执行如下命令进行设置:


( n; l4 r! B! @8 f& ~
  1. sudo minicom -s
复制代码

0 o$ L6 L  D# i' K

选择 “Serial port setup”,设置串口设备为 /dev/ttyACM0,波特率 115200。

# {# ~$ v- X) ?0 O& `

9_meitu_9.jpg


/ Y; _% K; t  X6 g$ ]! H% W

选择 “Save setup as…” 将配置命名为 stlink,该配置文件保存在 /etc/minicom/minirc.stlink。


6 L7 _( Q4 Y& [) O  t; _

8_meitu_8.jpg

# v+ C7 h4 Y$ @* K! y

退出,重新输入 minicom stlink 命令,即可打开 ST-LINK 虚拟调试串口。

7 H+ ~1 [# e! k1 K+ x

$ G( j3 |0 |' ^8 \( _6 I

看到我们想要的信息啦!这也表明我们在 Linux 下搭建的 STM32 开发环境 OK 了!

# K6 I& e7 E, p" u$ _5 B- p8 c/ s

10_meitu_10.jpg


( f( U& y8 ~. r4 x. ^. v% \" B
+ {- }8 x- O( Z8 [! r
收藏 1 评论2 发布时间:2020-9-24 13:16

举报

2个回答
小歆-2051663 回答时间:2020-9-24 16:23:13
微信截图_20200924162150.png
* i& p4 i, n" c7 K5 M1 v3 q
2 |1 a# ?% d$ G+ `; M这个位置的命令有错误,应该是:
7 C$ L8 R( L  n
' ^: Y9 w: b7 S( v; u% ^% _# ~, ~6 d' D
  1. git clone http://github.com/texane/stlink.git
复制代码
% `4 Z5 ]! c' x1 K6 a4 G. ]6 b

% x, L& d/ H6 I5 D& Z0 Z) v
海石生风 回答时间:2020-9-25 15:27:51
为何不用STM32CubeIDE?

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版