《嵌入式系统 - 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。
回车,输入一些指令。
欢迎访问我的网站
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