STM32HAL串口中断接收函数接收字符串,该字符串没有结束符
时间: 2023-08-20 17:07:14 浏览: 113
如果接收的字符串没有结束符,你可以在接收到最后一个字符后,手动添加一个结束符,例如字符串末尾添加一个'\0'。
在串口接收中断函数中,你可以使用一个全局变量来记录接收到的字符数量,当接收到的字符数量达到预期长度时,手动添加一个结束符。例如:
```c
#define MAX_STR_LEN 20
char received_str[MAX_STR_LEN];
uint8_t received_len = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
// 将接收到的字符存入接收缓冲区
received_str[received_len] = huart->Instance->DR & 0xff;
received_len++;
// 如果接收到了预期长度的字符,手动添加结束符
if (received_len == MAX_STR_LEN) {
received_str[MAX_STR_LEN - 1] = '\0';
}
// 继续等待下一个字符的接收
HAL_UART_Receive_IT(huart, &received_str[received_len], 1);
}
```
在上述代码中,`received_str` 是接收缓冲区,`received_len` 是已经接收到的字符数量。当接收到一个字符后,将其存入接收缓冲区,并将已经接收到的字符数量加一。如果接收到的字符数量达到了预期长度 `MAX_STR_LEN`,则手动在字符串末尾添加一个结束符。
需要注意的是,在串口接收中断函数中,需要调用 `HAL_UART_Receive_IT` 函数来继续等待下一个字符的接收。
阅读全文