导航:首页 > 编程语言 > writefile串口程序

writefile串口程序

发布时间:2021-10-25 06:52:15

A. 求助高人:串口WriteFile出错

不关你事的,这里它本身的bug,发送某个特定字符时会出错(具体哪个我忘了,你用穷举一个一个试吧),换成真正的双机连接就不会了(不过有可能会出现其它错误,软件模拟的毕竟与实际还是有点不同的)

我的解决方法是将该字符进行替换

另外,我试过一次发送多个字符,里面包含该字符时也没错,不知为什么

出了错不用重启电脑的,重置串口就行了
--------------------------------------------
你的串口连接线有没有问题?有debug的io命令试一下
--------------------------------------------
你的端口是以异步读写打开的还是同步?
如果是异步的话if(!dwWrite&&(GetLastError()==ERROR_IO_PENDING))
这里会出现个小问题,dwWrite可能永远为假

另外,检查一下send里面的内容,看看里面发送的内容是否正确
--------------------------------------------
这里我写端口的作法
hch_Write.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

if(!WriteFile(comhandle, outbuff, 1024, &towrite, &hch_Write))
{
//HCH_TEST;
if(GetLastError()==ERROR_IO_PENDING)
//GetLastError()函数返回ERROR_IO_PENDING,表明串口正在进行读写操作
{

//INFINITE
WaitForSingleObject(hch_Write.hEvent, 5000);
//使用WaitForSingleObject函数等待,直到写操作完成或延时已达到5秒钟
PurgeComm(comhandle, PURGE_TXABORT|PURGE_TXCLEAR);
--------------------------------------------
参考资料是串口调试助手的源代码

B. 为什么用writefile来写串口返回值非0,写入

先用串口调试助手之类的软件把串口调通,波特率等设置确定好,然后再考虑自己程序的问题。

C. 串口通信程序为什么WriteFile被阻塞

:异步串口可以不用,同步阻塞方式必须用,否则调用readfile writefile会阻塞线程,窗口就卡死了。。。 单线程用异步串口可以,但并不好,异步方式,窗口界面一般你还需要用个定时器,定时来查询通讯是否完成,何必这么麻烦,实时性又差

D. 怎么用writefile发送字节数组给串口

注意ReadFile()不是从你的单片机串口读数据,它是从PC的串口读接收到的数据,除非你的单片机给PC发了数据,你可以用ReadFile()读出,否则,望穿了秋水也等不到单片机里的数据。

E. 用API函数编写的串口通信,端口打开了,WriteFile总是反回调用失败类型为0;以下是程序,我是新手,谢谢帮

我遇到同样的问题,我用GetLastError()也是返回0,但是写入字节为0.请问你现在解决了吗?如果解决了可以告诉我怎么解决的?

F. 用WriteFile写串口后,提示错误"997".问题出在哪

初步估计你项目的属性设置的是“使用 Unicode 字符集”,所以你的CString是使用宽字节存储的字符串,一个字符占两位。而WriteFile函数没有WriteFileW的版本。 需要使用WideCharToMultiByte();做一个转换。

G. 串口通讯程序为什么WriteFile被阻塞

BOOL CSeriesPort::WritePort(HANDLE hc, const BYTE* buf, DWORD len)
{
DWORD wnum = 0;
DWORD hnum = 0; //已写入了字节

ASSERT(hc != INVALID_HANDLE_VALUE);

do
{
if(WriteFile(hc,buf + hnum,len - hnum, &wnum, NULL)) //阻塞在这里,单步执行也不行,直到接收到数据时才执行到下一步
{
hnum = hnum + wnum;
if(hnum == len)
{
break;
}
Sleep(10);
}
else
{
return FALSE;
}
} while (TRUE);

return TRUE;
}

DWORD CSeriesPort::ReadThreadFunc(LPVOID lp)
{
CSeriesPort* ps = (CSeriesPort*)lp;
DWORD evt;
BYTE* rbuf = NULL; //读取的字节
DWORD rLen = 0; //实际读取的字节
DWORD wLen;
DWORD rError;
COMSTAT cmstate;

ASSERT(ps->m_hComm != INVALID_HANDLE_VALUE);

PurgeComm(ps->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR); //清空缓冲区
SetCommMask(ps->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR);

while(TRUE)
{
if(WaitCommEvent(ps->m_hComm, &evt, 0))
{
SetCommMask(ps->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR); //接收到数据时WriteFile才能继续

//串口收到字符
if(evt & EV_RXCHAR)
{
ClearCommError(ps->m_hComm, &rError, &cmstate);
wLen = cmstate.cbInQue;
if(wLen <= 0)
{
continue;
}
rbuf = new BYTE[wLen];
memset(rbuf, '\0', wLen);
ReadFile(ps->m_hComm, rbuf, wLen, &rLen, 0);

if(rLen > 0) //触发读事件
{

H. VC中WriteFile()函数串口编程如何确定是否正

你在本机上的一个串口用WriteFile()向另一个串口发数据,用串口调试助手在另一个串口接收,即可看到你收到的内容,从而验证WriteFile()发送的数据是否正确。

I. 写串口的代码,为什么writefile不返回

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。
实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

阅读全文

与writefile串口程序相关的资料

热点内容
韩国电影从楼上小洞看下面美女0 浏览:887
苹果A1622什么版本 浏览:814
linux查看目录所有文件大小 浏览:674
拿快递露奶电影 浏览:38
登山的目的中文2电影中文字 浏览:887
国外男男大尺度电影 浏览:902
有天资榜的小说叶凌天 浏览:407
团鬼六最新电影 浏览:266
苹果6设置id怎么设置密码 浏览:278
一个小孩被绑架的搞笑电影叫什么 浏览:868
一龙二凤小说 浏览:358
电影不卡免费在线看 浏览:797
妻子是美容院的老板韩国 浏览:641
win10激活cdkey 浏览:861
不要网看电影' 浏览:103
安卓文件夹播放 浏览:402
一部韩国电影讲的四对恋人有一对在电影院 浏览:812
微信语音消息怎么保存在哪里 浏览:462
分身qq的文件在哪里 浏览:65
禁止事件加载js 浏览:681

友情链接