- 学习路线
- RT-Thread 简介
- RT-Thread Nano
- RT-Thread Smart
- RT-Thread Studio
- 快速上手
- 内核
- Env 工具
- 设备和驱动
- 组件
- 软件包
- 物联网
- 工具
- MicroPython用户手册
- 应用开发
- RT-Thread 版本选择
- 开发环境搭建
- 固件尺寸优化
- 在RT-Thread潘多拉开发板上实现电源管理
- 网络协议栈驱动移植
- 在STM32F429上应用网络功能
- 在STM32F429上应用文件系统
- 在潘多拉上使用 SFUD 操作 Flash
- FreeModbus 应用笔记
- 应用AT组件连接ESP8266模块
- 多线程非阻塞网络编程
- 使用QEMU运行动态模块组件
- CmBacktrace应用
- 在 STM32L4 上应用 littlefs 文件系统
- STM32通用Bootloader
- wireshark抓取tls数据包
- 在 STM32 上应用 C++
- STM32 上使用 PWM
- STM32 上使用 USB Host 读写 U 盘
- QEMU 网络视频教程
- Demo 示例
- 其他
- 传感器驱动开发指南
- 软件包开发
- 向RT-Thread贡献代码
- 内核视频教程
- Env 视频教程
- rw007 SPI WiFi 模块使用
- wireshark抓取tls数据包
- Keil MDK 安装
- Rtthread dir
- 支持的传感器列表
- 支持的 Touch 列表
- Builtin functions and exceptions
- Cmath
- Gc
- Math
- Sys
- Uarray
- Ubinascii
- Ucollections
- Uerrno
- Uhashlib
- Uheapq
- Uio
- Ujson
- Uos
- Ure
- Uselect
- Usocket
- ussl – SSL/TLS 模块
- Ustruct
- Utime
- Uzlib
- thread
- micropython – 内部功能访问与控制模块
- Rtthread
- Machine
- Pin
- I2C
- SPI
- UART
- LCD
- RTC
- PWM
- ADC
- WDT
- Timer
- Network
- Wlan
- 传感器驱动框架介绍
- Preparations
应用开发示例 - 串口设备
简介
在 RT-Thread 中设备的开发总体上可以分为两类:设备的驱动开发和设备的应用开发。
设备驱动开发的主要工作是操作硬件,对接设备驱动框架,并注册设备到系统中。
设备应用开发的主要工作是直接调用操作系统提供的接口,例如:
rt_device_find
、rt_device_open
等函数,完成上层的业务逻辑。
所以在 RT-Thread 中,对于一个具体的设备,其自底向上的开发流程可总结为如下步骤
打开设备驱动框架支持
对接设备驱动框架提供的接口函数
注册设备到系统中
使用操作系统提供 API 操作设备
流程图如下所示
新增设备
本文将以串口为例,主要讲解串口设备的应用开发。串口设备驱动的开发和新增串口设备请参考 串口设备驱动开发
查找设备
使用设备前需要确保系统中已经成功注册了该设备,查找设备是否已经注册,可以在命令行中使用 list_device
命令来查找设备,例如本例中需要使用串口 2 ,命令行查询结果如下
从结果可以看出设备已经成功注册到系统中了。
应用程序也可以根据设备名称来查找设备。查找设备函数如下所示:
rt_device_t rt_device_find(const char* name);
参数 | 描述 |
---|---|
name | 设备名称 |
返回 | —— |
设备句柄 | 查找到对应设备将返回相应的设备句柄 |
RT_NULL | 没有找到相应的设备对象 |
使用设备
当需要使用的设备成功注册到系统中时,该设备就可以直接通过系统提供的接口来进行访问了。
例如通用设备可以使用 rt_device_read
、rt_device_write
等函数来进行数据的传输, I2C 设备可以使用 rt_i2c_transfer
等函数进行数据传输。更多设备相关的 API 请查看 设备与驱动程序 中对应的设备。
本例中需要使用的是串口 2,在 application
目录下新建 my_uart.c
源文件,如下图所示
并在 my_uart.c
文件中添加如下串口设备的示例程序
#include <rtthread.h>
#define SAMPLE_UART_NAME "uart2" /* 需要操作的设备 */
static rt_device_t serial; /* 设备句柄 */
static char str[] = "hello RT-Thread!\r\n"; /* 需要发送的数据 */
static int uart_sample(void)
{
rt_err_t ret = RT_EOK;
rt_size_t send_len = 0;
/* 查找系统中的串口设备 */
serial = rt_device_find(SAMPLE_UART_NAME);
if (!serial)
{
rt_kprintf("find %s failed!\n", SAMPLE_UART_NAME);
return -RT_ERROR;
}
/* 以中断接收及轮询发送模式打开串口设备 */
ret = rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);
if (ret != RT_EOK)
{
rt_kprintf("open device failed\r\n");
return -RT_ERROR;
}
/* 发送字符串 */
send_len = rt_device_write(serial, 0, str, (sizeof(str) - 1));
if (send_len != sizeof(str) - 1)
{
rt_kprintf("send data failed\r\n");
return -RT_ERROR;
}
/* 关闭设备 */
ret = rt_device_close(serial);
if (ret != RT_EOK)
{
rt_kprintf("close device failed\r\n");
return -RT_ERROR;
}
rt_kprintf("serial device test successful\r\n");
return RT_EOK;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(uart_sample, uart device sample);
编译并下载程序。在控制台中输入 uart_sample
命令,结果如下图
使用串口工具将开发板上的串口 2 连接到电脑,可以看到开发板串口 2 收到的数据如下
从上面的实验中可以看到我们成功使用系统提供的接口向串口 2 输出了数据,更多关于串口设备的使用请参看 串口设备
注意事项
设备能够使用的前提是已经注册成功
nano 版没有设备的概念
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论