STM32基于HAL库使用串口发送16进制数组

uint8_t dj[12]={0x55,0x55,0x05,0x06,0x01,0x01,0x00};
uint8 t i;
for(i=0;i<7;i++)
{HAL_UART_Transmit (&huart4,&dj[i],1,0xfff);}
这样写对不对

img


img

去掉for,直接用 HAL_UART_Transmit (&huart4,dj,7,0xfff); 要考虑可能存在的丢包和断包问题,发送7字节,接收方可能接收1次或者多次才能收满这7字节。

丢包主要考虑底层缓存空间太小,接收不及时数据被覆盖掉。可以测试一下你原来for循环单次1一字节,每次发送增加点延时。

使用hal_uart_transmit直接发送这个数组就行。你用串口助手先检测一下。一般是你配置出错了。不是发送的问题

#include "stm32f1xx_hal.h"
#include "main.h"
#include "string.h"
UART_HandleTypeDef huart2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void) {HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
uint8_t data[2] = {0x12, 0x34};
HAL_UART_Transmit(&huart2, data, 2, 1000);
while (1) {}}

“该回答引用ChatGPT"

这段代码的目的是通过串口发送一个 16 进制数组 dj。

代码中定义了一个 16 进制数组 dj,其元素依次为 0x55, 0x55, 0x05, 0x06, 0x01, 0x01 和 0x00。

然后,通过一个 for 循环,从 0 开始遍历数组,到 6 结束。每次循环,通过调用 HAL_UART_Transmit 函数,向串口发送一个元素,参数分别是:
/
&huart4:串口句柄。
&dj[i]:要发送的元素的地址。
1:发送的数据长度,即 1 个字节。
0xfff:发送超时时间,即 0xfff 毫秒。
/
整个循环将遍历整个数组,并逐个元素发送到串口。

这样写是对的,按顺序向串口发送了一个16进制字节数组,dj[0] 到 dj[6]。注意在每次循环内,需要将 &dj[i] 作为数据地址传递给 HAL_UART_Transmit 函数,这样可以发送一个字节的数据。

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

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

该回答引用ChatGPT,如果有帮助到您请点个采纳
您的代码是在基于HAL库的STM32上使用串口发送16进制数组。

您可以使用HAL_UART_Transmit函数发送数据,其第一个参数是UART句柄,第二个参数是要发送的数据数组,第三个参数是要发送的数据的长度,第四个参数是超时时间。

您的代码实际上循环7次,并在每次循环中发送dj[i]中的一个字节,即dj[0]到dj[6]。

请注意,您还需要对UART句柄进行初始化,以使串口工作正常,并确保接收端能够正确接收串口数据。