繁体   English   中英

STM32 - Strstr 函数无法按预期工作(UART)

[英]STM32 - Strstr function does not work as I expected (UART)

我正在尝试在通过 UART 接收的另一个字符串中查找特定字符串。 但是,我的函数返回 0,尽管字符串不在 uart 接收的字符串中。 这是我的功能:

bool GetCommand(UART_HandleTypeDef *huart, char *command, char *getCommand, uint8_t size) {
    char *ptr;
    if (HAL_UART_Receive_IT(huart,command,size) == HAL_OK) {
        ptr = strstr(command,getCommand);
    }
    if (ptr) {
        return 1;
    } else {
        return 0;
    }
}

程序与 gcc 一起工作,但是当我尝试使用 Keil 时它没有按我预期的那样工作。 你能帮忙解决这个问题吗?

你的问题不是函数strstr()

这是你收集命令的方式

if(HAL_UART_Receive_IT(huart,command,size) == HAL_OK) {
    ptr = strstr(command,getCommand);
}

HAL_UART_Receive_IT是一个非阻塞函数,所以配置好 USART 后直接返回。 你的命令数组中的这个字符串此时是未定义的。

使用HAL_UART_Receive()HAL_UART_RxCpltCallback()

试试这个:在目标选项中选择 microlib

看这张图片

微库选项

在使用内存之前等待 UART 完成。 不要使用未初始化的变量。 除了其他答案,您还可以轮询 HAL_UART_State 直到外设停止接收。

bool GetCommand(UART_HandleTypeDef *huart, char *command, char *getCommand, uint8_t size) {
    if (HAL_UART_Receive_IT(huart,command,size) != HAL_OK) {
        // handle error
        return 0;
    }

    // wait until UART stops receiving
    while ((HAL_UART_State(huart) & HAL_UART_STATE_BUSY_RX) == HAL_UART_STATE_BUSY_RX) {
         continue;
    }

    return strstr(command, getCommand) != NULL;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM