// 中断接收:每收1字节进环形缓冲
#define RB_SIZE 256
uint8_t rb[RB_SIZE]; uint16_t rd=0, wr=0;
void USART1_IRQHandler(void){
if(USART1->SR & USART_SR_RXNE){
uint8_t b = USART1->DR;
uint16_t nw = (wr+1) % RB_SIZE;
if(nw != rd){ rb[wr]=b; wr=nw; } // 满则丢
}
}
// 主循环解析:
while(rd != wr){
uint8_t c = rb[rd]; rd = (rd+1) % RB_SIZE;
/* 按帧头0xAA 0x55 ... 解析 */
}