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

根据编译的平台选择相应的lib文件加入工程,并加入pcomm.h文件

  1. 寻找系统串口,sio_open()打开串口 sio_close()关闭串口
  2. BYTE i = 0;
  3. CString str;
  4. // TODO: 在此添加控件通知处理程序代码
  5. ((CComboBox *)this->GetDlgItem(IDC_COMBO_Serial_Num_Select))->ResetContent();
  6. for (i = 0;i < 255;i++)
  7. {//此程序支持255个串口
  8. if(SIO_OK == sio_open(i))
  9. {
  10. sio_close(i);
  11. str.AppendFormat("COM%d",i);
  12. ((CComboBox *)GetDlgItem(IDC_COMBO_Serial_Num_Select))->AddString(str);
  13. str.Empty();
  14. }
  15. }
  16. i = ((CComboBox *)GetDlgItem(IDC_COMBO_Serial_Num_Select))->GetCount();
  17. if(i ==0)
  18. {
  19. GetDlgItem(IDC_BUTTON_SERIAL_CONTROL)->EnableWindow(FALSE);
  20. }
  21. else
  22. {
  23. GetDlgItem(IDC_BUTTON_SERIAL_CONTROL)->EnableWindow(TRUE);
  24. }

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串口通讯库使用的更多相关文章

  1. Java利用Rxtx进行串口通讯

    最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...

  2. delphi之动态库调用和串口通讯

    串口通讯: Spcomm 控件属性: CommName  :表示COM1,COM2等串口的名字: BaudRate:设定波特率9600,4800等 StartComm StopComm 函数Write ...

  3. C# 串口操作系列(5)--通讯库雏形

    C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报  分类: 通讯类库设计(4 ...

  4. 树莓派中QT实现串口通讯

    树莓派中QT实现串口通讯 开发平台为QT 此博客QT使用的为WiringPi驱动 我使用的串口调试助手为 cutecom 先简单说一些开发过程中需要注意的问题 Linux 下设备为 tty ,对应在 ...

  5. .NET Core 跨平台 串口通讯 ,Windows/Linux 串口通讯,flyfire.CustomSerialPort 的使用

    目录 1,前言 2,安装虚拟串口软件 3,新建项目,加入 flyfire.CustomSerialPort 4,flyfire.CustomSerialPort 说明 5,开始使用 flyfire.C ...

  6. 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统.调制解调 ...

  7. 使用Xamarin实现串口通讯

    前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别. 记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口 ...

  8. 具体解释linux下的串口通讯开发

    串行口是计算机一种经常使用的接口,具有连接线少.通讯简单,得到广泛的使用.经常使用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统. ...

  9. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

随机推荐

  1. linux 下载安装tomcat

    1.下载tomcat 2.tar -zxvf apache-tomcat-7.0.67.tar.gz 3.cd bin目录  启动  ./startup.sh [root@fuyuanming bin ...

  2. iOS 开发中的各种证书

    公钥和私钥 转载自:http://www.samirchen.com/ios-certificates/ 先简单的介绍一下公钥和私钥.我们常见的加密算法有两类:对称加密算法(Symmetric Cry ...

  3. [Eclispe] NDK内建include路径修改

    [Eclispe] NDK内建include路径修改 编辑 jni/android.mk 中 LOCAL_C_INCLUDES 变量后,该变量值将被列入项目属性的内建include头文件包含路径,无法 ...

  4. linux 查看进程 和 杀死进程

    ps ax 显示当前系统进程的列表 PID TTY      STAT   TIME COMMAND ps aux 显示当前系统进程详细列表以及进程用户 USER       PID %CPU %ME ...

  5. eclipse 配置scala问题-More than one scala library found in the build path

    配置eclipse出错解决 山重水复疑无路,柳暗花明又一村!经过大量的验证...终于make it. 参考博客:http://blog.csdn.net/wankunde/article/detail ...

  6. 图片处理中的Dithering技术

    话说二战的时候,美国轰炸机每次执行任务,除了满载着威力强大的炸弹以外,还常常要装配一台计算机,飞机飞行方向和投弹的抛物线的计算都离不开这台机器.可是世界上第一台电子计算机在二战结束后才发明,轰炸机上当 ...

  7. 清北学堂入学测试P4751 H’s problem(h)

    P4751 H’s problem(h)  时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 小H是一个喜欢逛街的女孩子,但是由于上了大学 ...

  8. windbg 之 如何定位进程入口点地址

    载入HelloWorld.exe之后我们看看加载了哪些模块:

  9. 把Wordpress集成到zen-cart里方法 各种修改 经典机制

    作者: 闻庭牛 | 分类: zen cart插件精解 | 浏览: 4 | 评论: 暂时没有评论 如果你的Zen-cart需要一个Blog来发布一些你的最新动态,可以试试Wordpress,并且用WOZ ...

  10. What is “Mock You” :Raise,callback,verify [转载]

    http://www.cnblogs.com/wJiang/archive/2010/02/21/1670637.html Raise 如果你说会用Setup,那么Raise就更简单了.这里注意下它是 ...