STM32HAL每次串口接收的数据存入uint8_t AtRxBuffer[512]中,每次接收的数据长度小于100,如何使每次接收的数据从数组的0位开始保存
时间: 2023-08-18 10:06:07 浏览: 74
接收串口数据并将数据保存
4星 · 用户满意度95%
你可以使用一个全局变量 `uint16_t AtRxBufferIndex` 来记录 `AtRxBuffer` 数组中下一个可用的位置。每次接收到数据时,将数据存储到 `AtRxBuffer[AtRxBufferIndex]` 处,然后将 `AtRxBufferIndex` 加上接收到的数据长度,即 `AtRxBufferIndex += len`,其中 `len` 为本次接收到的数据长度。这样,下次接收数据时,就会从 `AtRxBuffer[AtRxBufferIndex]` 开始存储,实现了每次接收的数据从数组的 0 位开始保存。
具体实现可以参考以下伪代码:
```c
// AtRxBuffer 声明为全局变量
uint8_t AtRxBuffer[512];
uint16_t AtRxBufferIndex = 0;
// 接收数据的回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef* huart)
{
// 获取接收到的数据长度
uint16_t len = huart->RxXferSize - huart->RxXferCount;
// 将数据存储到 AtRxBuffer 数组中
for (int i = 0; i < len; i++) {
AtRxBuffer[AtRxBufferIndex++] = huart->pRxBuffPtr[i];
}
}
```
需要注意的是,当 `AtRxBufferIndex` 达到数组的末尾时,需要进行处理,可以将 `AtRxBufferIndex` 重置为 0,重新从数组的 0 位开始存储数据。
阅读全文