**关键词**:STM32、串口通信、不定长指令、标准库、HAL库
---
## 一、场景与痛点
实际应用中,设备常需通过串口接收**不定长指令**(如`"A123!n"`)。这类指令的难点在于:
1. **长度不确定**:无法预知数据包大小
2. **实时性要求高**:需快速响应避免数据堆积
3. **协议多样性**:不同设备可能使用不同结束符(`!`/`n`等)
本文将提供一种实现方案设立一个指定的结束为(标准库与HAL库),并附完整代码解析。
---
## 二、标准库实现方案
### 1. 代码实现(带详细注释)
```c
/* 全局变量定义 */
uint8_t ch[20]; // 接收缓冲区
uint8_t v = 0; // 缓冲区索引
float ht = 25.5; // 示例温度值(整数部分)
float lt = 0.3; // 示例温度值(小数部分)
void DEBUG_USART_IRQHandler(void) {
if(USART_GetITStatus(DEBUG_USARTx, USART_IT_RXNE) != RESET) {
uint8_t ucTemp = USART_ReceiveData(DEBUG_USARTx); // 读取单字节
/* 回显测试(可选)