我最近创建了一个应用程序,它通过UART从我的STM设备接收数据。我尝试发送的数据是一个浮点数组 - 浮点数[512]。 数据以纯二进制形式发送 - 不是字符串。通常想法是4xbyte = float。
我确信我发送的数据很好。使用名为“Terminal”的程序和IEEE 754 Converter进行检查。 My program
在程序中,我从可用参数和其他参数中选择COMport。 (默认情况下,它们是我的COM适配器参数)。我打开连接,然后当STM完成发送数据时,我点击“Odebrane”按钮,这样它将在TextBox中显示数据
问题是我没有收到所有数据。 我不知道是什么原因。
private List<float> lista = new List<float>();
private float[] fDane = new float[1024];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
getAvailablePorts();
tb_Rx.Text = "Wprowadź parametry transmisji";
cb_BaudRate.Text = "9600";
cb_DataBits.Text = "8";
cb_Handshake.Text = "None";
cb_Parity.Text = "None";
cb_StopBits.Text = "One";
}
private void SerialP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
int size = sp.BytesToRead;
byte[] bArray = new byte[size];
float[] fArray = new float[size / 4];
sp.Read(bArray, 0, size);
for (uint i = 0; i < size / 4; i++)
{
fArray[i] = ByteToFloat(bArray, i); // change 4 bytes to float
lista.Add(fArray[i]);
}
}
private float ByteToFloat(byte[] input, UInt32 i)
{
byte[] Array = new[] { input[4 * i], input[4 * i + 1], input[4 * i + 2], input[4 * i + 3] };
return BitConverter.ToSingle(Array, 0);
}
private void bt_transform_Click(object sender, EventArgs e)
{
float[] fDane = lista.ToArray();
for(UInt32 i = 0; i < fDane.Length; i++)
{
RxPisz(fDane[i]);
}
}
-------------------------已解决--------------------- 更改了dataRecieved中断处理程序
private void SerialP_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
byte[] bArray = new byte[4*numberOfSamples];
float[] fArray = new float[numberOfSamples];
int previouse = counterOfRecBytes;
counterOfRecBytes += sp.BytesToRead;
sp.Read(bArray, previouse, (counterOfRecBytes - previouse));
if (counterOfRecBytes == 4*numberOfSamples)
{
for (uint i = 0; i < numberOfSamples; i++)
{
fArray[i] = ByteToFloat(bArray, i); // change 4 bytes to float
lista.Add(fArray[i]);
}
counterOfRecBytes = 0;
}
}
答案 0 :(得分:0)
我认为你没有以良好的速度读取数据,试图将BaudRate从9600改为19200.