HAL UART接收数据及条件判断代码分析与优化

以下代码段展示了如何使用HAL库进行UART通信,并根据接收到的数据进行条件判断:cHAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveDatacolor, 1);HAL_Delay(5000);HAL_UART_Transmit(&huart1, (uint8_t*)receiveDatacolor, 1, HAL_MAX_DELAY);// int color = (int)receiveDatacolor;// recognizeColor2(color, b);while (1) { if (receiveDatacolor == a) { HAL_UART_Transmit(&huart3, (uint8_t*)arm1, strlen(arm1), HAL_MAX_DELAY);

    break;    } else {        // 识别程序        HAL_UART_Transmit(&huart1, (uint8_t*)op3, strlen(op3), HAL_MAX_DELAY);        HAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveDatacolor, 1);        HAL_Delay(5000);        HAL_UART_Transmit(&huart1, (uint8_t*)receiveDatacolor, 1, HAL_MAX_DELAY);    }}

这段代码的目标是:

  1. 通过UART接收数据。2. 判断接收到的数据是否与变量 a 相等。3. 如果相等,则通过另一个UART设备发送数据。4. 如果不相等,则执行识别程序。

然而,这段代码存在一些问题:

问题一:指针比较

if (receiveDatacolor == a) 语句中,直接比较了指针 receiveDatacolor 和变量 a。这会导致错误的结果,因为比较的是指针地址而不是指针指向的内容。

解决方法:

使用 strcmp 函数比较字符串内容:cif (strcmp(receiveDatacolor, a) == 0) { // ...}

问题二:字符串转换

在注释掉的代码中,尝试将指针 receiveDatacolor 直接转换为整数 color。这会导致错误,因为指针不能直接转换为整数。

解决方法:

使用 atoi 函数将字符串转换为整数:cint color = atoi(receiveDatacolor);

问题三:数据接收延时

在识别程序中,发送 op3 数据后,没有等待足够的时间接收数据,就直接发送 receiveDatacolor。这可能导致数据接收不完整。

解决方法:

在发送 receiveDatacolor 之前添加适当的延时:cHAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveDatacolor, 1);HAL_Delay(5000); // 等待接收数据HAL_UART_Transmit(&huart1, (uint8_t*)receiveDatacolor, 1, HAL_MAX_DELAY);

优化后的代码:cHAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveDatacolor, 1);HAL_Delay(5000);HAL_UART_Transmit(&huart1, (uint8_t)receiveDatacolor, 1, HAL_MAX_DELAY);// int color = atoi(receiveDatacolor); // 将字符串转换为整数// recognizeColor2(color, b);while (1) { if (strcmp(receiveDatacolor, a) == 0) { HAL_UART_Transmit(&huart3, (uint8_t)arm1, strlen(arm1), HAL_MAX_DELAY); break; } else { // 识别程序 HAL_UART_Transmit(&huart1, (uint8_t)op3, strlen(op3), HAL_MAX_DELAY); HAL_Delay(5000); HAL_UARTEx_ReceiveToIdle_DMA(&huart1, receiveDatacolor, 1); HAL_Delay(5000); // 等待接收数据 HAL_UART_Transmit(&huart1, (uint8_t)receiveDatacolor, 1, HAL_MAX_DELAY); }}

通过以上优化,可以解决代码中存在的问题,并提高代码的可靠性和可读性。

HAL UART接收数据及条件判断代码分析与优化

原文地址: https://www.cveoy.top/t/topic/bt2s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录