STM32的RXD能收到自己发出来的东西

发布时间 2023-05-04 20:38:03作者: Suzkfly

  遇到一个STM32的串口相关的问题,TXD会每隔500ms往外发一次数据,并且会根据RXD接收到的数据做出反应。这个功能我之前是调过的,表现是正常的,这次调就遇到问题了,那么很自然的想到这次和上次的区别。区别就是上次调试用的是JLink自带的串口,它发不出校验位,这我在另一篇博客里说了。但是我检查了并不是校验位的问题。

  当我在线仿真的时候,我发现一个现象,接收中断里会不停的收到数据,而且收到的数据和发出去的数据非常相似(并不完全一样),于是我拿示波器量了一下RXD引脚,发现波形是这样的:

  

  这个波形幅度是1V左右,怪不得接收端能收到数据,那为什么之前用jlink自带的串口就没发现这个问题呢,我用jlink自带的串口量了一下,如下图:

  

   这个幅度是0.5V左右,也就是说之前用jlink的串口没收到自己发出来的数据是因为幅度低。

  那问题来了,这个波形是从哪来的呢?很大可能性是感应上去的,并且我发现串口上的电平在空闲时期是低电平,正常应该是高电平,查看代码发现设置的是浮空输入,但是没有设置上下拉。我串口是用导线外接的,并且和辫子一样缠绕起来了,如下图:

  

   把线解开就有明显改善,最后把程序代码改一下,设置成上拉模式,问题就引刃而解。

  总结一下:

  这个问题的出现要符合多个条件:

  1、TXD和RXD要用导线接出来,并且缠绕在一起;

  2、使用的USB转串口要抑制不了感应出来的电平;

  3、程序中要将RXD设置成浮空输入模式,而且不上拉;

  4、TXD还要不停的往外发数据。

  硬件调试经常会遇到一些奇葩问题,这个时候就需要丰富的经验以及科学的方法去解决。