使用 HAL_UART_Transmit 发送 null

sending null with HAL_UART_Transmit

我在 Keil IDE 中使用 STM32103F 的 HAL 驱动程序。我需要将代码传输到通过串行端口连接到我的 STM32 的 ESP。此代码使 ESP 将命令 (CMD2) 中的任何内容发布到我正在使用的代理,但是当命令 (CMD2) 包含 0x00 (NULL) 时会出现问题,因此 ESP 不会向代理发布任何内容。这是我正在使用的代码:

char Appendix[8] = "\",0,0\r\n";

// DataLength = the length of the data stored in CMD2
// CMD2 might contain 0x00 in it
for(int i = 0; i < 7; i++) CMD2[DataLength+i]   = Appendix[i]; 
CMD2[DataLength+7] = 0x00;

sprintf(PubTopic, "AT+MQTTPUB=0,\"Data/%s\",\"", SerialNumber);
        
SizeOfPub = strlen(PubTopic);
        
for(int i = SizeOfPub; i < SizeOfPub+DataLength+8; i++) PubTopic[i] = CMD2[i-SizeOfPub];
        
HAL_UART_Transmit(huart, (uint8_t *) PubTopic, SizeOfPub+DataLength+7, 10);

当我的命令 (CMD2) 包含 0x00 (NULL) 时,ESP 无法正确执行到最后一行,但是当命令 (CMD2) 中没有 0x00 (NULL) 时,此代码可以正常工作。例如:

1)CMD2 = 0x45 0x55 0x53

2)CMD2 = 0x45 0x00 0x53

第一种情况,代码没有问题,但是第二种情况,ESP没有发布任何东西。

感谢,我发现我走错了路。使用 AT+COMMAND 发布可能包含 NULL 字符的代码的最佳方式是使用 AT+MQTTPUBRAW。这是我的代码:

sprintf(PubTopic, "AT+MQTTPUBRAW=0,\"Data/%s\",%d,0,0", SerialNumber, DataLength);
        
StrPrintln(&huart1, PubTopic);
    
HAL_Delay(50);

/*
* SendCommand is a uint8_t variable that contains commands
* that need to be published
*/
HAL_UART_Transmit(&huart1, SendCommand, DataLength, 10);