STM32串口接收固件库不使用中断接收大于16位的字符串
时间: 2023-07-29 20:06:20 浏览: 100
如果你不想使用中断接收大于16位的字符串,你可以使用固件库提供的函数`HAL_UART_Receive()`来接收串口数据。示例代码如下:
```c
#define MAX_BUFFER_SIZE 100
uint8_t buffer[MAX_BUFFER_SIZE];
uint8_t index = 0;
int main()
{
// 初始化串口
// ...
while(1)
{
HAL_StatusTypeDef result = HAL_UART_Receive(&huart, &buffer[index], 1, 1000);
if(result == HAL_OK) // 有数据接收到
{
if(index >= MAX_BUFFER_SIZE - 1) // 缓冲区已满
{
index = 0;
memset(buffer, 0, MAX_BUFFER_SIZE);
}
else if(buffer[index] == '\n') // 收到结束符
{
// 处理接收到的字符串
// ...
index = 0;
memset(buffer, 0, MAX_BUFFER_SIZE);
}
else // 继续接收
{
index++;
}
}
// 主循环
// ...
}
}
```
在上面的代码中,使用了`HAL_UART_Receive()`函数接收串口数据,并将数据存储到一个缓冲区中。如果缓冲区已满,则清空缓冲区。如果收到了结束符,则处理接收到的字符串并清空缓冲区。由于`HAL_UART_Receive()`函数是阻塞的,因此你需要在主循环中不断调用这个函数来接收串口数据。
阅读全文