RT-Thread串口设备实操

news/2025/2/11 23:51:41/

RT-Thread 文档中心

【1】常用函数:

rt_device_find()查找设备
rt_device_open()打开设备
rt_device_read()读取数据
rt_device_write()写入数据
rt_device_control()控制设备
rt_device_set_rx_indicate()设置接收回调函数
rt_device_set_tx_complete()设置发送完成回调函数
rt_device_close()关闭设备

【2】常用模式: 中断接收以及轮询发送:

 

#include "app_uart1.h"
#include <rtthread.h>
#include "rtdevice.h"#define PLC_UART_NAME       "uart1"
static rt_device_t serial;串口数据报文的解析
static void  app_uart1_API_Receive_Analay(char ch)
{
//解析函数
}
/* 接收数据回调函数 */
static rt_err_t uart_input(rt_device_t dev, rt_size_t size)
{char ch=0;rt_device_read(serial, -1, &ch, 1);app_uart1_API_Receive_Analay(ch);rt_device_write(serial, 0, &ch, 1);return RT_EOK;
}int  app_uart1_API_init(void)
{struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;  /* 初始化配置参数 *//* 查找系统中的串口设备 */serial = rt_device_find(PLC_UART_NAME);if (!serial){rt_kprintf("find %s failed!\n", PLC_UART_NAME);return RT_ERROR;}config.baud_rate = BAUD_RATE_9600;        //修改波特率为 9600config.data_bits = DATA_BITS_8;           //数据位 8config.stop_bits = STOP_BITS_1;           //停止位 1config.bufsz     = 128;                   //修改缓冲区 buff size 为 128config.parity    = PARITY_NONE;           //无奇偶校验位rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);/* 以中断接收及轮询发送模式打开串口设备 */rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);/* 设置接收回调函数 */rt_device_set_rx_indicate(serial, uart_input);
}void  app_uart1_API_send_strings( uint8_t* data, int len)
{rt_device_write(serial, 0, data, len);
}char str[] = "hello RT-Thread!\r\n";
/* 线程 1 的入口函数 */
static void uart_plc_thread_entry(void *parameter)
{rt_kprintf("Enter uart_plc_thread /r/n");app_uart1_API_init();//rt_device_write(serial, 0, str, (sizeof(str) - 1));app_uart1_API_send_strings("123456",6);while (1){//rt_device_write(serial, 0, str, (sizeof(str) - 1));rt_thread_mdelay(500);}
}#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       1024
#define THREAD_TIMESLICE        5int app_uart_plc_thread_sample(void)
{static rt_thread_t tid1 = RT_NULL;/* 创建线程 1,名称是 thread1,入口是 thread1_entry*/tid1 = rt_thread_create("uart_plc_thread",uart_plc_thread_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY, THREAD_TIMESLICE);/* 如果获得线程控制块,启动这个线程 */if (tid1 != RT_NULL) rt_thread_startup(tid1);return 0;
}INIT_APP_EXPORT(app_uart_plc_thread_sample);

http://www.ppmy.cn/news/173079.html

相关文章

RTL-SDR

RTL-SDR是一个非常低的成本&#xff08;某宝几十块可以轻松拿下&#xff09;&#xff0c;易于使用的USB设备&#xff0c;接收射频无线电信号。 最初&#xff0c;这些设备被设计为用作DVB-T&#xff08;数字视频广播地面&#xff09;接收器&#xff0c;但人们发现&#xff0c;只…

RTL8211移植

RTL8211是嵌入式中常用的一种PHY芯片。对于网口驱动的移植&#xff0c;只要u-boot和kernel有支持的驱动&#xff0c;移植方法还是比较简单的。 u-boot中的RTL8211移植 对于PHY的移植&#xff0c;大多数情况下只需要修改config文件即可&#xff0c;但是也有例外&#xff0c;这时…

RT-Thread ——RTC配置

RT-Thread ——RTC配置 STM32F103系列芯片的RTC功能存在一些缺陷。 一、显示时间戳 RTC&#xff08;Real-Time Clock&#xff09;译为实时时钟&#xff0c;因为它一般是集成电路&#xff0c;故也称为时钟芯片。它能提供精确的实时时间&#xff0c;可以用于产生年、月、日、时…

RT-Thread系统简介

前言 RT-Thread是一款国产的实时操作系统&#xff0c;我们首先从实时操作系统开始进行介绍&#xff0c;再展开RT-Thread操作系统。 实时操作系统介绍 实时操作系统诞生背景 为了解决两个问题&#xff1a; 一个是早期的CPU任务切换的开销太大&#xff0c;实时调度器可以避免…

RT-thread nano

1、nano与完整版区别 与 RT-Thread 完整版不同的是&#xff0c;Nano 不含 Scons 构建系统&#xff0c;不需要 Kconfig 以及 Env 配置工具&#xff0c;也去除了完整版特有的 device 框架和组件&#xff0c;仅是一个纯净的内核。 2、特点 易裁剪&#xff1a;Nano 的配置文件为…

RT-Thread系列一 初识

RT-Thread Master与Nano RT-Thread Master版本和RT-Thread Nano版本的关系&#xff1a; RT-Thread Master版本不仅仅是一个实时内核&#xff0c;还包含了丰富的中间层组件&#xff1b;RT-Thread Nano是RT-Thread Master之上进行剪裁后形成的精简版&#xff0c;去掉了一些组件…

《初次使用瑞昱 rtl8710 》

初步使用rtl8710 首次接触RTL8710 这一款模块&#xff0c;模块硬件可以在官网等方式找资料 环境搭建 硬件工具&#xff1a; USB线&#xff08;正常的安卓手机线都可以&#xff09;开发板一块J-link在线仿真器&#xff08;某宝一大堆&#xff09;软件&#xff1a;IAR &#xff…

LT8618SX中文简介

1.功能 RGB输入 –支持24位RGB&#xff0c;YUV和BT656/BT601/BT1120输入 –支持SDR和DDR数据采样 –可编程上升/下降边缘时钟输入 –支持高达148.5MHz DDR或297MHz SDR时钟输入 –支持1.8V和3.3V输入电压电平 HDMI发射器 –符合HDMI1.4和HDCP1.4 –分辨率高达4K30Hz –可编…