Как отправить массив байтов через последовательный порт в STM32?

поэтому я пытаюсь отправить несколько байтов с шестнадцатеричными значениями, чтобы настроить мой микроконтроллер на другой стороне последовательного порта. Дело в том, что я не совсем уверен, как правильно это сделать и в каком формате их отправлять. Например, мне нужно отправить два байта, а их шестнадцатеричные значения — 57 и B0. Когда я пытаюсь отправить его в виде массива символов и читаю его обратно, я всегда получаю шестнадцатеричные значения ASCII для этих символов, например 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.

Я не уверен, куда я должен просто отправить... - может быть, вы могли бы посмотреть код в микроконтроллере, чтобы увидеть, что там ожидает программа?
Markus Safar 26.03.2019 21:09

@MarkusSafar Я пытался его найти. Но это первый раз, когда я работаю с каким-либо микроконтроллером, и я все еще теряюсь в таблицах данных. Может быть, я просто искал не то. Попробую еще раз.

Matej 26.03.2019 21:16

@MarkusSafar извините, я не понял это правильно. В коде микроконтроллера я использую этот формат 0x57. Но проблема в том, что когда я пытаюсь отправить его таким образом, я получаю неправильные значения, и я не знаю, почему.

Matej 26.03.2019 21:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
987
1

Ответы 1

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

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

Так что это означает, что в С# просто отправляйте байты, а не шестнадцатеричный ascii, как вы сейчас

Другие вопросы по теме