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

Linux 下 STM32 开发环境搭建

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

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

- l/ k8 E5 g7 ~! d2 v$ m

7 L% b" I3 n8 M% `" K2 f6 N
  1. sudo apt install gcc-arm-none-eabi, r* a' M% W. \( H, L6 L& J! _- N# W
  2. sudo apt install gdb-arm-none-eabi
    . [2 _0 i8 C4 S  F5 F5 l
  3. sudo apt install binutils-arm-none-eabi
复制代码
. G* J# U" b3 I% N

/ q4 M5 b& _) y" {4 x# I
7 M4 s3 {4 L" g9 j1 T安装 cmake 和 libusb# K3 K# s) b' x
  • CMake(版本大于 v2.8.7)
  • Libusb 1.0(版本大于 v1.0.9)2 P: y9 }) N" p/ t

* |* E: i" i3 i( i: S! ~! ]

2 O/ j! c5 k! r' G# z1 s' R4 ^
  1. sudo apt update
    3 ~: R5 [4 e* c0 m; c
  2. sudo apt install cmake* @* P# Y" l5 U4 i4 J; W
  3. sudo apt install libusb-1.0-0 libusb-1.0-0-dev libusb-1.0-0-dbg
复制代码
* _7 _" w( z9 a& X& |5 `
( D! ?9 u, h# k( t' ]- }1 i5 B
安装 stlink
% I* y0 Q- l! }0 ^1 N" V

下载开源的 STLink 驱动代码

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

编译、安装


! q  Z( a1 B( V2 r6 \" C6 z- E+ l% ?" d

  1. cd stlink/3 k6 ]/ Q0 x1 f! u
  2. make. G# o) j3 L2 l: R# G7 {! P
  3. make install
复制代码
+ w3 S/ N0 V6 \# ]" Y1 I; m, U) p

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

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


2 p- x0 L, V1 z' ?. \


! g. m  ^$ }6 G, i
工具
功能
st-flash
将二进制文件固化到 STM32 设备
st-info
查询已连接 STLink 的 STM32 设备信息
st-util
运行 GDB 服务与 STM32 设备进行交互
stlink-gui
STlink 图形化工具,如下所示

6 `& V, Q7 j. |4 ~* n+ [

1_meitu_1.jpg

连接测试& B9 i$ b6 F2 ]. `/ F! a
+ h9 `8 T. E2 A  f* R

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

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


4 l8 E) O: V: |0 x6 z* b- Y6 U

2_meitu_2.jpg


( F5 s) X5 R5 ?  s2 Y( v: }, r9 S1 Q. R; n3 w

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

8 J9 c' W0 u5 R

3_meitu_3.jpg


2 \) y0 ^( w  |编译 bsp 工程

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


  s+ ^- E- K0 j. _
  w' S) _6 U( b3 g1 t
  1. cd /bsp/stm32/stm32f411-st-nucleo/# L/ q) j' m- ]0 b/ V) _# F
  2. source ~/.env/env.sh, \/ w0 N" h* D: |- p# M
  3. scons
复制代码

. v& G5 f; [) R$ D6 ^3 s. ^3 S. R9 ?5 \( u3 E

5 ]* {5 F  C' l8 I- T% B% Q- a2 ~编译不了,原因是交叉编译工具没有配置好。打开 rtconfig.py 文件,找到对应编译器选项中的 EXEC_PATH 变量,将其修改为本地编译器所在的目录,我这里是 /usr/bin。

8 O" z, x/ X  O2 N: H/ b' c% P5 ?" B. _* k/ T3 j3 I

4_meitu_4.jpg


/ n5 ?" d' K! b; c/ K/ T4 J9 z$ f% \

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

) o6 b. q9 z  X/ S2 y1 A

  1. ......
    $ a; b& l& A; Y1 W" O. ]
  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':# r4 j9 m. U' L0 C# z
  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 mode
    1 _: J( E+ y0 G
  4.      for (int i = 0; i < obj_num; i++)# y2 E# A! \$ F5 ~+ D# K$ l
  5.      ^3 C3 R" Y0 O9 M+ H
  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
    ; k' x8 y6 v2 A' `; U7 U- @& d
  7. scons: *** [/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.o] Error 1# {% }4 b  \+ W' v1 c5 ^3 v
  8. scons: building terminated because of errors.
复制代码
0 ~4 U& k' Z7 x+ S0 D

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


* D6 C3 x; W$ C) o+ F

5_meitu_5.jpg

, b! e0 {- `* ?0 a+ a  j. M
$ G- @, R  f1 d

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

4 {/ _; {9 q, f$ |

下载测试
/ P7 O2 c# G5 m" b% i; S: j& h

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

' Y5 |5 L* k5 u  ]. f& J* H% E. x

  1. int main(void)
    . ]7 T- R# M/ K7 y! r( i' R
  2. {) @2 }  y' I) w
  3.     int count = 1;: f1 D' D& H, g: b& U$ W
  4.     /* set LED0 pin mode to output */
    1 R1 N  z" c4 E8 H( {  Q
  5.     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    $ O5 e; L; p8 M" m$ {
  6.   y& E7 o, I+ Q, O5 c# t* X) j
  7.         rt_kprintf("\nI am running RT-Thread in STM32 NUCLEO-F411RE.\n\n");
    1 U! O6 G& G" }( W. c

  8. " J+ X' l+ x3 m' c# c5 n, Z
  9.     while (count++)
    0 r/ b2 c2 ]* U$ `& w5 R
  10.     {
    ) Z9 `# _* O4 m3 j$ d# a
  11.         rt_pin_write(LED0_PIN, PIN_HIGH);( i. h0 n! z& B- g
  12.         rt_thread_mdelay(500);  a# t8 K( [6 A2 g# [: Z3 h
  13.         rt_pin_write(LED0_PIN, PIN_LOW);. @8 m& Y+ c& a: m
  14.         rt_thread_mdelay(500);: R# J1 j& E/ J+ q' T3 _" A! `8 F; N
  15.     }
    3 v5 S7 t8 A) }, \
  16. ' v( P* {5 q; Y3 m+ `& ]+ S
  17.     return RT_EOK;# K1 ^3 d; |: ^( D% q7 `
  18. }
复制代码
" _3 `* B; r" |/ Q, `

重新构建工程


- a8 O2 l# U( t! y3 [- m

6_meitu_6.jpg


3 U9 F. M5 S( L5 T5 c- _

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

/ Q! h. X" A  f( \1 m

7_meitu_7.jpg


- _7 E  k; I% ?' D0 A

看来烧写成功了!


+ f, o( y+ P1 ]; _

minicom 连接虚拟串口
1 ^6 Q. f" a: S

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

/ o  M" u. F& @/ s- j% n
  1. sudo minicom -s
复制代码

8 A, f$ A& b. E: [$ l

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


+ n; z/ E+ e. j; m3 ?/ _6 i

9_meitu_9.jpg

. D+ R7 Y! m* r* m2 x4 v

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

9 _! v( k- [  n2 c2 N1 \

8_meitu_8.jpg

6 [0 r) ~4 u; \  M

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


9 G# G5 n( K6 C, v- m( a


# v7 b  Y0 \8 }; }% H6 n7 n

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


; Q" K% c% l; O/ p, b2 }( Z3 A

10_meitu_10.jpg

% A/ m' B6 @0 n( A6 {
$ r9 g- ^& N( B, _
收藏 1 评论2 发布时间:2020-9-24 13:16

举报

2个回答
小歆-2051663 回答时间:2020-9-24 16:23:13
微信截图_20200924162150.png
% L0 K# X; h- t) Y1 n- h
* `$ _' T* h' \) y- i这个位置的命令有错误,应该是:& e* p/ `4 H5 g: a7 D
+ {2 g* R6 O' l+ d
  1. git clone http://github.com/texane/stlink.git
复制代码
! y0 I) G6 L3 y1 Y$ n

8 f. D# B8 T0 _' Y6 C
海石生风 回答时间:2020-9-25 15:27:51
为何不用STM32CubeIDE?

所属标签

相似分享

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