linux 串口 奇偶校验,Linux下串口编程所要知道的那些事

本篇文章主要讲了与串口编程相关的几个知识点,以及在Linux上编写串口程序所要遵循的思想和要考虑的方面,以及它和我们之前在UC/OS操作系统上编写串口程序有什么区别。

一.串口相关的几个基本概念

可以结合《串口编程之前奏篇》中的知识点会对串口的一些基本概念有更深的了解,为后面的继续深入做铺垫。

1. 波特率

1> 表示每秒传输的比特数。

2> 说明:若波特率为115200,它表示什么呢?

Ø  对于发送断,即每秒钟发送115200bit。

Ø  对于接收端,115200波特率意味着串口通信在数据线上的采样率为115200HZ.

注:波特率和距离之间成反比,距离相隔很近的设备之间可以实现高波特率通信。

2. 数据位

1> 表示通信中实际数据位的参数。在计算机发送的数据包中,实际的数据往往不会是8位。

2> 说明:在串口通信中,可以选择5,6,7,8位。设定数据位时,主要考虑所要传输的数据内容。

3> 事例:如果要传输的是标准的ASCII码。那么又该如何设定数据位呢?

Ø  由于ASCII码的范围是0~127,因此设定数据位为7就OK了。

Ø  若为扩展ASCII码,其范围是0~255,必须使用8位。

注:7位或8位数据中不仅仅是数据,还包括开始/停止位,数据位以及奇偶校验位等。

3. 奇偶校验位

1> 作用:该位用于串口通信中的简单检验错。

2>  类型:主要有偶校验,奇校验,标记,空格的方式

在ARM7(LPC2200)中,只有偶校验,奇校验两种方式。

3> 方法:如何进行校验?

Ø  奇偶校验是通过统计数据中高位或低位的个数来实现校验的。

Ø  标记,空格并不是真正校验错误的,只是通过简单的置位来实现对数据的检测。www.linuxidc.com通过置位方式,可以判断出是否存在噪声干扰数据通信或数据传输,以及是否存在不同步的现象

4. 停止位

1> 作用:停止位用于标志该数据包数据结束,可以取1位,1.5位或2位。

在ARM7(lpc2200中)停止位可以取1位,2位或不取

2> 说明:

Ø  停止位不仅仅用于数据包的传输结束标志,还提供了计算机之间校正同步时钟的机会。

Ø  用于停止位的位数越多,不同时钟同步的容忍程序越大。

Ø  但是由于停止位占用了数据空间,过多的停止位将导致数据传输速度的下降。

5. 数据流控制

1> 通过串口传输数据时,由于计算机之间处理速度或其他因素的影响,会造成丢失数据的现象。

2> 作用:数据流控制用于解决上面的问题,通过控制发送数据的速度,确保数据不会出现丢失。

3> 类型:数据流控制可以分为软件流控制(Xon/Xoff)和硬件流控制,当然你可以选择不使用数据流控制。

Ø  软件流控制使用特殊的字符作为启动或停止的标志

Ø  硬件流控制通过使用硬件信号(CTR/RTS)来实现。

注:使用硬件流控制时,在接收端准备好接收数据后,设为CTS为1,否则CTS为0。同样,如果发送端准备好要发送数据时,则设定RTS为1;如果还未准备好,设置CTS为0.

二.  Linux串口下编程所要考虑的问题

1. Linux下编写串口程序的思想

看图:

59b9c528c7dd734f6c87b862e51cdf72.gif

1> 在Linux中,一切设备皆为文件。因此对串口的操作都转化为对文件的操作。

(在Ucos-II操作系统中是直接对寄存器操作来对串口进行编程的)

2> Linux设备驱动工作流程:

Ø  在Linux系统启动时,设备驱动将被加载。

Ø  设备驱动成功加载后,将向系统反馈一个主设备号,驱动程序将根据该主设备号在/dev目录下创建对应的设备文件。

Ø  程序(进程)就可以使用open,read,write函数或命令来实现对设备的访问了。

Tiger-John说明:

在linux中,系统对上层程序人员把底层对寄存器的操作屏蔽了,提供了统一的ARI接口。我们只要通过这些统一的接口(open,write,read)来对UART0串口进行操作。

UART0串口编程目录:

UART0串口编程系列(五) UC/OS下的串口接收任务编程0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux系统下串口编程指的是在Linux操作系统中使用程序来控制串口设备,通常可以用于与串口设备进行通信。 要在Linux系统中进行串口编程,需要使用特定的API(应用程序编程接口)。常用的API包括POSIX的termios库和Linux专有的serial API。 使用termios库的步骤如下: 1. 使用open函数打开串口设备文件,例如"/dev/ttyS0"。 2. 使用tcgetattr函数获取串口的属性。 3. 使用修改串口属性的函数(如cfsetispeed和cfsetospeed)设置串口的输入/输出波特率。 4. 使用tcsetattr函数将修改后的属性设置回串口。 5. 使用read和write函数进行串口的数据读写。 6. 使用close函数关闭串口。 使用serial API的步骤如下: 1. 使用open函数打开串口设备文件,例如"/dev/ttyS0"。 2. 使用ioctl函数设置串口的属性,包括波特率、数据位、停止位和校验方式等。 3. 使用read和write函数进行串口的数据读写。 4. 使用close函数关闭串口。 在编写串口程序时,还需要注意其他问题,如确保串口设备文件有足够的权限访问、处理串口通信中 ### 回答2: Linux串口编程是通过使用系统调用函数来实现的。在Linux系统中,串口设备可以被看作是一种特殊的文件,通过打开和操作该文件,我们可以进行串口通信操作。 在Linux中,常用的串口编程函数是open、close、read、write和ioctl等。我们首先需要使用open函数来打开串口设备文件,例如/dev/ttyS0。打开成功后,我们可以使用read函数从串口读取数据,使用write函数向串口写入数据,使用close函数关闭串口设备。 除了基本的读写操作,我们还可以使用ioctl函数来设置和获取串口的属性。通过设置串口的波特率、数据位、校验位、停止位等参数,我们可以实现不同的串口通信需求。一般情况下,我们需要使用termios结构体来保存和配置串口属性,然后通过ioctl函数来设置。 另外,Linux下还提供了一种轮询和一种中断的方式来进行串口通信。轮询方式是通过不断地查询串口是否有数据到达,然后进行读取。中断方式是通过设置串口的中断响应函数,当有数据到达时,会触发中断并执行相应的处理函数。 总之,Linux串口编程是一种通过打开、读写和ioctl等系统调用函数来操作串口设备文件的方法。通过设置串口属性,我们可以实现不同的串口通信需求。 ### 回答3: Linux下的串口编程是指在Linux操作系统下对串行端口(串口)进行数据输入输出的一种编程技术。串口编程通常用于连接外部设备与计算机之间进行数据交互。 在Linux下,串口设备被视作特殊的文件,通过打开和读写这些特殊文件来对串口进行操作。常用的串口编程接口有标准C库的系统调用,如open()、read()、write()等,也可以使用Linux提供的串口库函数,如termios库函数。 串口编程的基本流程如下: 1. 打开串口设备文件,使用open()函数,得到串口文件描述符。 2. 配置串口参数,使用termios库函数,设置波特率、数据位、停止位、奇偶校验等参数。 3. 读取或写入串口数据,使用read()或write()函数进行数据交互。 4. 关闭串口设备,使用close()函数关闭串口文件描述符。 在进行串口编程时,需要注意以下几点: - 波特率、数据位、停止位、奇偶校验等参数需要与外设保持一致。 - 需要使用合适的访问权限打开串口设备文件。 - 需要适当处理读写时可能发生的错误和异常。 - 可以使用非阻塞模式进行读写,以提高程序的响应性。 通过Linux下的串口编程,可以实现与各种外设的通信,如传感器、控制器、无线模块等。它被广泛应用于嵌入式系统、物联网设备、机器人等领域,具有较高的灵活性和扩展性。同时,针对不同需求,还可以使用一些开源的串口通信库,如pyserial、libserial等,简化串口编程的过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值