求教!串口通信接收不了数据

linxiong520 2016-09-10 04:39:55
数据可以发出去,但是就是接收不到。。。。
代码:

BOOL CcomDlg::OnInitDialog()
{

//1 打开串口
hCom = CreateFile(_T("COM5"), GENERIC_WRITE|GENERIC_READ,0,NULL, OPEN_EXISTING,0,NULL);
if((HANDLE)-1 == hCom)
{
MessageBox(_T("打开串口失败"));
return FALSE;
}
//2 配置串口
DCB dcb;
GetCommState(hCom,&dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = TWOSTOPBITS;
SetCommState(hCom, &dcb);
//3 设置缓冲区大小
SetupComm(hCom, 1000, 1000);
//4 设置读写超时
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout = MAXDWORD;
TimeOuts.ReadTotalTimeoutConstant = 0;
TimeOuts.ReadTotalTimeoutMultiplier = 0;
TimeOuts.WriteTotalTimeoutConstant = 2000;
TimeOuts.WriteTotalTimeoutMultiplier = 500;
SetCommTimeouts(hCom, &TimeOuts);
//5 清空缓冲区
PurgeComm(hCom, PURGE_RXABORT|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_TXCLEAR);



/********************************************/
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}


void CcomDlg::OnBnClickedBtnrecv()
{

char buff[100] = {0};
//memset(buff,'\0',100);
DWORD dwByteWrite = 100;
BOOL bReadState = 0;
//问题处:为什么一直读不到数据?????
bReadState = ReadFile(hCom, buff, dwByteWrite, &dwByteWrite, NULL);

if(!bReadState)
{
MessageBox(_T("读数据失败"));return;
}
m_staRecv = buff;
UpdateData(FALSE);
}


void CcomDlg::OnBnClickedBtnsend()
{
UpdateData(TRUE);
if(m_staSend.IsEmpty())
{
return;
}
DWORD wCount = 0;
BOOL bWriteState = WriteFile(hCom, m_staSend, m_staSend.GetLength(),&wCount,NULL);
if(!bWriteState)
{
MessageBox(_T("写数据失败"));return;
}
m_staSend = "";
UpdateData(FALSE);


}
...全文
1062 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-09-12
  • 打赏
  • 举报
回复
推荐使用portmon软件辅助调试串口通信程序。
三岁、就很帅 2016-09-11
  • 打赏
  • 举报
回复
你这个接收函数是不是没运行 你可以用个定时器 间隔个1s运行下接收函数 还有你测试可以用串口助手 最后 你这种方法好淘汰了 用串口控件吧
zgl7903 2016-09-11
  • 打赏
  • 举报
回复
读超时设置的方式是如果没有立即返回, 也就是缓冲区没有数据, 可以把串口 2(RX),3(TX)脚 短接, 自发自收看看
linxiong520 2016-09-10
  • 打赏
  • 举报
回复
大召唤术!!!!大神快出来

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧