# UART：USART2 上溢出错误（ORE 标志已设置）

- **ID:** `embedded/uart-overrun-error-sr-ore`
- **领域:** embedded
- **类别:** runtime_error
- **错误码:** `USART_SR_ORE`
- **验证级别:** ai_generated
- **修复率:** 85%

## 根因

UART 接收数据寄存器未能在下一个字节到达前被读取，导致数据因溢出而丢失。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| STM32Cube FW_F4 V1.27.1 | active | — | — |
| STM32Cube FW_H7 V1.11.0 | active | — | — |
| Keil MDK-ARM 5.38 | active | — | — |

## 解决方案

1. ```
   Enable DMA for UART reception: HAL_UART_Receive_DMA(&huart2, rx_buffer, BUFFER_SIZE); This offloads data transfer from CPU.
   ```
2. ```
   Implement double-buffering with interrupt: use HAL_UARTEx_ReceiveToIdle_DMA to capture data without overrun.
   ```
3. ```
   Increase interrupt priority of UART handler to ensure preemptive reading.
   ```

## 无效尝试

- **Increase UART baud rate to match incoming data speed** — Overrun occurs because the CPU cannot read data fast enough; higher baud rate makes the problem worse, not better. (90% 失败率)
- **Disable UART interrupt and poll in main loop** — Polling without interrupt may miss data entirely or still overrun if main loop is slow. (70% 失败率)
