Hi3861如何用uart串口发送16进制命令

劳烦指点下

img

img


我用USB to TTL16进制发送了16进制命令BB 00 22 00 00 22 7E能与RFID芯片正常通信
但是我用Hi3861的uart串口死活发不出16进制命令,RFID一直没有响应

img


这样写可以吗
有什么办法能让Hi3861发送16进制命令,或者做到USB to TTL那样发送16进制命令?

以下答案引用自GPT-3大模型,请合理使用:

,谢谢

Hi3861可以通过串口发送16进制命令,但是需要遵循一定的格式。具体的可以参考Hi3861的说明书,里面明确指出了以下内容:

116 进制命令格式:发送报文的第1 个字节表示字符串的长度,后跟字符串,最后以空字符结尾。
2、所有 16 进制命令均以“0x7E”作为起始标志(最高位为 0),以“0x7F”作为结束标志(最高位为 1)发送。
3、发送的 16 进制命令中,可能包含“0x7E”、“0x7F”和“0x7D”这三个标志符,但是在发送时,要先将这三个标志符进行转换发送:0x7E 转换成 0x7D 0x5E0x7F 转换成 0x7D 0x5F0x7D 转换成 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);

如果我的回答解决了您的问题,请采纳我的回答

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^