linux服务器 stm32,Linux 下 STM32 开发环境搭建

安装编译器

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

sudo apt install gcc-arm-none-eabi

sudo apt install gdb-arm-none-eabi

sudo apt install binutils-arm-none-eabi复制代码

安装 cmake 和 libusb

CMake(版本大于 v2.8.7)

Libusb 1.0(版本大于 v1.0.9)

sudo apt update

sudo apt install cmake

sudo apt install libusb-1.0-0 libusb-1.0-0-dev libusb-1.0-0-dbg复制代码

安装 stlink

下载开源的 STLink 驱动代码

git clone http://github.com/texane/stlink.git复制代码

编译、安装

cd stlink/

make

make install复制代码

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

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

工具功能

st-flash将二进制文件固化到 STM32 设备

st-info查询已连接 STLink 的 STM32 设备信息

st-util运行 GDB 服务与 STM32 设备进行交互

stlink-guiSTlink 图形化工具,如下所示

851f1456299fc7e6d0742f2ae7c162b4.gif

1_meitu_1.jpg (137.2 KB, 下载次数: 3)

2020-9-24 13:09 上传连接测试

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

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

851f1456299fc7e6d0742f2ae7c162b4.gif

2_meitu_2.jpg (84.38 KB, 下载次数: 4)

2020-9-24 13:09 上传

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

851f1456299fc7e6d0742f2ae7c162b4.gif

3_meitu_3.jpg (79.21 KB, 下载次数: 2)

2020-9-24 13:09 上传

编译 bsp 工程

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

source ~/.env/env.sh

scons复制代码

编译不了,原因是交叉编译工具没有配置好。打开 rtconfig.py 文件,找到对应编译器选项中的 EXEC_PATH 变量,将其修改为本地编译器所在的目录,我这里是 /usr/bin。

851f1456299fc7e6d0742f2ae7c162b4.gif

4_meitu_4.jpg (134.86 KB, 下载次数: 1)

2020-9-24 13:09 上传

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

......

/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':

/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

for (int i = 0; i < obj_num; i++)

^

/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

scons: *** [/home/rudy/workspace_hd/Draft/RTTB/rt-thread-4.0.1/bsp/stm32/libraries/HAL_Drivers/drv_usart.o] Error 1

scons: building terminated because of errors.复制代码

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

851f1456299fc7e6d0742f2ae7c162b4.gif

5_meitu_5.jpg (130.91 KB, 下载次数: 2)

2020-9-24 13:09 上传

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

下载测试

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

int main(void)

{

int count = 1;

/* set LED0 pin mode to output */

rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);

rt_kprintf("\nI am running RT-Thread in STM32 NUCLEO-F411RE.\n\n");

while (count++)

{

rt_pin_write(LED0_PIN, PIN_HIGH);

rt_thread_mdelay(500);

rt_pin_write(LED0_PIN, PIN_LOW);

rt_thread_mdelay(500);

}

return RT_EOK;

}复制代码

重新构建工程

851f1456299fc7e6d0742f2ae7c162b4.gif

6_meitu_6.jpg (108.27 KB, 下载次数: 5)

2020-9-24 13:09 上传

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

851f1456299fc7e6d0742f2ae7c162b4.gif

7_meitu_7.jpg (221.21 KB, 下载次数: 4)

2020-9-24 13:09 上传

看来烧写成功了!

minicom 连接虚拟串口

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

sudo minicom -s复制代码

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

851f1456299fc7e6d0742f2ae7c162b4.gif

9_meitu_9.jpg (63.86 KB, 下载次数: 1)

2020-9-24 13:09 上传

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

851f1456299fc7e6d0742f2ae7c162b4.gif

8_meitu_8.jpg (85.39 KB, 下载次数: 4)

2020-9-24 13:09 上传

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

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

851f1456299fc7e6d0742f2ae7c162b4.gif

10_meitu_10.jpg (70.88 KB, 下载次数: 3)

2020-9-24 13:09 上传

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值