串口通信
一、基本概念
串口通信:以位(bit)为单位发送或接收数据,底层的数据传输都是字节流,不管什么方式(Hex、Ascll)发送,都会被分解为一个一个字符。
发送方式和接收方式:
(1) Hex:表示发送或接收纯数字,如7则表07,保证每个数都是两位的
(2) Ascll:表示收发字符串,这是相对来讲让人直观易懂的方式,Ascll码为1、2、3对应的十六进制数为31、32、33
高低电平:在信号线上共有两种状态,逻辑1(高电平)和逻辑0(低电平)
波特率:每秒钟传输字符的个数
起始位:用于标识一个字符传输的开始,发送端在开始发送一个字符前,信号线都处于逻辑1状态,而起始位处于逻辑0状态,通过高电平到低电平的转换,就可以提示接收端数据的传输即将开始
数据位:就是我们实际发送信息的内容了,因为是一个一个字符方式发送的,所以一般为8位一个字节的数据,也有6、7位,低位(LSB)在前,高位(MSB)在后
校验位:可认为是一个特殊的数据位,用于判断接收数据位的有无对错,一般是奇偶校验,使用中常常取消
顺便讲一下奇偶校验,奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位,例如如果数据位是0110110,那么1的个数位4,是偶数,则它的奇校验位为1,偶校验位为0(数据位1的个数为奇数则反之),奇或偶校验码放在数据位的最前面(默认)或者最后面,所以0110110的奇校验码为10110110或者01101101,偶校验码为00110110或者01101100
停止位:在一帧数据的最后位置,用于标识一个字符传输的结束,对应逻辑1状态,与起始位相呼应
帧:从起始位开始到停止位结束的时间间隔为一帧,是一个时间单位
二、相应的操作串口通信的win32 API
初始化:
SetupComm:初始化一个指定通信设备的通信参数(输入、输出缓冲区)
SetCommTimeouts:设置通信设备读写时的超时参数
GetCommStata:获取串口设置的参数
SetCommStata:设置串口参数
打开串口:
CreateFile:打开一个指定的串口以便该串口
读写数据:
WriteFile:向缓冲区写入数据,即发送数据
ReadFile:向缓冲区读取数据,即接收数据
PurgeComm:清空缓冲区
三、常用的与串口通信的结构体
COMSTAT:记录通信设备的状态信息,如可获得缓冲区得字节数
COMTIMEOUT:记录设备读写超时得参数信息
DCB:记录串口参数、硬件/软件流控制、错误参数等等(有关流控制的介绍可以参考下这篇博文:https://blog.csdn.net/skyflying2012/article/details/7945022)
四、常用的工具
VSPD:没有外设设备怎么办,没关系,可以用这个软件创建一个或者多个虚拟串口,一样能用
串口调试助手:创建虚拟串口后,就可以用这个软件来使用一个或者多个串口了