導航:首頁 > 編程語言 > wince串口編程

wince串口編程

發布時間:2022-02-08 20:21:44

㈠ wince串口的數據採集

既然是買來的開發板,那麼相應的內核、驅動等都是做好的,你只需要下載的板子上就可以了,成功後,WINCE操作系統完美運行,這時你可以說操作系統是你移植成功的,但是前期工作你要大體了解下,知道移植操作系統是怎麼回事,到老師提問時別摸不著頭腦。
對於串口的數據採集,就是一個相應的界面,界面上有相應的按鈕,按下相應的按鈕實現相應的功能,具體怎麼布局、怎樣設計就看你自己的想法了。
這一塊主要就是在你所生成的SDK下寫應用程序,主要環境為EVC或者VS2005,所用的開發語言VB、VC、C#等都可以。

㈡ VS2005與wince5.0的串口通信程序(VB語言編寫)

write方法是基於流類的,有三種重載,可以發送string,也可以發送byte[] 和char[]。
收到錯誤的數據:查看串口設置:波特率等。調試助手不一定解釋TextBox的Unicode字元,發送ASCII字元試試。
發送16進制數,可以用位元組數組,如果需要從界面接收用戶輸入:
byte[] bytes=new byte[textBox1.Text.Length/2];
for (int i = 0; i < textBox1.Text.Length; i += 2)
{
byte b = Convert.ToByte(textBox1.Text.Substring(i,2), 16);
bytes[i / 2] = b;
}
然後發送bytes即可。

㈢ 用C# 實現 wince 串口操作的方法

初始化代碼:
sp = new SerialPort();
sp.PortName = config.COMPort;
sp.BaudRate = 9600;
sp.DataBits = 8;
sp.StopBits = StopBits.One;
sp.Parity = Parity.None;
sp.DataReceived += sp_dataReceive;
sp.ReadTimeout = 500;
try
{
sp.Open();
}
catch (Exception e1)
{
if (MessageBox.Show("打開串口時失敗, 工作站將不能正常讀碼, 是否繼續?", "警告", MessageBoxButtons.YesNo)
!= DialogResult.Yes)
{
Close();
}
}

數據接收事件:
public void sp_dataReceive(object sender, SerialDataReceivedEventArgs e)
{
int i = 0;
byte[] data = new byte[20];
try
{
while (i < 20) data[i++] = (byte)sp.ReadByte();
}
catch (Exception e1) { }

if (tbBSM.Enabled)
{
strBsm = Encoding.ASCII.GetString(data, 0, i);
if (strBsm.Length >= 10)
{
strBsm = strBsm.Substring(0, 10);
}
MethodInvoker mi = new MethodInvoker(updateBSM);
this.BeginInvoke(mi);
this.Invalidate();
}
}

㈣ 求WinCE6.0平台上可運行的串口讀寫程序,C#編寫,使用.net campactframework.

C#串口讀寫程序方法具體如下:

PortDataSend.cs 發送Class

using System;
using System.Collections.Generic;
using System.Text;

namespace IOCPTest.BaseC
...{
public class PortDataSend
...{
Declare#region Declare

private long mCount = 0;
private int mDataLength = 0;

private byte[] BS = null;

#endregion Declare

PortDataSend#region PortDataSend

public PortDataSend()
...{
}

public PortDataSend(byte[] pBS, int pDataLength)
...{
BS = pBS;
mDataLength = pDataLength;
}

#endregion PortDataSend

DataSend#region DataSend

public void DataSend()
...{
try
...{
if (BS == null)
...{
return;
}
if (mDataLength == 0)
...{
mDataLength = BS.Length;
}
if (mDataLength == 0)
...{
return;
}
mDataLength = mDataLength + 2;

byte[] BST = new byte[mDataLength];

BST[BST.Length - 2] = 0x00;
BST[BST.Length - 1] = 0x03;
for (int i = 0; i < BS.Length; i++)
...{
BST[i] = BS[i];
BST[BST.Length - 2] = (byte)(BST[BST.Length - 2] ^ BS[i]);
}

IOCPTest.BaseC.GlobeValues.SP.Write(BST, 0, BST.Length);

mCount++;
mDataLength = 0;
}
catch
...{
}
}

#endregion DataSend

mCount#region mCount

public long GetCount
...{
get
...{
return mCount;
}
}

#endregion mCount

DataSendTest3#region DataSendTest3

public void DataSendTest3()
...{
try
...{
byte[] BSTest;

string[] mBSStr = Convert.ToString("01 02 03 01 00 3A 02 03 31 31 31 31 31 31 31 31 31 31 31 31 2C 00 01 2C 00 64 3B 32 32 32 32 32 32 32 32 32 32 32 32 2C 00 01 2C 00 64 3B 33 33 33 33 33 33 33 33 33 33 33 33 2C 00 01 2C 00 64 3B").Split(' ');
BSTest = new byte[mBSStr.Length];

for (int i = 0; i < BSTest.Length; i++)
...{
BSTest[i] = (byte)Convert.ToInt32(mBSStr[i], 16);
}

BS = BSTest;

DataSend();

}
catch
...{
}
}

#endregion DataSendTest3

}
}

PortDataReceived.cs 接收Class

using System;
using System.Collections.Generic;
using System.Text;

namespace IOCPTest.BaseC
...{
class PortDataReceived
...{
Declare#region Declare

private long mCount = 0;
private int mDataEnd = 0;

private byte[] BR = new byte[2048];
private byte[] BRTmp = new byte[2048];
private byte mSOH = 0x01; //通訊特殊字元定義:通訊字頭
private byte mSTX = 0x02; //通訊特殊字元定義:數據開始
private byte mETX = 0x03; //通訊特殊字元定義:通訊結束

#endregion Declare

PortDataReceived#region PortDataReceived

public PortDataReceived()
...{
}

#endregion PortDataReceived

Listen#region Listen

public byte[] Listen()
...{
try
...{
byte[] BR = ReceiveData();

return BR;
}
catch (NullReferenceException NullEx)
...{
throw NullEx;
}
catch (Exception ex)
...{
throw ex;
}
}

#endregion Listen

ReceiveData#region ReceiveData

public byte[] ReceiveData()
...{
try
...{
int mStartCount = 0;
int mSOHPos = 0;
int mSTXPos = 0;
int mETXPos = 0;
int mCmdLength = 0;

System.DateTime DT = System.DateTime.Now;

byte[] Data = null;

BRTmp = new byte[2048];

while((System.DateTime.Now.Ticks - DT.Ticks) < IOCPTest.BaseC.GlobeValues.PortTimeOut)
...{
try
...{
mStartCount = 0;
//System.Threading.Thread.Sleep(IOCPTest.BaseC.GlobeValues.PortDelay);
mStartCount = IOCPTest.BaseC.GlobeValues.SP.Read(BRTmp, 0, 2048);

for (int i = 0; i < mStartCount; i++)
...{
BR[i + mDataEnd] = BRTmp[i];
}
mDataEnd = mDataEnd + mStartCount;
}
catch
...{
}

if (mStartCount > 0)
...{
DT = System.DateTime.Now;
}

//尋找並且校驗SOH、STX、ETX的位置
for (int i = 0; i < BR.Length - 6; i++)
...{
if((BR[i] == mSOH) && (BR[i+6] == mSTX))
...{
mSOHPos = i;
mSTXPos = i+6;
mCmdLength = (int)BR[i+4] * 256 + (int)BR[i+5];
mETXPos = mSTXPos + mCmdLength + 2;

if (BR[mETXPos] == mETX)
...{
Data = new byte[mSTXPos + mCmdLength + 1 - mSOHPos];

for (int j = 0; j < mSTXPos + mCmdLength + 1 - mSOHPos; j++)
...{
Data[j] = BR[mSOHPos + j];
}

for (int j = 0; j < (mDataEnd - (mSTXPos + mCmdLength + 1)); j++)
...{
BR[j] = BR[(mSTXPos + mCmdLength + 1) + j];
}
for (int j = (mDataEnd - (mSTXPos + mCmdLength + 1)); j < 2048; j++)
...{
BR[j] = 0x00;
}
mDataEnd = mDataEnd - (mSTXPos + mCmdLength + 1);

IOCPTest.BaseC.GlobeValues.DataBuffer.Add(Data);

mCount++;

return Data;
}
}
}

}
return null;
}
catch (NullReferenceException NullEx)
...{
throw NullEx;
}
catch (Exception ex)
...{
throw ex;
}
}

#endregion ReceiveData

ReceiveDataNonReturn#region ReceiveDataNonReturn

public void ReceiveDataNonReturn()
...{
try
...{
ReceiveData();
}
catch
...{
}
}

#endregion ReceiveData

ReceiveDataThread#region ReceiveDataThread

public void ReceiveDataThread()
...{
try
...{
while (true)
...{
try
...{
ReceiveData();
}
catch
...{
}
}
}
catch
...{
}
}

#endregion ReceiveData

mCount#region mCount

public long GetCount
...{
get
...{
return mCount;
}
}

#endregion mCount

}

}

DataProcessingIOCP.cs 處理Class

using System;
using System.Collections.Generic;
using System.Text;

namespace IOCPTest.BaseC
...{
public class DataProcessingIOCP
...{
Declare#region Declare

private long mCount = 0;

#endregion Declare

DataProcessingIOCP#region DataProcessingIOCP

public DataProcessingIOCP()
...{
}
#endregion DataProcessingIOCP

DataProcessing#region DataProcessing

public void DataProcessing()
...{
try
...{
int mCurrentBuffer = 0;

while (true)
...{
byte[] RD = null;

提取正待處理的數據#region 提取正待處理的數據

if (IOCPTest.BaseC.GlobeValues.DataBuffer != null)
...{
if (IOCPTest.BaseC.GlobeValues.DataBuffer.Count > 0)
...{
if (mCurrentBuffer < 0)
...{
mCurrentBuffer = 0;
}
RD = (byte[])IOCPTest.BaseC.GlobeValues.DataBuffer[mCurrentBuffer];
mCurrentBuffer++;
}
else
...{
continue;
}
}
else
...{
continue;
}
#endregion 提取正待處理的數據

數據處理#region 數據處理

switch (RD[3]) //指令處理
...{
case 0x01:

ReadData_0X01(RD);

break;

case 0x02:

ReadData_0X02(RD);

break;

}

#endregion 數據處理

處理結束,刪除已經處理了的數據#region 處理結束,刪除已經處理了的數據
if (IOCPTest.BaseC.GlobeValues.DataBuffer != null)
...{
if (IOCPTest.BaseC.GlobeValues.DataBuffer.Count > 0)
...{
IOCPTest.BaseC.GlobeValues.DataBuffer.Remove(RD);
}
}

mCurrentBuffer--;
if (mCurrentBuffer < 0)
...{
mCurrentBuffer = 0;
}
#endregion 處理結束,刪除已經處理了的數據

mCount++;

}
}
catch
...{
}
}
#endregion DataProcessing

mCount#region mCount

public long GetCount
...{
get
...{
return mCount;
}
}

#endregion mCount

ReadData_0X01#region ReadData_0X01

private void ReadData_0X01(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x01)
...{
return;
}

string[] mSampleCode = new string[pRD[7]];
int[] mTesterType = new int[pRD[7]];
int[] mLoadCapacity = new int[pRD[7]];

for (int i = 0; i < pRD[7]; i++)
...{
for (int j = 0; j < 12; j++)
...{
mSampleCode[i] = mSampleCode[i] + Convert.ToString(Convert.ToChar(pRD[8 + j + i * 19]));
}
mTesterType[i] = pRD[i * 19 + 21] * 255 + pRD[i * 19 + 22];
mLoadCapacity[i] = pRD[i * 19 + 24] * 255 + pRD[i * 19 + 25];
}

return;

}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}

#endregion ReadData_0X01

ReadData_0X02#region ReadData_0X02

private void ReadData_0X02(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x02)
...{
return;
}

int[] mData = new int[pRD[7]];

string mSampleCode = "";

for (int i = 0; i < 12; i++)
...{
mSampleCode = mSampleCode + Convert.ToString(Convert.ToChar(pRD[8 + i]));
}

for (int i = 0; i < mData.Length; i++)
...{
mData[i] = pRD[i * 2 + 20] * 255 + pRD[i * 2 + 21];
}

}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}

#endregion ReadData_0X02

ReadData_0X02_Request#region ReadData_0X02_Request

private void ReadData_0X02_Request(byte[] pRD)
...{
try
...{
try
...{
if (pRD[3] != 0x02)
...{
return;
}

int[] mData = new int[pRD[7]];

string mSampleCode = "";

for (int i = 0; i < 12; i++)
...{
mSampleCode = mSampleCode + Convert.ToString(Convert.ToChar(pRD[8 + i]));
}

for (int i = 0; i < mData.Length; i++)
...{
mData[i] = pRD[i * 2 + 20] * 255 + pRD[i * 2 + 21];
}

}
catch (Exception Ex)
...{
throw Ex;
}
}
catch
...{
}
}

#endregion ReadData_0X02_Request

}
}

㈤ wince下有沒有串口調試助手

串口調試助手的參數設置對了嗎? 1.波特率,校驗位等。 2.發送窗口旁邊有個「十六進制發送」選擇的: A.勾上,就在窗口輸入「76 31 30 30 30 0D」發送,這是十六進制(hex),有沒有空格都無所謂的;數字前面的「0x」是表示這是十六進制數

㈥ Wince 虛擬串口,該怎麼處理

Wince 虛擬串口
在wince下配置e300的無線上網卡,在硬體開發板的上只有兩個com口,但是無線上網卡要求是com6,com7,com8,
用string[] n_com = SerialPort.GetPortNames();獲得的也只有com1/com2
請問各位大俠這個問題是wince的沒有虛擬串口的問題嗎?
該怎麼解決?希望各位能給個解釋

------解決方案--------------------
探討
當connect的時候,提示埠已佔用
打電話給廠家說是用com6,com7,com8,
在開發板上用string[] n_com = SerialPort.GetPortNames();獲取的com口名字,只有com1/com2。
去哪裡給弄com6
推斷可能是wince沒有裝usb轉串口的驅動
於是把wince下public帶的usbser.dll安裝上,但還只有com1/com2,……

------解決方案--------------------
探討
現在在系統裡面出現com1,com2,com0,com3,com4加上偶爾會出現的com5
但是始終沒有出現com6,com7,com8
我嘗試著修改注冊表把原來有的com6,com7,com8修改為com0,com3,com4
在dos引導wince的時候就出錯了,
Error invalid signature
data:0 0 0 0 0 0 0 0 0 0 0 0 0

------解決方案--------------------
探討
現在出現的問題是:
e300的驅動已經安裝了,為什麼能這么說呢?因為能夠在windows目錄下看到所安裝的
驅動(EvdoUsbcdcDriver.dll)
並且在make new connection的時候,能夠在數據機裡面看到CDMAModem("FriendlyName")。
但是虛擬的com口並沒有出來,仍舊只有com1/com2。
請問各位大俠
是我在wince7系統定製……

------解決方案--------------------
探討

引用:

引用:
現在出現的問題是:
e300的驅動已經安裝了,為什麼能這么說呢?因為能夠在windows目錄下看到所安裝的
驅動(EvdoUsbcdcDriver.dll)
並且在make new connection的時候,能夠在數據機裡面看到CDMAModem("FriendlyName")。
但是虛擬的com口並沒有出來,仍舊只有c……

------解決方案--------------------
探討
引用:

我之前在WinCE6下調試過huawei/ZTE 3G的模塊,也遇到過串口虛擬不出來。
最終問題還是出在usb虛擬串口驅動,所以LZ要確認原廠給你的usb虛擬串口驅動是否支持你目前的平台。再有一個需要注意的地方,就是模塊的上電時序。

呵呵,這個也許是現在最具有說服性的理由!
如果是硬體平台的話,我現在用的開發板是x86的,e300能夠x86的PC上成功連上……

㈦ qt在wince下怎麼用串口通信

我用win_qextserialport.h這個可以實現簡單的通信

㈧ wince 6.0 如何把調試串口改為普通串口

步驟:
1:在D:/WINCE600/PLATFORM/SMDKC100/MDK100.bat裡面
set BSP_NOSERIAL=
set BSP_NOUART0=
set BSP_NOUART1=
set BSP_NOUART2=
set BSP_NOUART3=
set BSP_NOIRDA2=1
set BSP_NOIRDA3=1
@REMset BSP_DEBUGPORT=SERIAL_UART0
@REMset BSP_DEBUGPORT=SERIAL_UART1
@REM set BSP_DEBUGPORT=SERIAL_UART2
@REM set BSP_DEBUGPORT=SERIAL_UART3
隱去以上的,主要是要載入各個串口的注冊表信息一邊載入驅動
如果哪個不隱去,則哪個就不載入,用於調試串口
2:在D:/WINCE600/PLATFORM/SMDKC100/SRC/OAL/OALLIB/debug.c裡面
要隱去VOID OEMWriteDebugByte(UINT8 ch)和、int OEMReadDebugByte()
裡面的內容:注意如果不隱去則燒寫系統進不了,死在這了!
VOID OEMWriteDebugByte(UINT8 ch)
{
// Wait for TX Buffer Empty
//
// while (!(g_pUARTReg->UTRSTAT & 0x2));//muscle boy
// g_pUARTReg->UTXH = ch; //muscle boy
}
//------------------------------------------------------------------------------
//
// Function: OEMReadDebugByte
//
// Reads a byte from the debug serial port. Does not wait for a character.
// If a character is not available function returns "OEM_DEBUG_READ_NODATA".
//
int OEMReadDebugByte()
{
/* int ch; //muscle boy
if (g_pUARTReg->UTRSTAT & 0x1) // There is received data
{
ch = (int)(g_pUARTReg->URXH);
}
else // There no data in RX Buffer;
{
ch = OEM_DEBUG_READ_NODATA;
}
return ch;

*/ //muscle boy
}

㈨ 為什麼在wince中用串口接收超過128個位元組以上的時候就無法接收到數據呢

本人對WINCE編程不熟悉。不過從通用IO來說,一般情況下,是IO緩存機制上出了問題。是你在讀取串口數據後,沒有及時清空IO緩存。對一個IO埠來說,IO緩存是共享的。IO設備接收到數據後,在緩存滿後,將進入等待周期,等待使用IO的程序對其緩存進行部分清空處理,騰出空間。若沒有空餘緩存,則不會再接收新的數據。從你描述的情況來看,你在讀取數據後,沒有發出清除讀取後的數據命令,致使緩存保持在全滿狀態。其寄存器「緩存滿」標志保持有效,阻止設備繼續接收數據。因此,仔細檢查你的程序,增加清除已讀緩存的命令,使設備可以繼續接收數據,才有新的數據供程序讀取。

㈩ WINCE中,實現串口數據的接收和發送時,使用了writefile和readfile函數。這兩個函數發送和接收的數據都是

writefile發送16進制數據么問題啊

Writing to a Serial Port (Windows CE 5.0)

DWORD dwError,
dwNumBytesWritten;

WriteFile (hPort, // Port handle
&Byte, // Pointer to the data to write
1, // Number of bytes to write
&dwNumBytesWritten, // Pointer to the number of bytes
// written
NULL // Must be NULL for Windows CE
);

閱讀全文

與wince串口編程相關的資料

熱點內容
linux分區讀取 瀏覽:794
單片機液晶顯示屏出現雪花 瀏覽:890
解壓器用哪個好一點 瀏覽:771
什麼app看小說全免費 瀏覽:503
sha和ras加密 瀏覽:823
韓順平php視頻筆記 瀏覽:636
阿里雲ecs伺服器如何設置自動重啟 瀏覽:596
三星電視怎麼卸掉app 瀏覽:317
如何將pdf轉換成docx文件 瀏覽:32
dos命令批量改名 瀏覽:376
centosphp環境包 瀏覽:601
mfipdf 瀏覽:534
電腦解壓後電腦藍屏 瀏覽:295
外網訪問內網伺服器如何在路由器設置 瀏覽:856
2014統計年鑒pdf 瀏覽:434
linuxoracle用戶密碼 瀏覽:757
股票交易pdf 瀏覽:898
p2papp源碼 瀏覽:308
記錄睡眠軟體app哪個好用 瀏覽:140
液壓助力車壓縮比 瀏覽:217