
问题产生 最近学习了一下32的串口通信,串口配置还是很简单的,不过后面串口调试助手上面出现的乱码。很让人头疼。 当然第一时间去百度寻求解决办法。 先排查这两个问题 1.USB转串口的问题 解决方法: USB转串口坏了的话,换一个好的就没事了。(ps:这个出现的概率比较小) 2.波特率不同步的问题 出现乱码,首先检查一下,串口助手的波特率是不是和程序设置的是一样的,如果一样的话出现乱码,参考下面的解决方法。 外部晶振对串口的影响 stm32的串口使用的是外部高速时钟的时钟源 串口外设是挂在APB总线上的,一般用于低速外设,它是AHB总线时钟分频所得。 这样设计分频是为了降低低速外设的开关损耗。 然而AHB总线的时钟又源自于高速时钟源。高速时钟源可以是高速内部时钟、高速外部时钟、高速内部或外部时钟PLL倍频所得。 所以最终串口的波特率受高速时钟的影响。 ![]() 问题解决 首先找到自己板子上外部晶振,并确定它的大小。 ![]() ▲ 博主板子上晶振是8Mhz 在官方标准库中,外部时钟频率配置默认 25MHz 的晶振。 而我们需要将外部时钟频率配置成适合自己板子的。 找到 stm32f4xx.h ,在 .h 文件120行左右的地方,默认是这样的:
▲ 默认25Mhz 下面只需定义一下自己开发板的外部时钟源频率即可:(加个宏定义)
附:如果串口助手没有收到任何东西,请检查连接 TX 、RX 端子的杜邦线是否松动。 总结 对于 stm32 的 F1 和 F4 等系列,如果出现串口通信出现乱码的问题,都可以尝试使用上述方法解决。 自己开发板上的外部晶振要了解,如果某一总线的时钟来源于外部时钟源,自己使用的外设恰好挂靠在该总线上,利用官方标准库,一定要将 stm32f4xx.h 文件中相关配置加以修改。 ———————————————— 版权声明:AXYZdong |
【STM32U3评测】实现双通道串口通信系统
OpenBLT移植到STM32F405开发板
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
【NUCLEO-WB09KE评测】STM32WB09KE的内部BootLoader使用
11111111111111111111111111111111111
STM32芯片ISP串口程序一键下载—FlyMcu
如何使用CubeMX实现STM32的串口通信以及对printf等函数的重定向
基于STM32串口中断之缓存区溢出卡死经验分享
基于STM32 Azure USBx 开发的经验分享
NUCLEO-U545RE-Q评测】4. 串口实用收发测试