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);
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章