劳烦指点下
以下答案引用自GPT-3大模型,请合理使用:
,谢谢
Hi3861可以通过串口发送16进制命令,但是需要遵循一定的格式。具体的可以参考Hi3861的说明书,里面明确指出了以下内容:
1、16 进制命令格式:发送报文的第1 个字节表示字符串的长度,后跟字符串,最后以空字符结尾。
2、所有 16 进制命令均以“0x7E”作为起始标志(最高位为 0),以“0x7F”作为结束标志(最高位为 1)发送。
3、发送的 16 进制命令中,可能包含“0x7E”、“0x7F”和“0x7D”这三个标志符,但是在发送时,要先将这三个标志符进行转换发送:0x7E 转换成 0x7D 0x5E;0x7F 转换成 0x7D 0x5F;0x7D 转换成 0x7D 0x5D;
使用Hi3861可以使用如下代码发送16进制命令:
static uint8_t byte[] = {0xBB, 0x00, 0x22, 0x00, 0x00, 0x22, 0x7E}; // 16进制命令
int length = sizeof(byte); // 命令长度
// 将16进制命令格式转换为可发送的16进制格式
for (int i=0; i<length; i++)
{
if (byte[i] == 0x7E)
{
byte[i] = 0x7D;
length += 1;
for (int j=length-1; j>i+1; j--)
{
byte[j] = byte[j-1];
}
byte[i+1] = 0x5E;
}
else if (byte[i] == 0x7F)
{
byte[i] = 0x7D;
length += 1;
for (int j=length-1; j>i+1; j--)
{
byte[j] = byte[j-1];
}
byte[i+1] = 0x5F;
}
else if (byte[i] == 0x7D)
{
byte[i] = 0x7D;
length += 1;
for (int j=length-1; j>i+1; j--)
{
byte[j] = byte[j-1];
}
byte[i+1] = 0x5D;
}
}
// 将转换后的字节数组发送至串口
hal_uart_send(HAL_UART_0, byte, length, 1000);
如果我的回答解决了您的问题,请采纳我的回答
不知道你这个问题是否已经解决, 如果还没有解决的话: