设为首页 加入收藏

TOP

Linux下串口编程所要知道的那些事
2014-11-24 07:26:17 来源: 作者: 【 】 浏览:1
Tags: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> 方法:如何进行校验?


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


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下编写串口程序的思想


看图:


Linux下串口编程


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


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


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


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


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


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


Tiger-John说明:


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


UART0串口编程目录:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇通过Socket来将客户端文件传给服.. 下一篇UART0串口编程系列

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)