《嵌入式系统 - RT-Thread开发笔记》 第三部分 RT-Thread 移植与设备驱动开发 - 第1章 RT-Thread 开发环境搭建 (Keil+env)

Posted BruceOxl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《嵌入式系统 - RT-Thread开发笔记》 第三部分 RT-Thread 移植与设备驱动开发 - 第1章 RT-Thread 开发环境搭建 (Keil+env)相关的知识,希望对你有一定的参考价值。

开发环境:
RT-Thread版本:4.0.4
操作系统:Windows 10
Keil版本:V5.30
开发板:stm32f746-st-nucleo
开发板MCU:STM32F746ZG

1.1准备工作

在电脑上装好 git,软件包管理功能需要 git 的支持。git 的下载地址为https://git-scm.com/downloads,根据向导正确安装 git,并将 git 添加到系统环境变量。

注意在工作环境中,所有的路径都不可以有中文字符或者空格。

1.1.1 Env工具安装

Env 是 RT-Thread 推出的开发辅助工具,针对基于 RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理功能。其内置的 menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。

主要特性:

  • menuconfig 图形化配置界面,交互性好,操作逻辑强;
  • 丰富的文字帮助说明,配置无需查阅文档;
  • 使用灵活,自动处理依赖,功能开关彻底;
  • 自动生成 rtconfig.h,无需手动修改;
  • 使用 scons 工具生成工程,提供编译环境,操作简单;
  • 提供多种软件包,模块化软件包耦合关联少,可维护性好;
  • 软件包可在线下载,软件包持续集成,包可靠性高;

Env 工具包含了 RT-Thread 源代码开发编译环境和软件包管理系统。从 RT-Thread 官网下载 Env 工具。

下载地址

下载完成后,打开 Env 控制,RT-Thread 软件包环境主要以命令行控制台为主,同时以字符型界面来进行辅助,使得尽量减少修改配置文件的方式即可搭建好 RT-Thread 开发环境的方式。 打开 Env 控制台有两种方式:

方法一:点击 Env 目录下可执行文件
进入 Env 目录,可以运行本目录下的 env.exe,如果打开失败可以尝试使用 env.bat。

打开env的界面如下:

方法二:在文件夹中通过右键菜单打开 Env 控制台
Env 目录下有一张 Add_Env_To_Right-click_Menu.png(添加 Env 至右键菜单.png) 的图片,如下:

根据图片上的步骤操作,就可以在任意文件夹下通过右键菜单来启动 Env 控制台。效果如下:

【注意】因为需要设置 Env 进程的环境变量,第一次启动可能会出现杀毒软件误报的情况,如果遇到了杀毒软件误报 ,允许 Env 相关程序运行,然后将相关程序添加至白名单即可。

Env就安装好了,很简单。

1.1.2下载源码

RT-Thread 官方将源码https://github.com/RT-Thread/rt-thread/,点击链接找到下图的位置,将其下载下来。

可以在线下载,也可使用Git下载 RT-Thread 源码,使用命令:
$git clone https://github.com/RT-Thread/rt-thread.git

下载源码,进入源码目录:

下表是该目录的简单说明。

目录名 描述
bsp Board support package,RT-Thread 板级支持包 (gcc/IAR/MDK 工程在 BSP 目录下的具体的 BSP 中)
components RT-Thread 的各个组件目录
documentation 一些说明文件,如代码风格说明
include RT-Thread 内核的头文件
libcpu 各类芯片的移植代码,此处包含了 STM32 的移植文件
src RT-Thread 内核的源文件
tools RT-Thread 命令构建工具的脚本文件

1.2使用STM32编译和运行 RT-Thread

笔者就不用QEMU模拟硬件了,直接上板子吧。第一个例子还是使用点灯的实例。先看看笔者使用的开发板的LED硬件电路图。

1.2.1选择 BSP

用户获取 RT-Thread 源代码后需要根据自己手上的开发板型号找到对应的 BSP,就可以运行 BSP 提供的默认工程。大部分 BSP 都支持 MDK﹑IAR 开发环境和 GCC 编译器,并且已经提供了默认的 MDK 和 IAR 工程。

笔者使用的MCU是STM32F746ZG,笔记已经做好该板子的BSP,其工程文件名是stm32f746-st-nucleo,默认使用串口 3 作为 shell 控制台输出使用串口。

【注】如果在BSP没有找到相应的BSP,可以使用相似的板子进行修改,后文会针对如何修改进行说明,但没有类似的板子一般就需要重头移植了。

1.2.2搭建项目框架

在 BSP 目录下打开 Env 工具,运行 scons --dist 命令。使用此命令会在该 BSP 目录下生成 dist 目录,这便是开发项目的目录结构,RT-Thread 源码位于项目文件夹内,可以随意拷贝 dist 文件夹的工程到任何目录下使用。

进入dist目录下面的工程目录,项目框架目录结构如下图所示:

项目框架主要目录及文件的说明如下表所示:
文件 / 目录 描述
applications 用户应用代码目录
board 板级相关的移植
libraries 芯片官网下载的固件库以及板级驱动
rt-thread RT-Thread 源代码
Kconfig menuconfig 使用的文件
project.ewww 用户使用的 IAR 工程文件
project.uvprojx 用户使用的 MDK 工程文件
template. uvprojx MDK 工程模板文件
SConscript SCons 配置工具使用的文件
SConstruct SCons 配置工具使用的文件
README.md BSP 说明文件
rtconfig.h BSP 配置头文件

注意:此命令从 RT-Thread 3.1.0 正式版才开始支持。

1.2.3修改工程模板

用户一般都需要根据自己的需求对工程做一些工程配置,比如配置 MCU 型号,设置调试选项等。建议大家直接修改工程模板,这样使用 Scons 相关命令生成的新工程也都会包含对模板的修改。MDK 的模板工程为 template.uvprojx。IAR 的模板工程为 template.eww。注意:直接双击打开 IAR 工程模板修改可能会导致生成的新工程低版本 IAR 软件用不了。

下图为修改 MDK 工程模板文件的芯片型号示例,选择相应 MCU 型号。笔者这里没有修改,因为笔者的MCU和工程模板是一样的。

下图为根据自己使用的调试工具设置对应的调试选项,相关配置修改完成后就可以关闭模板工程。笔者使用的是STlink。

【注意】源代码和头文件路径的添加不建议直接修改工程模板,后面会介绍使用 Scons 工具往工程添加源代码及头文件路径。

1.2.4使用 menuconfig配置和裁剪 RT-Thread

每个 BSP 下的工程都有默认的配置,比如系统内核支持的最大线程优先级、系统时钟频率、使用的设备驱动、控制台使用的串口等。RT-Thread 操作系统具有高度的可裁剪性,用户可以根据自己的需求使用 Env 工具进行配置和裁剪。

在 BSP 目录下打开 Env,然后在使用 menuconfig 命令打开配置界面。menuconfig 常用快捷键如图所示:

还可以使能在线软件包,如下图所示,使能了 mqtt 相关的软件包。

选择软件包后需要使用 pkgs --update 命令下载软件包,然后使用scons --target=mdk5 命令或者 scons --target=iar 命令生成 MDK 或者 IAR 工程。

打开新生成的 MDK 工程 project.uvprojx ,可以看到我们选择的 paho mqtt 相关的软件包源文件已经被添加到了工程中。工程对应的芯片型号也是前文基于工程模板选择的芯片型号。

【注1】软件更新
下载 :如果软件包在本地已被选中,但是未下载,此时输入:pkgs --update ,该软件包自动下载;

更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入: pkgs --update ,该软件包将会在本地进行更新;

删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行: pkgs --update 。此时本地已下载但未被选中的软件包将会被删除。

【注2】
如果大家直接修改 MDK 工程文件 project.uvprojx 或者 IAR 的工程文件 project.ewww 添加了自己的代码,或者修改了工程的一些基本配置,生成的新工程会覆盖之前对工程文件 project 的修改。

值得注意的是,默认选择了串口的驱动。

1.2.5编译 RT-Thread固件

接下来就是编译工程,生成目标代码。

在编译之前,先打开工程源码中的stm32f746-st-nucleo /applications/main.c,将LED的宏定义改为PB0即可。当然这得根据你的板子决定如何修改引脚。

Env 中携带了 Python & scons 环境,只需在相应bsp目录中运行 scons 命令即可使用默认的 ARM_GCC 工具链编译 bsp。输入 scons 命令编译工程:

编译完成会有如下信息:

rtthread.bin就是生成的可执行文件。

【注】Env工具支持Linux的基本指令。
当然我们也可以使用keil或者IAR编译,前提是安装有KEIL或者IAR,笔者安装了KEIL,因此直接使用KEIL编译。

我们还可选择输出的hex文件,方便串口下载,当然也可在线下载。

1.2.6使用STM32CubeProgrammer烧写 RT-Thread固件

接下来可以下载至开发板运行。下面介绍STM32CubeProgrammer烧录bin或者hex到开发板的过程。

1.连接板子STlink,并将STlink连接到电脑。

2.打开STM32CubeProgrammer,默认配置即可。

如果连接正常会识别设备号,点击“connect”即可进行连接。

连接成功如下:

打开一个bin或者hex文件,然后点击“download”。

等待下载完成即可。

【注】如果STlink版本过低,是无法使用的,可使用ST-LinkUpgrade进行固件升级。

1.2.7实验现象

烧写成功后复位。即可看到LED亮灭。

接下来我们使用串口终端进行调试,本文使用终端软件 Xshell、PuTTY 等工具接收工程控制台对应串口3发送的数据,电脑右键→属性→设备管理器→端口(COM 和 LPT),即可查看串口对应的 COM 号,本文为 COM4。打开 Xshell按照下图配置,波特率一般配置为 115200。
回车,输入一些指令。

stm32f746-st-nucleo代码地址


欢迎访问我的网站

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书
BruceOu的知乎

以上是关于《嵌入式系统 - RT-Thread开发笔记》 第三部分 RT-Thread 移植与设备驱动开发 - 第1章 RT-Thread 开发环境搭建 (Keil+env)的主要内容,如果未能解决你的问题,请参考以下文章

《嵌入式系统 - RT-Thread开发笔记》手把手教你使用RT-Thread制作GD32 RISC-V系列BSP

《嵌入式系统 - RT-Thread开发笔记》手把手教你使用RT-Thread制作GD32 RISC-V系列BSP

《嵌入操作系统 - RT-Thread开发笔记》手把手教你使用RT-Thread制作GD32系列BSP

RT-Thread学习笔记如何优雅地退出QEMU模拟器

《嵌入式 - Lwip开发指南》第4章 移植LWIP(基于RT-Thead系统)

《嵌入式 - Lwip开发指南》第4章 移植LWIP(基于RT-Thead系统)