我目前正在编写一个简单的应用程序,它将通过 ftdi232 芯片(串行端口)与基于 arduino 的设备进行通信
我在基流读取方面遇到了困难 - 我的应用程序在虚拟端口(com0com)上测试时运行良好,但是当我切换到 ftdi 设备时,接收到的数据变得混乱和/或重复。
发送和接收端口配置相同:
19200波特率
8 个数据位
奇偶校验 = 无
停止位 = 1
dtr 和 rts 被禁用
DiscardNull 已启用。
目前(测试)两个 ftdi 板都连接到同一台机器。 板通过 3 条线连接(rx、tx [交叉] 和接地)。
有问题的方法:
public async Task StartReceivingAsync()
{
_isLissening = true;
string errorData = string.Empty;
byte[] mainBuffer = new byte[_completeCommandSizeWithSep];
while(_port.IsOpen && !_receiveToken.IsCancellationRequested)
{
int bytesRead = await _port.BaseStream.ReadAsync(mainBuffer, 0, _completeCommandSizeWithSep, _receiveToken);
string rawData = Encoding.GetEncoding(_port.Encoding.CodePage).GetString(mainBuffer);
if(_port.Encoding.CodePage == Encoding.ASCII.CodePage)
_receivedBuffer.Append(RemoveNonAsciiChars(rawData));
else
_receivedBuffer.Append(rawData);
if(_receivedBuffer.Length >= _completeCommandSizeWithSep)
{
ICommandModel command = _commandModelFac();
string workPiece = _receivedBuffer.ToString(0, _completeCommandSizeWithSep);
int whereToCut = CheckRawData(workPiece);
if(whereToCut == -1)
{
command.Data = workPiece;
_receivedBuffer.Remove(0, _completeCommandSizeWithSep);
}
else if(whereToCut > 0)
{
command.Data = _receivedBuffer.ToString(0, whereToCut);
_receivedBuffer.Remove(0, whereToCut);
}
开心每一天1111
相关分类