
【嵌入式外设精学】Day09UART波特率、帧格式、乱码排查今天解决115200 怎么配为什么会乱码有效速率怎么估目录问题 2. 原理 3. 代码 4. 误区 5. 自测 6. 答案1. 问题串口助手收的是乱码短数据对一长包就错2. 原理2.1 没有时钟线UART 靠双方约好同一位时间。常用8N1空闲1 | 起始0 | 8个数据位 | 停止1一帧约10 个 bit含起止。2.2 波特率115200 表示每秒约 11.5 万 bit。有效“字节速率”大约是波特率除以 10115200 → 约 11.5KB/s量级还要扣协议头。2.3 为什么乱码两端波特率/格式不一致最常见TX/RX 没有交叉、没共地时钟误差大包越长越容易错误差会累计电平不匹配2.4 小数分频芯片用分频得到位时间有时不能整除会有小误差。一般单字节能容忍长包、高波特、用不准的内部 RC 时容易踩坑。通信关键路径更推荐晶振HSE。3. 代码示例#includestm32f4xx.hvoiduart1_init_115200(void){USART_InitTypeDef u;GPIO_InitTypeDef g;NVIC_InitTypeDef n;g.GPIO_PinGPIO_Pin_9|GPIO_Pin_10;g.GPIO_ModeGPIO_Mode_AF;g.GPIO_OTypeGPIO_OType_PP;g.GPIO_SpeedGPIO_Speed_2MHz;g.GPIO_PuPdGPIO_PuPd_UP;GPIO_Init(GPIOA,g);u.USART_BaudRate115200u;u.USART_WordLengthUSART_WordLength_8b;u.USART_StopBitsUSART_StopBits_1;u.USART_ParityUSART_Parity_No;u.USART_HardwareFlowControlUSART_HardwareFlowControl_None;u.USART_ModeUSART_Mode_Rx|USART_Mode_Tx;USART_Init(USART1,u);USART_Cmd(USART1,ENABLE);USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);n.NVIC_IRQChannelUSART1_IRQn;n.NVIC_IRQChannelPreemptionPriority2;n.NVIC_IRQChannelSubPriority0;n.NVIC_IRQChannelCmdENABLE;NVIC_Init(n);}voiduart1_putc(charc){while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)RESET){}USART_SendData(USART1,(uint16_t)c);}中断收字节进缓冲解析见 Day11voidUSART1_IRQHandler(void){if(USART_GetITStatus(USART1,USART_IT_RXNE)!RESET){uint8_tb(uint8_t)USART_ReceiveData(USART1);uart_rx_push(b);}}4. 常见误区误区正解波特率每秒字节数还有起止位约打 89 折TX 接 TXTX 接对方 RX乱码一定是程序先查线、地、波特率可以不共地共地是基本条件5. 自测8N1、115200100 字节大约多久排查乱码顺序6. 答案100×10 / 115200 ≈89ms量级。波特率/格式一致 → 交叉线 → 共地 → 时钟误差/线长。作者shuifanyu标签UART串口波特率