我想将从PC上随机生成的数据发送到μC(ATmega328p),然后将其镜像回来。为此我用C#编写了一个程序(我第一次使用它)。
PC收到的每个字节,> 0xF7显示为0x3F。
μController正确接收和发送数据(我显示μC接收并在LCD上发送的所有数据)。 我还使用了两个串行终端工具(HTerm,Pololu串行发送器)来验证μC工作正常。 当PC在结束时接收/显示数据时,必定存在问题。
在textBox1中以.hex显示接收的数据
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
string outp = string.Empty;
char[] value = indata.ToCharArray();
foreach(char L in value){
int V = Convert.ToInt32(L);
outp+= string.Format("{0:x}",V);
}
if (outp != String.Empty)
Invoke(new Action(() => textBox1.AppendText(outp)));
}
EDIT2 //
我解决了这个问题。感谢kunif和gunnerone提示! port.ReadExisting()的编码似乎有问题。相反,我知道使用port.Read()。
private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e){
int bytesToRead = port.BytesToRead;
byte[] value = new byte[bytesToRead];
port.Read(value,0,bytesToRead);
string indata = BitConverter.ToString(value);
if (indata != String.Empty)
Invoke(new Action(() => textBox1.AppendText(indata)));
}
答案 0 :(得分:0)
如本文ASCIIEncoding.ASCII.GetBytes() Returning Unexpected Value所示,似乎在某处完成了与Encoding.ASCII.GetBytes()或ASCIIEncoding.ASCII.GetBytes()类似的处理(可能是indata.ToCharArray())。
请尝试从char[] value = indata.ToCharArray();
更改为byte[] value = Encoding.GetEncoding("ISO-8859-1").GetBytes(indata);
,同时将其他字符[]更改为字节[]。