pcommlite串口通讯库使用
MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可以使用一个名为pcommlite的串口通讯库,下载安装之后,解压出来的文件包括


根据编译的平台选择相应的lib文件加入工程,并加入pcomm.h文件
- 寻找系统串口,sio_open()打开串口 sio_close()关闭串口
- BYTE i = 0;
- CString str;
- // TODO: 在此添加控件通知处理程序代码
- ((CComboBox *)this->GetDlgItem(IDC_COMBO_Serial_Num_Select))->ResetContent();
- for (i = 0;i < 255;i++)
- {//此程序支持255个串口
- if(SIO_OK == sio_open(i))
- {
- sio_close(i);
- str.AppendFormat("COM%d",i);
- ((CComboBox *)GetDlgItem(IDC_COMBO_Serial_Num_Select))->AddString(str);
- str.Empty();
- }
- }
- i = ((CComboBox *)GetDlgItem(IDC_COMBO_Serial_Num_Select))->GetCount();
- if(i ==0)
- {
- GetDlgItem(IDC_BUTTON_SERIAL_CONTROL)->EnableWindow(FALSE);
- }
- else
- {
- GetDlgItem(IDC_BUTTON_SERIAL_CONTROL)->EnableWindow(TRUE);
- }
2.打开串口,各种库宏定义
switch(comBaud)
{
case 0:
m_comBaud = B1200;
break;
case 1:
m_comBaud = B2400;
break;
case 2:
m_comBaud = B4800;
break;
case 3:
m_comBaud = B9600;
break;
case 4:
m_comBaud = B19200;
break;
case 5:
m_comBaud = B38400;
break;
case 6:
m_comBaud = B57600;
break;
case 7:
m_comBaud = B115200;
break;
case 8:
m_comBaud = B230400;
break;
}
switch(comStopBit)
{
case 0:
m_comStopBit = STOP_1;
break;
case 1:
m_comStopBit = STOP_2;
break;
}
switch (comDataLength)
{
case 0:
m_comDataLength = BIT_5;
break;
case 1:
m_comDataLength = BIT_6;
break;
case 2:
m_comDataLength = BIT_7;
break;
case 3:
m_comDataLength = BIT_8;
break;
}
switch(comCheckSum)
{
case 0:
m_comChecksum = P_NONE;
break;
case 1:
m_comChecksum = P_ODD;
break;
case 2:
m_comChecksum = P_EVEN;
break;
}
config = m_comDataLength|m_comStopBit|m_comChecksum;
//开始串口配置
if( sio_open(m_comPort) != SIO_OK)
{
MessageBox("串口打开失败","提示",MB_OK);
this->serialsIsOpen = false;
m_comPort = 0;
return;
}
sio_flowctrl(m_comPort,0x00);//关闭硬件流控制
sio_lctrl(m_comPort,0x00);//关闭RTS DTR
sio_ioctl(m_comPort,m_comBaud,config);
sio_flush(m_comPort,2);
this->GetDlgItem(IDC_BUTTON_SERIAL_CONTROL)->SetWindowText("关闭串口");
GetDlgItem(IDC_COMBO_Serial_Num_Select)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_Serial_Baud_Select)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_Serial_Data_Select)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_Serial_Parity_Select)->EnableWindow(FALSE);
GetDlgItem(IDC_COMBO_Serial_Stop_Select)->EnableWindow(FALSE);
this->serialsIsOpen = true;
}
3.串口发送数据 sio_lstatus() sio_write()
//检查串口是否打开,打开就发送
if(serialsIsOpen == true)
{
//变量打开了,要去测试串口状态
if(sio_lstatus(m_comPort)>= 0)
{
CString str1;
sendString.Empty();
//没有对\r\n特殊处理
((CEdit*)GetDlgItem(IDC_EDIT3))->GetWindowText(str1);
sendString.AppendFormat("%s",str1);
sio_write(m_comPort,sendString.GetBuffer(),sendString.GetLength());
}
else
{
//说明串口已经丢失
MessageBox("串口丢失,请关闭后重新打开","错误",MB_OK);
}
}
else
{
//说明串口已经丢失
MessageBox("请先打开串口","错误",MB_OK);
}
4.设定定时器,用于串口接收数据

5.在定时器中接收数据 sio_read()

void CLPC1768_PAD_OTG_DebugDlg::SerialsProcessBuffer( void )
{
serialReadTemp.Empty();
if(m_comPort > 0 && this->serialsIsOpen == true)
{
char readBuffer[1024] = {0};
// sio_flush(m_comPort,1);
int length = sio_read(m_comPort,readBuffer,1024);
if(length > 0)
{
for(int i = 0; i < length; i++)
{
serialReadTemp.AppendChar(readBuffer[i]);
}
}
}
}
该库还有很多借口用于控制DTR RTS等,使用方便,详情查看帮助文档
pcommlite串口通讯库使用的更多相关文章
- Java利用Rxtx进行串口通讯
最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...
- delphi之动态库调用和串口通讯
串口通讯: Spcomm 控件属性: CommName :表示COM1,COM2等串口的名字: BaudRate:设定波特率9600,4800等 StartComm StopComm 函数Write ...
- C# 串口操作系列(5)--通讯库雏形
C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报 分类: 通讯类库设计(4 ...
- 树莓派中QT实现串口通讯
树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ...
- .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用
目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...
- 详解linux下的串口通讯开发
串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...
- 使用Xamarin实现串口通讯
前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别. 记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口 ...
- 具体解释linux下的串口通讯开发
串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...
- 第20章 USART—串口通讯
本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...
随机推荐
- List、Set、Map集合存放null解析及HashMap、Hashtable异同点解析
1.List.Set.Map集合存放null解析: @Test public void CollectionTest() { // 测试List List<Object> list = n ...
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- 快学Scala-第二章 控制结构和函数
知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 ...
- 【转载】GDI 映像方式 之 SetViewportOrgEx 与 SetWindowOrgEx 解析
SetViewportOrgEx 与 SetWindowOrgEx 解析 这两个函数,用来改变视端口和窗口的原点,并都具有改变轴的效果,以致(0,0)不再指左上角. 「视端口」是依据设备坐标(图素)的 ...
- unity LineRenderer
using UnityEngine; using System.Collections; public class Spider:MonoBehaviour { private LineRendere ...
- 扫盲: JAVA基本常识
http://java-mzd.iteye.com/blog/838514
- 转:Linux基本命令大全
Linux基本命令大全 新手刚刚接触Linux的时候可能处处感到不便,不过没有关系,接触新的事物都有这样的一个过程,在你用过Linux一段时间后,你就会逐渐了解Linux其实和Windows一样容 ...
- js 判断网页类型
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>标题页</title ...
- realypay
1.判断新老接口的方法: 去网站后台接口配置的地方,如果有merchantno参数就是新接口,否则为老接口,新接口则不需要更新了. 2.老接口需要去网站后台卸载老的接口,然后再用新的(下载的文件)覆盖 ...
- C#实现拷贝对象
大家都知道,在C#中变量的存储分为值类型和引用类型两种,而值类型和引用类型在数值变化是产生的后果是不一样的,值类型我们可以轻松实现数值的拷贝,那么引用类型呢,在对象拷贝上存在着一定的难度. 下 ...