文章目录
- 前言
- 1. 创建一个对话框
- 2. Windows下使用非标准波特率
- 2.1获取串口号
- 2.2 获取设置的非标波特率
- 2.3 打开串口
前言
我们在使用USB转串口设备进行通讯时候,常用的标准波特率有9600bps,19200bps,115200bps,230400bps和921600bps等波特率。但有些场景下也会使用非标准波特率,如100000bps,200000bps,1Mbps,和4Mbps等波特率。下面简单的介绍一种方法,如何使用非标波特率。
1. 创建一个对话框
使用VC6++ 进行编程,创建一个对话框,在界面上添加组合框,用于显示搜索到串口设备。然后设置组合框属性点击样式,紧接着选择类型下面的下移属性,这样设置的好处就是可以自定义输入非标准波特率。设置步骤如下图所示:
2. Windows下使用非标准波特率
使用VC6++ 进行编程,创建一个对话框,在界面上添加组合框,用于显示搜索到串口设备。然后设置组合框属性点击样式,紧接着选择类型下面的下移属性,这样设置的好处就是可以自定义输入非标准波特率。设置步骤如下图所示:
2.1获取串口号
因为打开串口需要获取设备的端口号(COMX或COMXX),而界面上的组合框是显示串口设备友好名称和COM端口号,所以还要进行一个步骤提取COM端口号。
代码如下:
INT i,BegainSer,EndSer,Len;
std::string strTemp,strComName;
CHAR ComName[16] = "";
CHAR tempBuf[256] = "";
CHAR buf[256] = "";
//提取设备友好名称中的COM号
GetDlgItemText(hWnd,IDC_Com,tempBuf,sizeof(tempBuf));
Len =strlen(tempBuf);
strTemp = tempBuf;
BegainSer = strTemp.find('(');
EndSer = strTemp.find(')');
for(i=0; i<EndSer-BegainSer-1; i++)
{
ComName[i] = tempBuf[BegainSer+1+i];
}
strComName += "\\\\.\\";
strComName += ComName;
2.2 获取设置的非标波特率
波特率设置可以选取组合框列表中列出的波特率,也可以自己输入波特率,如非标准波特率。
//提取组合框中的波特率参数。
CHAR BaudrateBuffer[16] = "";
ULONG BaudRate;
GetDlgItemText(hWnd, IDC_BaudRate, BaudrateBuffer, sizeof(BaudrateBuffer));
BaudRate = atoi(BaudrateBuffer); //字符串转为整数
2.3 打开串口
//使用2.1和2.2小节获取的参数代入下面的函数中去,以及数据位,停止位和校验位。
BOOL OpenUART(LPCTSTR ComName, int BaudRate, int DataBits, int StopBits, int Parity)
{
DCB dcb; //设置串口参数的结构体
COMMTIMEOUTS Timeouts;
//打开串口
hCom = CreateFile(ComName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
if(hCom == INVALID_HANDLE_VALUE)
{
MessageBox(hWnd,"打开串口失败!","UartTest",MB_ICONWARNING);
return FALSE;
}
CommStat = TRUE;
RecvFlag = TRUE;
//设置串口缓冲区
SetupComm(hCom,4096,4096);
//设置读写超时
Timeouts.ReadIntervalTimeout = 100;
Timeouts.ReadTotalTimeoutMultiplier = 500;
Timeouts.ReadTotalTimeoutConstant = 0;
Timeouts.WriteTotalTimeoutMultiplier = 0;
Timeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCom, &Timeouts);
//设置串口参数
GetCommState(hCom,&dcb);
//设置波特率
dcb.BaudRate = BaudRate;
//设置数据位
switch(DataBits)
{
case 0:
dcb.ByteSize = 5;
break;
case 1:
dcb.ByteSize = 6;
break;
case 2:
dcb.ByteSize = 7;
break;
case 3:
dcb.ByteSize = 8;
break;
}
//设置停止位
switch(StopBits)
{
case 0:
dcb.StopBits = ONESTOPBIT;
break;
case 1:
dcb.StopBits = ONE5STOPBITS;
break;
case 2:
dcb.StopBits = TWOSTOPBITS;
break;
}
//设置校验位
switch(Parity)
{
case 0:
dcb.Parity = NOPARITY; //无校验
break;
case 1:
dcb.Parity = ODDPARITY; //奇校验
break;
case 2:
dcb.Parity = EVENPARITY; //偶检验
break;
case 3:
dcb.Parity = MARKPARITY; //标志1校验
break;
case 4:
dcb.Parity = SPACEPARITY; //空白校验
break;
}
SetCommState(hCom,&dcb);
PurgeComm(hCom,PURGE_TXABORT|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_RXCLEAR);
return TRUE;
}
这样串口设备就可以使用非标准波特进行设备间通讯了,参数设置如下图所示: