Linux终端io------串口通信C语言实现自发自收

本文介绍了Linux系统中如何利用C语言进行串口通信,包括打开串口、设置波特率、数据位、停止位和奇偶校验,以及读取和关闭串口的操作。通过示例代码详细讲解了使用termios结构体配置串口参数的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.串口通信

串口------是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。将CPU的并行数据(一般是8位)转换成比特
串口通讯------指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。

在Linux系统中,“一切皆文件”。所以在Linux下串口就是一个文件,使用它就和使用文件一样。为了访问串口,只需打开其设备文件即可操作串口设备。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2。下面来详细介绍linux下是如何使用串口的:

大概流程为:打开串口(文件)–>设置串口参数–>读串口–>关闭串口
就和文件操作一模一样
这里的串口将接受和发送的接口接在一起,重硬件上保证了连通在一起

2.打开串口

在本程序中,使用ttyUSB0作为通信串口。在打开ttyUSB0的时候,基本选项O_RDWR表示可读写,选项 O_NOCTTY 表示不能把本串口当成控制终端,否则用户的键盘输入信息将影响程序的执行; O_NDELAY表示打开串口的时候,程序并不关心另一端 的串口是否在使用中。 O_NDELAY 函数使read函数在端口没有字符存在的情况下,立刻返回0,与 fcntl(fd,F_SETFL,FNDELAY);一样,也与O_NONBLOCK(程序不关心DCD信号线的状态,如果指定该标志,进程将一直在休眠状态,直到DCD信号线为0)一样。得到串口的文件描述符后面就可以通过fd来操作它。B要想解析出A发的比特流是什么意思,就需要有一个参考(时间同步)这就是波特率。同时为了检查出数据的正确与否,又加入了奇偶校验。

char *serialport_path = "/dev/ttyUSB0";
int serial_fd = -1;
serial_fd = open(serialport_path,O_RDWR | O_NOCTTY | O_NDELAY)

3.设置串口

串口通信基本参数参考链接
termios结构体每个标志表示的意思参考链接
实现串口通信并不是说通信就通信的,有很多问题需要解决。假如我发送一个数据,A发到B,那么B怎么知道数据到没到和数据有没有结束要不要继续等待,这样它的数据报就要有标志起始和停止的。串口的属性定义在struct termios中,结构体定义在termios.h头文件中。该结构体通过控制驱动程序控制字符的输入输出到用户进程。
结构体中flag的赋值通过位运算,置某位用 | ,设某位为0用 & 和 ~。
在设置终端属性之前需要用冲洗函数,冲洗掉相应的队列

	 /*struct termios
     * {unsigned short c_iflag;  输入模式标志
     * unsigned short c_oflag;  输出模式标志
     * uns
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值