• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > C++串口无法接受到完整的数据

C++串口无法接受到完整的数据

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了c++串口通信实例,c++串口通信,c++串口,c++串口编程实例,c++串口编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: C++串口无法接受到完整的数据
描述:

C++串口

串口程序不能够读出完整的数据,哪位大神帮忙看一下
// JoComDDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "JoComD.h"
#include "JoComDDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 定义串口设置参数表格
const CString PorTbl[6] = {_T("COM1:"),_T("COM2:"),_T("COM3:"),_T("COM4:"),_T("COM5:"), _T("COM6:")};
const DWORD BaudTbl[6] = {4800, 9600, 19200, 38400, 57600,115200};
const DWORD DataBitTbl[2] = {7, 8};
const BYTE  StopBitTbl[3] = {ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS};
const BYTE  ParityTbl[4] = {NOPARITY, ODDPARITY, EVENPARITY, MARKPARITY};
// CJoComDDlg 对话框
CJoComDDlg::CJoComDDlg(CWnd* pParent /*=NULL*/)
: CDialog(CJoComDDlg::IDD, pParent)
, m_strRecDisp(_T(""))
, m_strSendEdit(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CJoComDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
// DDX_Control(pDX, IDC_PORT, m_ComboBaud);
DDX_Control(pDX, IDC_PORT, m_ComboPort);
DDX_Control(pDX, IDC_BAUD, m_ComboBaud);
DDX_Control(pDX, IDC_DATA, m_ComboData);
DDX_Control(pDX, IDC_STOP, m_ComboStop);
DDX_Control(pDX, IDC_PARITY, m_ComboParity);
DDX_Text(pDX, IDC_REC_DISP, m_strRecDisp);
DDX_Text(pDX, IDC_SEND_EDIT, m_strSendEdit);
DDX_Control(pDX, IDC_OPEN_COM, m_ButOpen);
DDX_Control(pDX, IDC_CLOSE_COM, m_ButClose);
}
BEGIN_MESSAGE_MAP(CJoComDDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_OPEN_COM, &CJoComDDlg::OnBnClickedOpenCom)
ON_BN_CLICKED(IDC_CLOSE_COM, &CJoComDDlg::OnBnClickedCloseCom)
ON_BN_CLICKED(IDC_SEND, &CJoComDDlg::OnBnClickedSend)
ON_BN_CLICKED(IDC_CLEAR_SEND, &CJoComDDlg::OnBnClickedClearSend)
ON_BN_CLICKED(IDC_CLEAR_REC, &CJoComDDlg::OnBnClickedClearRec)
END_MESSAGE_MAP()
// CJoComDDlg 消息处理程序
BOOL CJoComDDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
//  执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
CString strItem = L"";
m_ComboPort.ResetContent();
for(int i=0;i<6;i++)
{
strItem.Format(L"COM%d",i+1);
m_ComboPort.AddString(strItem);
}
m_ComboPort.SetCurSel(0);
m_ComboBaud.ResetContent();
m_ComboBaud.AddString(L"4800");
m_ComboBaud.AddString(L"9600");
m_ComboBaud.AddString(L"19200");
m_ComboBaud.AddString(L"38400");
m_ComboBaud.AddString(L"57600");
m_ComboBaud.AddString(L"115200");
m_ComboBaud.SetCurSel(1);
m_ComboParity.ResetContent();
m_ComboParity.AddString(L"无");
m_ComboParity.AddString(L"奇");
m_ComboParity.AddString(L"偶");
m_ComboParity.AddString(L"Mark");
m_ComboParity.AddString(L"Space");
m_ComboParity.SetCurSel(0);
m_ComboData.ResetContent();
m_ComboData.AddString(L"7");
m_ComboData.AddString(L"8");
m_ComboData.SetCurSel(1);
m_ComboStop.ResetContent();
m_ComboStop.AddString(L"1");
m_ComboStop.AddString(L"1.5");
m_ComboStop.AddString(L"2");
m_ComboStop.SetCurSel(0);
m_ButClose.EnableWindow(FALSE); /* "关闭端口"按键无效 */
m_hComm = INVALID_HANDLE_VALUE; /* 串口操作句柄无效 */
m_ExitThreadEvent = NULL; /* 串口接收线程退出事件无效 */
m_strRecDisp = _T(""); /* 接收显示字符为空 */
UpdateData(FALSE); // 更新显示
return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CJoComDDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(), 
this->m_hWnd, 
DRA::GetDisplayMode() != DRA::Portrait ? 
MAKEINTRESOURCE(IDD_JOCOMD_DIALOG_WIDE) : 
MAKEINTRESOURCE(IDD_JOCOMD_DIALOG));
}
}
#endif
/*******************************************************************************************
函数名称: CSerialPortDlg::OpenPort
描    述: 打开串口
输入参数: LPCTSTR Port: 串口名,如"COM0:","COM1:"
  int BaudRate: 波特率
  int DataBits: 数据位, 取值为7或8
  int StopBits: 停止位
  int Parity  : 奇偶校验位
输出参数: 无
返    回: FALSE: 失败;    TRUE: 成功
********************************************************************************************/
BOOL CJoComDDlg::OpenPort(LPCTSTR Port, int BaudRate, int DataBits, int StopBits, int Parity)
{
COMMTIMEOUTS CommTimeOuts;
// 打开串口
m_hComm = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL , OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if(m_hComm == INVALID_HANDLE_VALUE)
{
MessageBox(_T("无法打开端口或端口已打开! 请检查是否已被占用, 例如GPRS占用UART0."));
return FALSE;
}
GetCommState(m_hComm, &dcb); /* 读取串口的DCB */
dcb.BaudRate = BaudRate;
dcb.ByteSize = DataBits;
dcb.Parity = Parity;
dcb.StopBits = StopBits;
dcb.fParity = FALSE; /* 禁止奇偶校验 */
dcb.fBinary = TRUE;
dcb.fDtrControl = 0; /* 禁止流量控制 */
dcb.fRtsControl = 0;
dcb.fOutX = 0;
dcb.fInX = 0;
dcb.fTXContinueOnXoff = 0;
//设置状态参数
SetCommMask(m_hComm, EV_RXCHAR); /* 串口事件:接收到一个字符    */
SetupComm(m_hComm, 16384, 16384); /* 设置接收与发送的缓冲区大小 */
if(!SetCommState(m_hComm, &dcb)) /* 设置串口的DCB */
{
MessageBox(_T("无法按当前参数配置端口,请检查参数!"));
ClosePort();
return FALSE;
}
//设置超时参数
GetCommTimeouts(m_hComm, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 100; /* 接收字符间最大时间间隔 */
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 100; /* 读数据总超时常量 */
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutC
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++串口无法接受到完整的数据

相关文章

  • 2017-06-05 我的PCI驱动程序执行完DriverEntry后直接进入到DriverUnload了
  • 2017-06-05 cpufamily,分成mips,spark,I960这是怎么分类的?
  • 2017-06-05 错误码0x80071126,此文件或目录不是一个重分析点。删除c盘文件时会出现,怎么解决?谢谢各位
  • 2017-06-05 vs2005打开自己建的工程有错误求助求助!!
  • 2017-06-17Thumb指令集
  • 2017-06-05 STM32F407+USB3300使用微雪HID例程计算机识别为unknowndevice
  • 2017-06-05 s3c2416板子的LCD驱动(驱动IC:ILI9486)如何写?
  • 2017-06-05 求助!关于PPC8640外部中断的问题
  • 2017-06-05 谁知道怎么用C语言来读取整个DVD碟片上的数据
  • 2017-06-05 为什么系统调用比普通的函数调用更耗时?用户态和内核态切换的代价在哪?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 想为FlashRom开发一个FlashFileSystem,提供良好的API接口参考ANSIC中的I/O
    • PIC电平变化中断问题
    • 关于wince70wifi断开连接的问题
    • debug需要仿真器吗?
    • http400错误的请求http网络请求,小知识点
    • 新手求助:driverstuodio首次使用问题编译库文件
    • Win7重装VS2005,老是报MSXML60Parserx64isnotinstalled手动装系统又报已装!
    • IoCreateDevice创建驱动设备失败
    • 怎样用DeviceIoControl,ReadFile,WriteFile来读写硬盘的指定扇区数据
    • 我使用函数ZwReadFile读取文件的时候,总是出错。

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有