我想问你,因为我无法解决我的问题。我编写了MCU和PC(窗口)之间的通信,但是存在问题。
沟通类型:字节 消息结构: PC-> MCU AA 55 MESLEN MESSID PACKID [1] PACKID [0] DATA CRC; MCU-> PC 55 AA MESID DATA1 DATA0 CRC(固定大小)。
其中AA 55(55 AA)是邮件标题
沟通原则: PC发送了一些数据(带有乱码ID,打包ID等)
MCU接收数据,如果数据正常(Header和CRC正常),则发送具有相同messID和packedID的响应以确认先前的消息。如果没有,“watchdog”重新发送消息(并写入控制台超时)。
除一例外,通讯工作没有问题。如果DATA0 = 0x1A且DATA1 = 0x00,则通信完全失败。
我使用测试仪检查通信,并且此消息正确发送,有任何延迟等。
具体问题: 1)仅在这种情况下,通信失败。 2)仅在这种情况下,PC从串行链路接收大延迟的字节,但数据发送正确(在振镜上检查)。
我试过了: 改变超时 更改接收字节阈值(现在为1,但我测试了7B,但它是同样的问题)
REC。功能来源:
static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int BytesNr = port.BytesToRead;
int InputCRC = 0;
Uart_alldata = false;
byte[] tempData = new byte[10];
if (BytesNr == 7)
{
// port.Read(tempData, 0, BytesNr);
for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte()); // alt for test
Array.Copy(tempData, inbuffer, BytesNr);
Uart_alldata = true;
string data = BitConverter.ToString(tempData);
Console.WriteLine(data);
}
else
{
// port.Read(tempData, 0, pocetB);
for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte());
Array.Copy(tempData, inbuffer, BytesNr);
string data = BitConverter.ToString(tempData);
Console.WriteLine(data);
port.DiscardInBuffer();
}
try
{
port = new SerialPort(ArrayComPortsNames[cislo_portu], 9600, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.ReadBufferSize = 4096;
port.WriteBufferSize = 4096;
port.WriteTimeout = 500;
port.ReadTimeout = 50;
port.RtsEnable = true;
port.DtrEnable = true;
port.ReceivedBytesThreshold = 1;
// Begin communications
port.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("Port otevřen");
}
about 200 previous messages without problem
ReadBytes:7B
55-AA-02-00-17-CC-1C-00-00-00
ReadBytes:7B
55-AA-02-00-17-CC-1C-00-00-00
ReadBytes:7B
55-AA-02-00-18-CC-1B-00-00-00
ReadBytes:7B
55-AA-02-00-18-CC-1B-00-00-00
ReadBytes:7B
55-AA-02-00-19-CC-1A-00-00-00
ReadBytes:7B
00-00-00-00-00-00-00-00-00-00
55-AA-02-00-19-CC-1A-00-00-00
ReadBytes:7B
00-00-00-00-00-00-00-00-00-00
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00
Timeout
Timeout
Timeout
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00
Timeout
Timeout
Timeout
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00
Timeout
Timeout
Timeout
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00
你有什么想法问题吗? 谢谢你的想法。
此致
L.Beran