2024年4月3日发(作者:)
1 Windows API通信函数方法
与通信有关的Windows API函数共有26个,但主要有关的有:
CreateFile() 用 “comn”(n为串口号)作为文件名就可以打开串口。
ReadFile() 读串口。
WriteFile() 写串口。
CloseHandle() 关闭串口句柄。
初始化时应注意CreateFile()函数中串口共享方式应设为0,串口为不可共享设备,其它与一般文件读
写类似。以下给出API实现的源代码。
1.1 发送的例程
//声明全局变量
HANDLE m_hIDComDev;
OVERLAPPED m_OverlappedRead, m_Over lappedWrite;
//初始化串口
void CSerialAPIView::OnInitialUpdate()
{
CView::OnInitialUpdate();
Char szComParams[50];
DCB dcb;
Memset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));
Memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));
m_hIDComDev = NULL;
m_hIDComDev = CreateFile(“COM2”, GENERIC_READ│GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED, NULL);
if (m_hIDComDev == NULL)
{
AfxMessageBox(“Can not open serial port!”);
goto endd;
}
memset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));
memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));
COMMTIMEOUTS CommTimeOuts;
tervalTimeout=0×FFFFFFFF;
talTimeoutMultiplier = 0;
talTimeoutConstant = 0;
otalTimeoutMultiplier = 0;
otalTimeoutConstant = 5000;
SetCommTimeouts(m_hIDComDev, &CommTimeOuts);
Wsprintf(szComparams, “COM2:9600, n, 8, 1”);
m_OverlappedRead. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
m_OverlappedWrite. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
dcb. DCBlength = sizeof(DCB);
GetCommState(m_hIDComDev, &dcb);
dcb. BaudRate = 9600;
dcb. ByteSize= 8;
unsigned char ucSet;
ucSet = (unsigned char) ((FC_RTSCTS&FC_DTRDSR) != 0);
ucSet = (unsigned char) ((FC_RTSCTS&FC_RTSCTS) ! = 0);
ucSet = (unsigned char) ((FC_RTSCTS&FC_XONXOFF) ! = 0);


发布评论