如何通过串口发送字节数组到STM32?

问题描述 投票:0回答:1

所以我试图发送一些带有十六进制值的字节来在串口的另一端设置我的微控制器。问题是我不太确定如何正确地做它以及以什么格式发送它们。例如,我需要发送两个字节,它们的十六进制值是57B0。当我尝试将其作为char数组发送并且我将其读回来时,我总是得到这些字符的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

c# serial-port stm32
1个回答
1
投票

通常在微控制器世界中,当你使用十六进制时,你的意思是实际的字节,十六进制只是一个方便的符号来写二进制字节值,它通常永远不会意味着发送ascii十六进制值。话虽如此,没有规则,有时人们会做实际的ascii hex。

在您的情况下,如果您在stm32上使用0x57,则可能意味着您使用的是字节文字,而不是ascii表示。您需要做额外的工作才能将0x57转换为字符串。

所以这意味着在C#中只发送字节,而不是像现在这样的ascii十六进制

© www.soinside.com 2019 - 2024. All rights reserved.