用CserialPort类写的串口程序,为何只能发送一次?

用CserialPort类写的串口程序,为何只能发送一次?,第1张

解决方法:

解决的思路是将写串口事件(m_hWriteEvent)的优先级高于接收事件(m_ov.hEvent),如下:

BOOL CSerialPort::InitPort(......){

......

m_hEventArray[0] = m_hShutdownEvent// highest priority

m_hEventArray[1] = m_hWriteEvent

m_hEventArray[2] = m_ov.hEvent

......

}

UINT CSerialPort::CommThread(LPVOID pParam){

......

switch (Event)

{

case 0:

{

......

}

case 2:

{

memset(&comstat, 0, sizeof(COMSTAT))

GetCommMask(port->m_hComm, &CommEvent)

if (CommEvent &EV_RXCHAR)//接收到字符,并置于输入缓冲区中

// Receive character event from port.

ReceiveChar(port, comstat)

......

break

}

case 1: /// write event发送数据

{

// Write character event from port

WriteChar(port)

break

}

default:

{

......

}

......

}

可以选COM1和COM2。

1、安装好VSPD后,首先选择你要虚拟的端口号,点击“添加端口”。一般现在的笔记本电脑都没有串口,所以可以选COM1和COM2。2、虚拟好端口后,左侧能看到新虚拟出的COM1和COM

2,此时两个端口应该都没有被占用,处于停用状态。

3、打开串口调试助手,设置COM1的波特率、奇偶校验位、数据位、停止位等参数,同时确保COM2是未占用状态。我们这样设置,是为了让COM1负责发送数据,COM2负责接收数据。如果COM2也被占用,那么你的程序就无法使用这个端口了。

4、在图中方框位置填入你要模拟的数据,然后点击“自动发送”,这时你应该看到进度条不断前进,而VSPD的COM1的Sent数据不断增长,说明串口调试助手正不断通过COM1发送数据。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/10953808.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-12
下一篇2023-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存