L0用内部RC跑UART时串口老出错
想省个晶振结果串口就不准,发出去上位机经常接收乱码。UART配上DMA还容易出错,RC时钟确实不稳。 RC振荡器偏差大,波特率超出容忍范围了吧。 我试过用内部RC跑9600,误码率也挺高的。 要不加个外部晶振?稳定不少。 用示波器抓抓TXD,看波形有没有毛刺。 HAL_UART_Init里面的时钟源要确认清楚。 内部RC得用工厂校准值,不然误差更大。 用低速串口比如4800试试会不会好点。 我之前RC震荡加了温度补偿才稳定些。 建议直接开LSE,用它当系统时钟更靠谱。 STM32L0的内部RC振荡器默认精度为±2%,但在温度变化或电压波动时,频率可能漂移,导致UART波特率误差超过±3%,引发通信错误。 硬件连接问题? 缩短UART信号线长度,避免平行走线。 在MCU电源引脚附近添加0.1μF陶瓷电容和10μF钽电容,降低电源噪声。 可能未处理UART错误标志如帧错误、噪声错误、溢出错误。 可能未处理UART错误标志如帧错误、噪声错误、溢出错误。 启用RCC_CR寄存器中的HSICAL和HSITRIM位,或使用HAL_RCCEx_PeriphCLKConfig函数配置时钟校准。 用外部晶振。 手动校准,通过读取RCC_ICSCR寄存器中的HSITRIM值,结合实际波特率误差调整校准值。
页:
[1]