Naze32 rev6使用HAL库开发UART输出乱码LL库正常问题求助
问题原因
LL库可正常运行说明硬件、串口工具(Putty)配置无问题,HAL库输出乱码的核心原因是串口波特率计算依赖的总线时钟频率和预期不符,其次可能为GPIO配置错误。
排查解决步骤
- 检查
SystemClock_Config函数配置是否正确
naze32 rev6搭载的STM32F103主控最高主频为72MHz,串口波特率计算完全依赖外设挂载的总线时钟频率,如果时钟配置未开启PLL倍频,仍使用默认内部8MHz RC时钟,就算代码中填写的波特率为115200,实际输出的波特率也会出现大幅偏移,最终产生乱码。可在HAL库初始化串口后读取USART1->BRR寄存器的值,和LL库中固定配置的0x1D4C对比,二者不一致即可确认是时钟配置错误。 - 验证USART1的GPIO配置是否正确
检查MX_GPIO_Init中PA9(USART1_TX)的配置是否为复用推挽输出,上下拉模式是否和硬件匹配,若配置为普通推挽输出或开漏输出,会导致串口信号电平异常,出现乱码。 - 确认串口参数是否匹配
你当前HAL库的UART配置为115200波特率、8数据位、1停止位、无校验、无流控,和LL库配置匹配,确认是否存在波特率参数填写错误这类笔误。 - 临时验证时钟问题
若暂时无法确认时钟配置是否正确,可将HAL库串口波特率改为9600,再用Putty对应配置接收,如果可正常收到数据即可100%确认是系统时钟配置错误,重新配置PLL将主频倍频到72MHz即可解决问题。
内容的提问来源于stack exchange,提问作者VarunKoganti
相关产品推荐
相关产品推荐

