Как отправить байтовый массив через последовательный порт на STM32? - PullRequest
0 голосов
/ 26 марта 2019

, поэтому я пытаюсь отправить несколько байтов с шестнадцатеричными значениями для настройки моего микроконтроллера на другой стороне последовательного порта. Дело в том, что я не совсем уверен, как правильно это сделать и в каком формате их отправлять. Например, мне нужно отправить два байта, и их шестнадцатеричные значения равны 57 и B0. Когда я пытаюсь отправить его как массив символов и читаю его обратно, я всегда получаю значения ASCII Hex для таких символов, как 53, а затем 55 для значения 57. Поэтому я хотел отформатировать шестнадцатеричное значение как байт и отправить их обоих одновременно из байтового массива, но я не получаю ничего при чтении ответа. После форматирования в байтах MessageBox показывает его десятичное значение, и я не знаю, должно ли оно быть таким. Я предоставляю свой код ниже.

Info_Byte_Dec += Protocol_Set + Protocol_Unit + Protocol_Write + Protocol_Settings; //stores decimal value
Data_Byte_Dec = Mode * Protocol_Mode_Offset + ODR * Protocol_ODR_Offset + Scale; //stores decimal value

Info_Byte_Hex = Info_Byte_Dec.ToString("X"); //convert to hex value
Data_Byte_Hex = Data_Byte_Dec.ToString("X"); //convert to hex value
string Merged = $"{Info_Byte_Hex} {Data_Byte_Hex}";
MessageBox.Show("Merged1: " + Merged);
byte[] Mergedbytes = Merged.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
MessageBox.Show("Merged2: " + Mergedbytes[0] + Mergedbytes[1]);

port.Write(Mergedbytes, 0, 2);

Я не уверен, должен ли я просто отправлять десятичное значение 87, или мне нужно отформатировать его в 57 шестнадцатеричное значение или даже в 0x57.

1 Ответ

1 голос
/ 26 марта 2019

обычно в мире микроконтроллеров, когда вы используете hex, вы подразумеваете фактические байты, hex - это просто удобная запись для записи двоичных байтовых значений, обычно это никогда не означает отправку шестнадцатеричных значений ascii.Сказав это, не существует никаких правил, и иногда люди действительно делают ASCII hex.

В вашем случае, если вы используете 0x57 на stm32, это, вероятно, означает, что вы используете байтовый литерал, а не представление ascii.Вам придется проделать дополнительную работу, чтобы превратить 0x57 в строку.

Это означает, что в C # просто отправляйте байты, а не гекс ascii, как вы сейчас

...