RTT之添加串口设备

如题所示:如何往BSP工程里面添加一个串口设备呢??

遇到的问题:如下图:#include +相对路径的形式:

答:

#include <stdio.h>,直接到系统指定目录去查找头文件。

#include "stidio.h",会先到当前目录查找头文件,如果没找到在到系统指定目录查找。

 gcc编译时查找头文件,按照以下路径顺序查找:

1. gcc编译时,可以设置-I选项以指定头文件的搜索路径,如果指定多个路径,则按照顺序依次查找。

2. gcc会查找环境变量C_INCLUDE_PATH,CPLUS_INCLUDE_PATH中指定的路径。

3. 系统默认的路径,分别是/usr/include,/usr/local/include,/usr/lib/gcc-lib/i386-linux/2.95.2/include(gcc库文件的路径,各个系统不一致)。

同时,include也可以采用相对路径,比如,a.c需要包含/usr/local/include/node/v8.h,由于/usr/local/include是系统的默认搜索路径,所以在a.c中可以用相对路径包含,#include<node/v8.h>。

其实类比到MDK环境下,也是一样。默认的路径就是在C/C++选项卡下添加的那些:

看了官网的一些教程,主要参考《STM32 系列外设驱动添加指南》https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/docs/STM32%E7%B3%BB%E5%88%97%E5%A4%96%E8%AE%BE%E9%A9%B1%E5%8A%A8%E6%B7%BB%E5%8A%A0%E6%8C%87%E5%8D%97.md

参照教程,应该不难配置,需要学习的只有Kconfig语法。

注意:

bsp目录下,是所有配置的总入口,都有哪些文件夹下有Kconfig文件呢?其中.代表板级bsp文件夹

.\.如:F:\SixBirld\rtOS\bsp\myOS\sixBand,这个是配置总入口,从其Kconfig内容也很容易看出调用了哪些配置

.\.board文件夹下如:F:\SixBirld\rtOS\bsp\myOS\sixBand\board,验证无效,打不开ENV配置窗口,因为此部分作为次级菜单,

打开其Kconfig,可以看到是硬件驱动定义菜单。

 

对应主配置窗口下

实际上修改这个Kcofig,就可以自己添加设备。

.HAL_Drivers文件夹下如:F:\SixBirld\rtOS\bsp\myOS\libraries\HAL_Drivers

.libraries:如:F:\rt-thread\bsp\stm32\libraries,这个是调用保存的界面如下图:

.components每个组件文件夹下都有如

F:\rt-thread\components\cplusplus下调用如下界面

F:\rt-thread\components\dfs调用如下界面:

F:\rt-thread\components\drivers调用如下界面

F:\rt-thread\components\finsh调用如下界面:

F:\rt-thread\components\libc调用如下界面: 

组件下,还是很有规律的,根据所添加的组件来调用不同的配置界面。

 

还有就是在libcpu下如:F:\rt-thread\libcpu调用如下界面

F:\rt-thread\libcpu\mips\common调用如下界面:

内核文件下F:\rt-thread\src调用此界面,可以配置裁剪RTT

主要就是这些吧,可以说每个Kconfig文件都是可以修改的,只要知道语法就可以。说明以上的路径其实就是补充一下对官网给出的语法的理解:

 

语句分析: - config 表示一个配置选项的开始,紧跟着的 BSP_USING_GPIO 是配置选项的名称,config 下面几行定义了该配置选项的属性。属性可以是该配置选项的 - 类型 - 输入提示 - 依赖关系 - 默认值 - 帮助信息

  • bool 表示配置选项的类型,每个 config 菜单项都要有类型定义,变量有5种类型
    • bool 布尔类型
    • tristate 三态类型
    • string 字符串
    • hex 十六进制
    • int 整型
  • select 是反向依赖关系的意思,即当前配置选项被选中,则 RT_USING_PIN 就会被选中。
  • default 表示配置选项的默认值,bool 类型的默认值可以是 y/n。
  • help 帮助信息

通过 env 选中以上配置界面的选项后,最终可在 rtconfig.h 文件中生成如下两个宏

#define RT_USING_PIN
#define BSP_USING_GPIO

这个还是比较重要的,关键是流程,其他遇到看官方的Kconfig语法就可以了!

 

实战:添加串口设备

1、根据以上的分析及对应关系,找到相应的添加外设的目录:应该在Board文件夹下。打开Kconfig文件。

打开所对应的ENV工具--->找到其菜单,可以看到已经加上了

重新生成一下工程:打开rtconfig文件看一下变化:

打开工程看一下变化,可以看到工程,新的低功耗串口已经注册到IO设备管理器中。接下来就可以操作了。

 

 

 

<think>好的,我需要帮助用户了解RT-Thread(RTT)与串口的关系,以及如何通过串口使用RTT进行数据传输。首先,我要整理用户提供的引用内容,看看有哪些关键点可以利用。 用户引用了四个资料,其中提到RTT串口设备使用、配置步骤、DMA模式、FinSH组件等。我需要将这些信息整合成一个结构清晰的回答,分步骤说明使用方法,并确保符合用户的要求,比如正确使用LaTeX格式、生成相关问题等。 首先,解释RTT串口的关系。根据引用[1],RTT通过IO设备管理接口访问串口硬件,所以串口RTT中作为设备被管理。引用[3]提到FinSH组件作为串口线程处理收发任务,这说明串口用于系统交互。 接下来是如何使用串口。根据引用[2]和[4],需要配置KConfig,启用UART2,设置DMA模式,修改board.h添加宏定义,然后编写初始化代码和应用层代码。引用[2]还提到编译报错的解决方法,可能需要调整代码或配置。 数据传输部分,应用层通过rt_device_read/rt_device_write函数进行读写操作。引用[3]中的FinSH组件可能用于调试和命令输入,这也是数据传输的一部分。 需要确保回答中正确使用行内公式,比如如果有数学表达式的话,但这里可能不需要。独立公式可能也不涉及,但要注意结构。然后生成相关问题,比如配置步骤、DMA作用、数据传输方法等。 最后检查是否符合所有系统级指令,特别是LaTeX格式、中文回答、引用标识的位置。确保每个引用在适当的地方标注,比如配置步骤引用[2][4],数据传输引用[1][3]。 现在整理这些思路,分步骤详细说明,并自然添加引用标识。</think>### RT-Thread(RTT)与串口的关系及使用方法 RT-Thread(RTT)通过**设备驱动框架**统一管理串口硬件,将其抽象为标准的I/O设备。开发者可通过API实现串口初始化、数据传输及异步通信[^1][^3]。以下是具体步骤: --- #### 一、配置串口设备 1. **启用串口驱动** 在`RT-Thread Settings`中启用UART设备驱动,并选择目标串口(如UART2)[^2][^4]。 ```c // 在board.h中添加宏定义(以STM32为例) #define BSP_USING_UART2 #define BSP_UART2_RX_USING_DMA // 启用DMA接收模式[^2] ``` 2. **配置DMA模式(可选)** 若需高效数据传输,可在配置界面启用串口的DMA模式,减少CPU占用[^2][^3]。 --- #### 二、初始化串口 在应用代码中调用设备注册接口,并设置参数(波特率、数据位等): ```c // 查找串口设备 rt_device_t serial = rt_device_find("uart2"); // 配置参数 struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; config.baud_rate = BAUD_RATE_115200; // 初始化并打开设备 rt_device_configure(serial, &config); rt_device_open(serial, RT_DEVICE_FLAG_RDWR); ``` --- #### 三、数据传输 1. **发送数据** 使用`rt_device_write()`向串口发送数据: ```c char send_buf[] = "Hello RTT!"; rt_device_write(serial, 0, send_buf, sizeof(send_buf)); ``` 2. **接收数据** 通过中断或DMA接收数据,并注册回调函数处理: ```c static void rx_callback(rt_device_t dev, rt_size_t size) { char recv_buf[64]; rt_device_read(dev, 0, recv_buf, size); // 处理接收数据 } // 注册回调函数 rt_device_set_rx_indicate(serial, rx_callback); ``` --- #### 四、FinSH组件调试(可选) FinSH通过串口提供命令行交互功能,可查看系统状态或执行调试命令[^3]。需在配置中启用`FinSH`组件,并通过串口终端输入指令。 --- ### 关键问题与优化 - **数据丢失**:确保DMA缓冲区足够大或及时处理中断。 - **多线程竞争**:使用信号量或互斥锁保护共享资源[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

guangod

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值