通常windows下串口编程大家会选择MFC使用SCOM控件进行串口操作,
方便而且简单,我也是这样的,PC端要进行串口编程就选择MFC做一个
简单的界面,添加SCOM控件。但有时我们需要在Win32下进行串口编程,
根据我在网上查的资料以及编程调试经验做一个简单的例子,需要深入的
可以此为基础。
串口编程的过程基本是这样的:
串口打开、串口读操作、串口写操作、串口关闭
包含头文件:
#include <windows.h>
#include <stdio.h>
一、串口的同步方式(等待操作完成后才能返回):
1、 打开串口—同步方式
HANDLE Open_driver_T(char *name)
{
//打开串口
HANDLE m_hCom = CreateFile(name,GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);
if(m_hCom == INVALID_HANDLE_VALUE)
{
printf("Create File faile\n");
return NULL;
}
//设置缓冲区大小
if(!SetupComm(m_hCom,1024,1024))
{
printf("SetupComm fail!\n");
CloseHandle(m_hCom);
return NULL;
}
//设置超时
COMMTIMEOUTS TimeOuts;
memset(&TimeOuts,0,sizeof(TimeOuts));
TimeOuts.ReadIntervalTimeout = 100;
TimeOuts.ReadTotalTimeoutConstant = 1000;
TimeOuts.ReadTotalTimeoutMultiplier = 100;
TimeOuts.WriteTotalTimeoutConstant = 2000;
TimeOuts.WriteTotalTimeoutMultiplier = 50;
SetCommTimeouts(m_hCom,&TimeOuts);
PurgeComm(m_hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);
//设置串口参数
DCB dcb = {0};
if (!GetCommState(m_hCom,&dcb))
{
printf("GetCommState fail\n");
return NULL;
}
dcb.DCBlength = sizeof(dcb);
if (!BuildCommDCB("1228800,n,8,1",&dcb))//填充DCB的数据传输率、奇偶校验类型、数据位、停止位
{
printf("BuileCOmmDCB fail\n");
CloseHandle(m_hCom);
return NULL;
}
if(SetCommState(m_hCom,&dcb))
{
printf("SetCommState OK!\n");
}
return m_hCom;
}
2、串口发送(写操作)--同步方式
unsigned char Send_driver_T(HANDLE fd, BYTE *data)
{
DWORD dwError;
DWORD dwExpectSend = 20;
DWORD dwRealSend = 0;
BYTE *pSendBuffer;