一个前人未解决的问题:VC串口编程DCB.fparity设置失败

奔跑的北极熊 2012-08-01 12:43:43
大家好,在串口编程过程中我遇到了校验标志设置失败的情况。在csdn上查找一番,发现这种情况不是个例,具体见此贴:http://topic.csdn.net/u/20110808/10/1D4FA433-0488-4ADA-A146-5E7C9BCB74C1.html
我的情况和该贴完全一样,这个问题google上也没有找到答案,如果大家有空的话不妨试试看。祝大家建军节快了。
...全文
252 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
长尾巴的悟空 2012-08-03
  • 打赏
  • 举报
回复
是我向神祈祷的!
奔跑的北极熊 2012-08-03
  • 打赏
  • 举报
回复
我首先按照大家的建议修改了代码,但是结果还是不行。于是我又把代码改了回来,设置了奇校验或偶校验,绝望的试了一下,查询结果fparity仍然是0,然而令我激动的是,串口通信成功了。
尽管我不清楚是什么原因,但还是要感谢各位。
hdg3707 2012-08-01
  • 打赏
  • 举报
回复
这是我做单机和多机通信的部分代码,是个DLL里的一部分:
if(GetCommState(*m_hCommDevCom1,&dcb))
{
dcb.BaudRate =Baud[Map];
dcb.fBinary =1;
dcb.fParity =0;
dcb.ByteSize=ByteSize;//8;
dcb.Parity =MARKPARITY;
dcb.StopBits =StopBits;//ONESTOPBIT;
if(fRts!=5)
dcb.fRtsControl=fRts;//true;
if(fDtr!=5)
dcb.fDtrControl=fDtr;//false;
CommRight1=SetCommState(*m_hCommDevCom1,&dcb);
if(!CommRight1)
{
// AfxMessageBox("串口1初始化错误,请检测波特设置是否正确");
CloseHandle(*m_hCommDevCom1);
*m_hCommDevCom1=NULL;
return false;
}
else
{
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout =0;//MAXDWORD;
CommTimeOuts.ReadTotalTimeoutMultiplier =1;
CommTimeOuts.ReadTotalTimeoutConstant =ReadDelay;//100;
CommTimeOuts.WriteTotalTimeoutConstant =WriteDelay;//100;
CommTimeOuts.WriteTotalTimeoutMultiplier =1;
SetCommTimeouts(*m_hCommDevCom1,&CommTimeOuts);
if(!SetupComm(*m_hCommDevCom1,ReceBuff/*30*/,SendBuff/*30*/))
{
CloseHandle(*m_hCommDevCom1);
*m_hCommDevCom1=NULL;
return false;
}
hdg3707 2012-08-01
  • 打赏
  • 举报
回复
dcb.fParity =0;
dcb.Parity =MARKPARITY;// 0-4=no,odd,even,mark,space
这么设保证没问题,我用API做过多机通信根本就没问题,也就是dcb.fParity =0;这个参数设成0就行了

b43713337 2012-08-01
  • 打赏
  • 举报
回复
我以前也碰到这种问题,用1和0也是设置失败
奔跑的北极熊 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
用FALSE和TRUE表示,就肯定没问题
[/Quote]

用0和1会有问题吗?
b43713337 2012-08-01
  • 打赏
  • 举报
回复
用FALSE和TRUE表示,就肯定没问题
奔跑的北极熊 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
dcb.fParity =0;
dcb.Parity =MARKPARITY;// 0-4=no,odd,even,mark,space
这么设保证没问题,我用API做过多机通信根本就没问题,也就是dcb.fParity =0;这个参数设成0就行了
[/Quote]

感谢回复,我现在没有机器进行测试,明天再试试。

我要连接的终端必须设置成7bit信息,2bit停止位,奇校验或偶校验。您的代码是不是表示任何校验都可以这样写啊?
wyx100 2012-08-01
  • 打赏
  • 举报
回复
#1楼 得分:0回复于:2012-08-01 12:58:02dcb.fParity =0;
dcb.Parity =MARKPARITY;// 0-4=no,odd,even,mark,space
这么设保证没问题,我用API做过多机通信根本就没问题,也就是dcb.fParity =0;这个参数设成0就行了

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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