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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Car12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值