首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC串口编程DCB.fparity设置失败解决思路

2012-02-09 
VC串口编程DCB.fparity设置失败源代码如下:C/C++ codeGetCommState(hSerialPort, &dcb)printf(dcb.BaudR

VC串口编程DCB.fparity设置失败
源代码如下:

C/C++ code
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通讯出错,估计是因为这个引起的,
大家发表一下意见啊。分全部给了

[解决办法]
还有 查看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”。

热点排行