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”。