導航:首頁 > 編程語言 > 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串口程序相關的資料

熱點內容
調試程序演算法的目的 瀏覽:916
上拉菜單js 瀏覽:520
精油按摩影視 瀏覽:651
ftp如何設置文件共享屬性 瀏覽:258
關於年獸好看的動漫電影有哪些 瀏覽:830
嫩模電影在線觀看泰國版 瀏覽:469
十大封禁愛情電影觀看 瀏覽:22
fm文件復制到u盤 瀏覽:773
換源網站有哪些 瀏覽:243
歐美哪部大尺度電影里的胸最好看 瀏覽:943
e網路頻率 瀏覽:832
win10用什麼優化大師 瀏覽:112
淘寶出售壓縮文件 瀏覽:220
2015中關村大數據日 瀏覽:448
電影是21比9解析度 瀏覽:625
穿越紅軍小說 瀏覽:764
linux目錄中創建新文件許可權 瀏覽:739
某500mhz計算機執行標准測試程序 瀏覽:277
大數據開發就業怎麼樣 瀏覽:683
怎麼打開蘋果手機的4g網路 瀏覽:826

友情鏈接