文章目录
- 引言
- 正文
- 串口通信的基本流程
- 串口编程(使用Pcomm库)
- 具体实例程序分析
- 总结
- 参考
引言
- 在完成老师的项目过程中,用到了Pcomm串口通信的库,这个库我是第一次接触,并不知道如何使用,甚至串口通信的需要设置那些参数都不知道。所以,专门写这篇文章,一方面学习一下串口通信,另外一方面记录一下Pcomm串口通信库的使用记录。
- 本文主要分为一下几个内容
- 串口通信的基本知识
- 使用Pcomm进行串口通信
正文
串口通信的基本流程
-
串口通信的具体流程如下
- 端口选择和配置
- 选择合适的串口端口
- 配置串口参数,包括波特率、数据位、停止位等
- 打开串口链接
- 使用相关库函数打开串口,并检验是否打开成功
- 初始化和握手(可选)
- 发送数据
- 将需要发送的数据写入串口中
- 设定发送的数据的帧结构、起始位置
- 接受数据
- 从串口读取数据,并解析特定的帧结构
- 错误检测和处理(可选)
- 使用奇偶校验、CRC等进行错误检测
- 流控制(可选)
- 使用硬件或者软件流控制来协调发送和接受速率
- 关闭串口链接
- 关闭串口链接,清理任何分配的资源
- 日志和监控(可选)
- 记录通信日志
- 端口选择和配置
-
按照这个流程,基本上,我需要设定的就是选择和配置串口,打开串口链接,发送和接受数据,以及关闭串口。
串口编程(使用Pcomm库)
- 这一节主要是描述使用Pcomm库,使用C++实现端口通信的指令
- 打开串口
- 输入:1,2,3,4分别表示COM1,COM2等常数
- 输出:0表示打开成功,否则打开失败
sio.open(port);
- 关闭串口
- 输入:1,2,3,4分别表示COM1,COM2等常数
- 输出:0表示打开成功,否则关闭失败
sio.close(port);
- 配置串口通信参数
- 输入:
- port端口号
- baud是波特率
- mode是校验位、数据位和停止位等数据的或
- 输出:
- 输入:
// 注意,这个mode是多个位置数位的或
sio.ioctl(port,baud,mode);
- 读取数据
- 输入
- port是端口号
- buf是缓冲区
- len是要读取的字符串长度
- 输出
- 0未收到字符
- 大于0表示收到的字符个数
- 输入
sio.read(port,buf,len);
- 设置等待间隔时间
- 输入
- port是端口号
- TotalTimeouts设定的等待时间
- IntervalTimesout每次读出的间隔时间
- 输出
- 0设置成功
- 输入
sio_SetReadTimeouts(int port, DWORD TotalTimeouts, DWORD IntervalTimeouts);
- 向串口缓冲区发送数据
- 输入
- port是端口号
- buf是缓冲区
- len是要读取的字符串长度
- 输出
- 0发送成功
- 输入
sio_write(int port, char *buf, int len);
- 清空缓冲区
- 输入
- port端口号
- func:0清空输入缓冲区,1清空输出缓冲区,2清空输入和输出缓冲区
- 输出
- 0发送成功
- 输入
sio_flush(int port, int func);
具体实例程序分析
- 发送和接受数据程序样例
int result;
unsigned char sendBuf[3]; //发送缓冲区
unsigned char readBuf[3]; //接受缓冲区
memset(sendBuf,0,sizeof(char)*3); //发送缓冲区清零
memset(readBuf,0,sizeof(char)*3); //接受缓冲区清零// 填充发送缓冲区的数据
sendBuf[0]=0xAA;
sendBuf[1]=0xBB;
sendBuf[2]=0xCC;//向串口缓冲区发送3个字符
sio_write(CommPort,(char*)sendBuf,3);
//在40ms内每隔1ms读一次串口
sio_SetReadTimeouts (CommPort,40,1);
result=sio_read(CommPort, readBuf,3);if(result>0){//若收到数据,关闭串口sio_close(CommPort);break
}
总结
- 通过网上搜集资料大概知道了串口通信的基本方式,打开并配置端口,然后发送信息,接受信息,无非就是多了一些状态码。
- 通过这个函数,来看别人封装的代码,就清晰多了。
- 这里直接给出了PComm的说明文档,可以自己下载,
链接: https://pan.baidu.com/s/1CWgvRrg2ZeiCsodRe7o0tw 提取码: 949e
–来自百度网盘超级会员v3的分享
参考
-
chatGPT-plus
-
windows串口编程Win32,PComm串口开发
-
PComm开发通信程序
-
工业级串口编程利器:Pcomm lite 串口库介绍 (Pcomm.dll)