1. 从诡异现象说起:串口助手有数据,但全是0x00
最近我自己画了一块STM32F103C8T6的最小系统板,兴冲冲地焊好元件,烧录了一个最简单的串口打印程序。代码里就一行 printf("Hello World\r\n");,波特率设的115200,满心期待地在串口助手里看到熟悉的问候。
结果呢?串口助手接收区确实在滚动,提示有数据进来,但显示区域一片空白。我心里咯噔一下,寻思是不是编码问题?赶紧把显示模式从“文本”切换到“十六进制”。这下有东西了,但更让人头疼:刷屏的全是 00 00 00 00。

这个现象非常典型,也极具迷惑性。它明确告诉我们两件事:第一,物理链路是通的,STM32的TX脚确实在努力地“说话”,发出了电平变化;第二,说的话完全不对,发出的根本不是我们编程时设定的数据字节,而是一连串的逻辑0。
我当时的第一反应和大多数朋友一样:是不是波特率对不上?赶紧检查了代码配置和串口助手设置,都是115200,没错。换了几个不同的串口助手软件(XCOM、SSCOM、甚至跨平台的CuteCom),现象一模一样,排除了软件问题。接着又检查了接线,TX、RX、GND,再三确认没有接反、没有虚焊,GND也牢牢地共在一起。用万用表量了电压,高电平3.3V,低电平0V,看起来也没问题。
常规的“三板斧”查完,问题依旧。这时候,就需要请出更专业的工具来“看”一下,单片机的串口到底发出了什么样的电信号。
2. 逻辑分析仪:让数据波形“开口说话”
当代码层面和基础硬件检查都找不到问题时,逻辑分析仪就成了我们硬件工程师的“眼睛”。我用的是个8通道的简易逻辑分析仪,把它夹在STM32的USART1_TX(PA9)引脚上,设置采样率足够高(比如24MHz),开始抓取波形。
抓到的波形如下图所示。乍一看,似乎有规律的一帧一帧信号,但仔细观察时间轴和脉冲宽度,问题就暴露了。


183

被折叠的 条评论
为什么被折叠?



