|
- #include "common.h"
-
- /*******************************************************************************************
- * 功能 : 打开串口
- * port : 串口号, 如("COM1")
- * baud_rate: 波特率
- * date_bits: 数据位(有效范围4~8)
- * stop_bit : 停止位
- * parity : 奇偶校验。默认为无校验。NOPARITY 0; ODDPARITY 1;EVENPARITY 2
- ********************************************************************************************/
- HANDLE Init_COM(LPCTSTR Port, int baud_rate, BYTE date_bits, BYTE stop_bit, BYTE parity)
- {
- HANDLE Handle_Com = CreateFile(Port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);//同步方式打开串口
- if (INVALID_HANDLE_VALUE == Handle_Com)
- {
- return INVALID_HANDLE_VALUE;
- }
- SetupComm(Handle_Com, 4096, 4096);//设置缓存
- DCB dcb;
- if (!GetCommState(Handle_Com, &dcb))
- {
- cout << "获取串口配置失败" << endl;
- }
- dcb.BaudRate = baud_rate; //波特率
- dcb.fBinary = TRUE; //二进制模式。必须为TRUE
- dcb.ByteSize = date_bits; //数据位。范围4-8
- if (stop_bit == 0)
- dcb.StopBits = ONESTOPBIT; //停止位
- if (stop_bit == 1)
- dcb.StopBits = ONE5STOPBITS; //停止位
- if (stop_bit == 2)
- dcb.StopBits = TWOSTOPBITS; //停止位
-
- if (parity == NOPARITY)
- {
- dcb.fParity = FALSE; //奇偶校验关闭
- dcb.Parity = parity; //校验模式
- }
- else
- {
- dcb.fParity = TRUE; //奇偶校验开启
- dcb.Parity = parity; //校验模式
- }
- cout << SetCommState(Handle_Com, &dcb) << endl;
- PurgeComm(Handle_Com, PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR | PURGE_TXABORT);//清除缓存
- //设置串口读写时间
- COMMTIMEOUTS CommTimeOuts;
- GetCommTimeouts(Handle_Com, &CommTimeOuts);
- CommTimeOuts.ReadIntervalTimeout = 5;
- CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
- CommTimeOuts.ReadTotalTimeoutConstant = 0;
- CommTimeOuts.WriteTotalTimeoutMultiplier = 10;
- CommTimeOuts.WriteTotalTimeoutConstant = 1000;
- if (!SetCommTimeouts(Handle_Com, &CommTimeOuts)) {
- return INVALID_HANDLE_VALUE;
- }
- return Handle_Com;
- }
-
- /*********************************************************************************************
- * 功能 : 发送响应数据
- * 描述 : 向串口写入数据
- * 返回值 : true 发送成功 false 发送失败
- * m_hComm : 串口句柄
- * data : 要写入的数据
- * len : 写入数据的长度
- **********************************************************************************************/
- bool SendData(HANDLE m_hComm, char* data, int len)
- {
- if (m_hComm == INVALID_HANDLE_VALUE)
- return FALSE;
-
- //清空串口
- PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR);
- //写串口
- DWORD dwWrite = 0;
- DWORD dwRet = WriteFile(m_hComm, data, len, &dwWrite, NULL);
- //清空串口
- PurgeComm(m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR);
- if (!dwRet)
- return FALSE;
- return TRUE;
- }
-
- /*********************************************************************************************
- * 功能 : Ms延时器
- * 描述 : ms级准确延时
- * 输入 : lTime 延时的ms数
- * 返回值 : 无
- **********************************************************************************************/
- void MSleep(long lTime)
- {
- LARGE_INTEGER litmp;
- LONGLONG QPart1, QPart2;
- double dfMinus, dfFreq, dfTim, dfSpec;
- QueryPerformanceFrequency(&litmp);
- dfFreq = (double)litmp.QuadPart;
- QueryPerformanceCounter(&litmp);
- QPart1 = litmp.QuadPart;
- dfSpec = 0.000001*lTime;
-
- do
- {
- QueryPerformanceCounter(&litmp);
- QPart2 = litmp.QuadPart;
- dfMinus = (double)(QPart2 - QPart1);
- dfTim = dfMinus / dfFreq;
- } while (dfTim<dfSpec);
- }
-
- /*********************************************************************************************
- * 功能 : 输入端口名称
- * 描述 : 获取串口通信的端口名称
- * 输入 : 无
- * 返回值 : COMM 端口名
- **********************************************************************************************/
- string Input_COMM(void)
- {
-
- }
-
- /*********************************************************************************************
- * 功能 : 输入波特率
- * 描述 : 获取串口通信的波特率
- * 输入 : 无
- * 返回值 : Boud_Rate 波特率
- **********************************************************************************************/
- unsigned int Input_Boud_Rate(void)
- {
-
- }
-
- /*********************************************************************************************
- * 功能 : 输入数据位
- * 描述 : 获取串口通信的数据位个数
- * 输入 : 无
- * 返回值 : Date_Bits 数据位
- **********************************************************************************************/
- unsigned int Input_Date_Bits(void)
- {
-
- }
-
- /*********************************************************************************************
- * 功能 : 输入停止位
- * 描述 : 获取串口通信的停止位
- * 输入 : Date_Bits 数据位
- * Stop_Bits= 0,1,2对应的是1bit,1.5bits,2bits.
- * Date_Bits=6,7,8时 Stop_Bits不能为1
- * Date_Bits=5时 Stop_Bits不能为2
- * 返回值 : Stop_Bits 数据位
- **********************************************************************************************/
- unsigned int Input_Stop_Bits(unsigned int Date_Bits)
- {
-
- }
-
- /*********************************************************************************************
- * 功能 : 选择校验位
- * 描述 : 获取串口通信的校验位
- * 输入 : 无
- * 返回值 : Parity数据位
- **********************************************************************************************/
- unsigned int Input_Parity(void)
- {
-
- }
|