C#调用API串口通信.doc
文本预览下载声明
HYPERLINK /wzwind/article/details/1898454 c#调api串口通信
分类: HYPERLINK /wzwind/article/category/327765 C#
在调试ICU通信设备的时候,由于串口通信老出现故障,所以就怀疑CF实现的SerialPort类是否有问题,所以最后决定用纯API函数实现串口读写。
先从网上搜索相关代码(关键字:C# API 串口),发现网上相关的资料大约来源于一个版本,那就是所谓的msdn提供的样例代码(msdn的具体出处,我没有考证),其它的代码大都是它的变种。
其实这个示例代码是有问题的,也就是说DCB结构体声明的有问题,虽然该代码可以正常通信,不过如果你设置了奇偶校验的话,你会发现奇偶校验无效。
VC中的DCB结构声明如下:
typedef struct _DCB {
??? DWORD DCBlength;????? /* sizeof(DCB)???????????????????? */
??? DWORD BaudRate;?????? /* Baudrate at which running?????? */
??? DWORD fBinary: 1;???? /* Binary Mode (skip EOF check)??? */
??? DWORD fParity: 1;???? /* Enable parity checking????????? */
??? DWORD fOutxCtsFlow:1; /* CTS handshaking on output?????? */
??? DWORD fOutxDsrFlow:1; /* DSR handshaking on output?????? */
??? DWORD fDtrControl:2;?/* DTR Flow control??????????????? */
??? DWORD fDsrSensitivity:1; /* DSR Sensitivity????????????? */
??? DWORD fTXContinueOnXoff: 1; /* Continue
??? DWORD fOutX: 1;?????? /* Enable output X-ON/X-OFF??????? */
??? DWORD fInX: 1;??????? /* Enable input X-ON/X-OFF???????? */
??? DWORD fErrorChar: 1;?/* Enable Err Replacement????????? */
??? DWORD fNull: 1;?????? /* Enable Null stripping?????????? */
??? DWORD fRtsControl:2;?/* Rts Flow control??????????????? */
??? DWORD fAbortOnError:1; /* Abort all reads and writes on Error */
??? DWORD fDummy2:17;??? ?/* Reserved??????????????????????? */
??? WORD wReserved;?????? /* Not currently used????????????? */
??? WORD XonLim;????????? /* Transmit X-ON threshold???????? */
??? WORD XoffLim;???????? /* Transmit X-OFF threshold??????? */
??? BYTE ByteSize;?????? ?/* Number of bits/byte, 4-8??????? */
??? BYTE Parity;????????? /* 0-4=None,Odd,Even,Mark,Space??? */
??? BYTE StopBits;??????? /* 0,1,2 = 1, 1.5, 2?????????????? */
??? char XonChar;???????? /* Tx and Rx X-ON character??????? */
??? char XoffChar;?????? ?/* Tx and Rx X-OFF character?????? */
??? char ErrorChar;?????? /* Error replacement char????????? */
??? char EofChar;???????? /* End of
显示全部