WIN32 串口发送数据

本来开始使用boost::asio::serial的库发送数据,已发送到stm32单片机就跑飞了,最终还是选择了原生的Windows API

void  WritSerialData(string data)
{
	HANDLE hComm;
	CString com;
	CString filename;
	boost::asio::io_service service;
	m_serial_list.GetWindowTextW(com);
	
	m_file_name.GetWindowText(filename);
	hComm = CreateFile(com,
		GENERIC_READ | GENERIC_WRITE,
		0,
		0,
		OPEN_EXISTING,
		NULL,
		0);
	if (hComm != INVALID_HANDLE_VALUE)
	{
		DCB  dcb;

		int rate = 115200;

		memset(&dcb, 0, sizeof(dcb));//在一段内存块中填充某个给定的值,是对较大的结构//体或数组进行清零操作的一种最快方法

		//if (!GetCommState(hComm, &dcb))//获取当前DCB配置



		//	return FALSE;

		// set DCB to configure the serial port

		dcb.DCBlength = sizeof(dcb);

		/* ---------- Serial Port Config ------- */

		dcb.BaudRate = rate;

		dcb.Parity = NOPARITY;

		dcb.fParity = 0;

		dcb.StopBits = ONESTOPBIT;

		dcb.ByteSize = 8;

		dcb.fOutxCtsFlow = 0;

		dcb.fOutxDsrFlow = 0;

		dcb.fDtrControl = DTR_CONTROL_DISABLE;

		dcb.fDsrSensitivity = 0;

		dcb.fRtsControl = RTS_CONTROL_DISABLE;

		dcb.fOutX = 0;

		dcb.fInX = 0;

		/* ----------------- misc parameters ----- */

		dcb.fErrorChar = 0;

		dcb.fBinary = 1;

		dcb.fNull = 0;

		dcb.fAbortOnError = 0;

		dcb.wReserved = 0;

		dcb.XonLim = 2;

		dcb.XoffLim = 4;

		dcb.XonChar = 0x13;

		dcb.XoffChar = 0x19;

		dcb.EvtChar = 0;

		// set DCB

		SetCommState(hComm, &dcb);
		unsigned long  relen = 0;
		WriteFile(hComm, data.c_str(), data.size(), &relen, NULL);
		DWORD err = GetLastError();
		CloseHandle(hComm);
	}
}
发布了136 篇原创文章 · 获赞 22 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u010261063/article/details/102917832