VC串口编程DCB.fparity设置失败

vincent29 2011-08-08 10:28:26
源代码如下:

GetCommState(hSerialPort, &dcb);
printf("dcb.BaudRate = %d\n", dcb.BaudRate);
printf("dcb.fParity = %d\n", dcb.fParity);
#if 1
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 115200;
dcb.fBinary = TRUE;
dcb.fParity = 1;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fTXContinueOnXoff = TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fErrorChar = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.XonLim = 0;
dcb.XoffLim = 0;
dcb.ByteSize = 8;
dcb.Parity = EVENPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.XonChar = 17;
dcb.XoffChar = 19;
dcb.ErrorChar = 0;
dcb.EofChar = 0;
dcb.EvtChar = 0;
dcb.wReserved = 0;
//
// Set the new serial port configuration.
//
printf("set %d \n", SetCommState(hSerialPort, &dcb));
printf("after set dcb.fParity = %d\n", dcb.fParity);
printf("after set dcb.Parity = %d\n", dcb.Parity);
printf("get last error %d\n", GetLastError());
printf("get %d \n", GetCommState(hSerialPort, &dcb));
printf("dcb.BaudRate = %d\n", dcb.BaudRate);
printf("dcb.fParity = %d\n", dcb.fParity);
printf(" dcb.Parity = %d\n", dcb.Parity);
printf("dcb.ByteSize = %d\n", dcb.ByteSize);


//===================

输出结果为:

dcb.BaudRate = 115200
dcb.fParity = 0
set 1
after set dcb.fParity = 1
after set dcb.Parity = 2
get last error 0
get 1
dcb.BaudRate = 115200
dcb.fParity = 0
dcb.Parity = 2
dcb.ByteSize = 8


为什么唯独只有这个fParity设置不对,我现在PC和ARM通讯出错,估计是因为这个引起的,
大家发表一下意见啊。分全部给了
...全文
457 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
b43713337 2012-08-01
  • 打赏
  • 举报
回复
dcb.fParity =TRUE;
or dcb.fParity =FALSE 肯定没问题
JohnYale 2012-07-15
  • 打赏
  • 举报
回复
提前
一年了 这个问题还没解决?
我也遇到了同样的问题,而且SetCommState的返回值是true
vincent29 2011-08-08
  • 打赏
  • 举报
回复
继续等答案
vincent29 2011-08-08
  • 打赏
  • 举报
回复
顶一下,急用啊。
zgl7903 2011-08-08
  • 打赏
  • 举报
回复
dcb.fParity = 1; // enable parity checking
dcb.Parity=x; // 0-4=no,odd,even,mark,space

学飞的笨鸟 2011-08-08
  • 打赏
  • 举报
回复
还有 查看DCB 结构的定义为:
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary :1;
DWORD fParity :1;
DWORD fOutxCtsFlow :1;
DWORD fOutxDsrFlow :1;
DWORD fDtrControl :2;
DWORD fDsrSensitivity :1;
DWORD fTXContinueOnXoff :1;
DWORD fOutX :1;
DWORD fInX :1;
DWORD fErrorChar :1;
DWORD fNull :1;
DWORD fRtsControl :2;
DWORD fAbortOnError :1;
DWORD fDummy2 :17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;
可见,fParity为位域(bit field),其取值只能为“0”或“1”。
学飞的笨鸟 2011-08-08
  • 打赏
  • 举报
回复
MSDN中的解释“fParity --If this member is TRUE, parity checking is performed and errors are reported. ”

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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