linux串口编程

串口编程步骤:

在ARM Linux系统上进行串口编程可以按照以下步骤进行:

1.打开串口设备:

首先,需要打开要使用的串口设备文件,一般在Linux系统中,串口设备文件位于/dev/ttySx或/dev/ttyUSBx,其中x是串口号或USB串口号。可以使用系统调用open()函数以读写方式打开串口设备文件。

2、配置串口参数:

termios数据结构和相关的函数来进行设置

tcsetattr()函数将修改后的参数应用到串口设备

在打开串口设备后,需要配置串口的通信参数,如波特率、数据位、停止位、校验位等。可以使用termios数据结构和相关的函数来进行设置。可以使用函数tcgetattr()获取当前串口参数,然后修改相关参数,最后通过tcsetattr()函数将修改后的参数应用到串口设备。

termios数据结构体:
复制代码
struct termios {`
`	tcflag_t c_iflag;		/*、输入模式标志*/`
`	tcflag_t c_oflag;		/* 输出模式标志 */`
`	tcflag_t c_cflag;		/* 控制模式标志 */`
`	tcflag_t c_lflag;		/* 本地模式标志 */`
`	cc_t c_cc[NCCS];		/* 控制字符数组 */`
`	cc_t c_line;			/* 线路规程(== c_cc[19]) */`
`	speed_t c_ispeed;		/* 输入波特率 */`
`	speed_t c_ospeed;		/* 输出波特率 */`
`};`
`

各个参数介绍:

c_iflag(输入模式标志位):这个字段包含一系列用于控制输入模式的标志位。例如,可以使用IGNBRK来忽略BREAK键输入,使用INPCK来启用奇偶校验等。

c_oflag(输出模式标志位):这个字段包含一系列用于控制输出模式的标志位。例如,可以使用OPOST来启用输出处理(执行输出转义字符的功能),使用ONLCR来将输出中的换行符转换为回车换行等。

c_cflag(控制模式标志位):这个字段包含一系列用于控制串口硬件特性的标志位。例如,可以使用CBAUD来设置波特率,使用CS8来设置数据位为8位等。

c_lflag(本地模式标志位):这个字段包含一系列用于控制本地模式(终端行为)的标志位。例如,可以使用ICANON来启用规范模式,使用ECHO来启用回显等。

c_cc(控制字符数组):这个数组存储了一些特殊控制字符的值,如终端驱动程序使用的信号字符,输入和输出的起始字符等。

c_line(线路规程):这个字段存储了用于处理数据的线路规程(line discipline)的标识符。一般情况下,可以将其设置为0。

c_ispeed(输入波特率):这个字段指定输入的波特率,表示从串口接收数据的速度。

c_ospeed(输出波特率):这个字段指定输出的波特率,表示向串口发送数据的速度。

复制代码
#include "serial_init.h"`
`void uart_init(int fd, int id)`
`{`
    `//创建一个串口参数结构体数组。`
`    struct termios options;`
`    //设置串口属性`
`    //获取串口原有属性`
`    tcgetattr(fd, &options);//将fd的状态放入到options中`
`    //激活选项CLOCAL(本地连接)和CREAD(接受使能)`
`    options.c_cflag |= (CLOCAL | CREAD);`
`    options.c_cflag &= ~CSIZE;//设置字符大小`
`    options.c_cflag &= ~CRTSCTS;//设置流控`
`    options.c_cflag |= CS8;//设置8位数据位`
`    options.c_cflag &= ~CSTOPB;//设置停止位`
`    options.c_iflag |= IGNPAR;//忽略奇偶错字符`
`    //将输入的CR转换为NL和停止输出控制流起作用`
`    options.c_iflag &= ~(ICRNL | IXON);`
`    options.c_oflag = 0;`
`    options.c_lflag = 0;`
`    //设置波特率(输入和输出的波特率),根据传入的参数判断要设置的波特率`
`    if (id == 1)`
`    {`
`        cfsetispeed(&options, B4800);`
`        cfsetospeed(&options, B4800);`
`    }else`
`    {`
`        cfsetispeed(&options, B9600);`
`        cfsetospeed(&options, B9600);`
`    }`
`    tcsetattr(fd, TCSANOW, &options);//激活配置`
`}`
`

3.读取和写入数据:

一旦串口打开且参数配置完成,就可以进行数据的读取和写入。可以使用read()函数从串口设备读取数据,使用write()函数将数据写入串口设备。

直接用read write来操作文件描述符实现串口操作

4.清理并关闭串口:

在使用完串口后,需要进行清理和关闭。可以使用tcsetattr()函数将串口参数恢复到默认值,并使用close()函数关闭串口设备文件。

其他操作:在网关中可以使用select对串口文件描述符进行监控,实现对串口的接收。

相关推荐
小龙报7 分钟前
《彻底理解C语言指针全攻略(3)》
c语言·开发语言·windows·git·创业创新·学习方法·visual studio
用户311879455921816 分钟前
perl-Test-Simple-1.302195-5.fc39.noarch.rpm 怎么安装?Fedora 39 安装步骤讲解
linux
焦思懿--19期--工职大18 分钟前
VMWare和物理机之间文件传输
linux·服务器·网络·电脑
四桑.20 分钟前
echarts6.0.0版本,平行坐标图形,series为多组时,横线溢出绘图区域,如何解决
linux
GISer_Jing20 分钟前
Next.js数据获取演进史
java·开发语言·javascript
qq_3234297128 分钟前
银河麒麟V10高级服务器版Bash快捷键经常失效
linux
bu_shuo35 分钟前
单片机中经常定义的结构体解读
单片机·嵌入式硬件
棉猴35 分钟前
GESP C++等级认证三级15-原码反码补码2-2
开发语言·c++·gesp·c++三级·等级认证·原码反码补码
00后程序员张43 分钟前
Windows 安全分割利器:strtok_s () 详解
windows·单片机·安全
DokiDoki之父1 小时前
Web核心—JSP入门/EL/JSTL标签/MVC+三层架构/一文速通
java·开发语言