了解率口通信概念
熟悉Linux下的串口应用开发,
了解线程概念及其应用程序结构
熟悉Linux下的串口程序调试方法
串行通信接口简介
串行接口简称串口,也称串行通信接口(通常指COM接口),是采用串行通信方式的扩展接口。
串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。
1.同步串行是指SPI(Serial Peripheral interface)的缩写,顾名思义就是串行外围设备接口。SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。
2.异步串行是指UART (Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。UART包含TTL电平的串口和RS232电平的串口。TTL电平是3.3V的(单片机),而RS232是负逻辑电平,它定义+5~+12V为低电平,而-12~-5V为高电平,通常PC机串口与单片机串口通信需要电平转换芯片如MAX232。
串行通信接口简介
串行接口按电气标准及协议来分包括RS-232-C、RS-422、RS485等。这三个标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。
RS-232-C也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座。自BMPC/AT开始使用简化了的9芯D型插座。至今25芯插头座现代应用中已经很少采用。RS-232最大传输距离为15米,最高通信速率为20kb/s。
串行通信的基本参数
串行端口的通信方式是将字节拆分成一个接一个的位再传输出去,接到此电位信号的一方再将此一个一个的位组合成原来的字符,如此形成一个字节的完整传输,在数据传输时,应在通信端口的初始化时设置几个通信参数。
1)波特率,通俗的讲就是传送数据的速度,不过这里的“数据”是数据位数。波特率的意思就是在一秒中可以传输的数据位数,单位是bps。如果采用波特率4800bps进行传输,那么每秒可以传输480个byte。
2)数据位,当接收设备收到起始位后,紧接着就会收到数据位,数据位的个数可以是5、6、7或者8位。在字符数据传输的过程中,数据位从最低有效位开始传输。
3)起始位,在串口线上,没有数据传输时处于逻辑“1”状态,当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传像接收设备,当接收设备检测到这个逻辑低电平后,就开始准备接收数据位,因此起始位所起的作用就是告诉接收方字符传输的开始。
4)停止位,在奇偶校验位或者数据位(无奇偶校验位时)就是停止位,它可以是1位、1.5位或者2位,停止位是一个字符数据的结束标志。
5)奇偶校验位,数据位发送完之后,就可以发送奇偶校验位。奇偶校验用于有限差错校验,通信双方在通信时约定一致的奇偶校验方式。就数据传输而言,奇偶校验位是沉余位,但它表示数据的一种性质,这种性质用于检错,虽然有限,很容易现。
Linux串口
*在Linux中,设备文件一般都位于/dev下,其中串口一、串ロ二对应的设备文件依次为/dev/ttySo, /dev/ttyS1,可以查看/dev下的文件以确认。
一般而言,串口通信的过程如下:
1、打开串口设备文件,获取设备句柄fd。
2、设置串口参数,如波特率、数据位、奇偶校验、停止位等等。
3、利用select函数等待串口设备是否可读写(有数据)。
4、应用read、write函数读写串口。
Linux串口权限
·要注意的是,而普通用户一般不能直接访问设备文件,这就导致一般用户编写的串口程序在执行的时候可能会遭遇访问拒绝而无法运行的情况。所以在需要运行串口程序的时候,用户通常可以通过以下几种方法获取执行权限:
改变设备文件的访问权限设置,如串口程序需要访问串口2,那么可以先用如下命令改变/dev/ttyS1设备文件的执行权限,然后就可以照常执行串口程序了。不过该方法仅单次有效,系统重启就无效了。
sudo chmod 666/dev/ttyS1·
以root超级用户的身份运行程序,例如串口程序名为testserial,输入以下命令以root权限运行程序:
sudo/testserial ·
将当前用户添加到Linux系统的dialout用户组当中,这样当前用户就拥有了操作硬件设备的权限,而且该方法一直有效,不用重复设置。例如当前用户名为fish,在终端中输入以下命令添加用户到dialout用户组中:
sudo gpasswd -a fish dialout 或 sudo usermod-aG dialout fish
Linux线程介绍
相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。在串行程序基础上引入线程和进程是为了提高程序的并发度,从而提高程序运行效率和响应时间。
POSIX thread 简称为pthread,这是一个POSIX标准线程。Pthreads定义了一套C程序语言类型、函数与常量,它以pthread.h头文件和一个线程库实现。
使用pthread需要设置工程的编译选项中的链接库添加pthread库,方法为:
在codeblocks中,右键点击工程名字,选择Build options项,弹出窗口中,选择Linkersettings页,在link libraries栏下方点击Add按钮,填入pthread,点击确定保存。
linuc串口流程