转自: http://m.newsmth.net/article/Circuit/298517?p=1

上次好像回答过这个问题 http://www.newsmth.net/nForum/#!article/Circuit/297192?au=feiy 还没解决?

下面所提到的问题,和上面链接中的问题(热插拔才可通信),其实是同一个问题, 可能的原因是

  1. 232收发器芯片产生电压的那些小电容的数值是和数据手册上不太一致
  2. 232收发器芯片和232插座之间缺少串联保护电阻,或保护电阻数值太小。
  3. 原来的232收发器芯片可能部分失效了

如果1和2都已经做到了,将232收发器芯片的RXD输入管脚和插座RXD之间的串联保护 电阻加大,比如换成1K或10K的,应该就可以了。如果还不成,就换个232芯片吧。

多说几句原因吧(以前碰到过该问题所以就研究过):

在不通信的时候,PC串口的TXD管脚会输出-5V左右的电压,于是在开发板上的232收 发器芯片的RXD对应的输入管脚(R1IN或R2IN)上维持着-5V左右的电压。当开发板断电 时,232收发器芯片的电源管脚没有电压,V+/V-管脚也没有电压,唯独RXD输入管脚 (R1IN或R2IN)上维持这一个-5V左右的电平,不用多说就能明白这意味着什么。假如 习惯上每次给开发板断电后却让串口依旧和 PC保持连接,这意味这232收发器芯片 长期承受着RXD输入管脚-5V但同时又让电源管脚和V+/V-为零电平,特别当PC的TXD 输出维持这超过-5V甚至超过-6V的时候,久而久之,这颗芯片就会渐渐部分失效或 全部失效,于是通信就失败了。所以换一个芯片往往就可以解决这个问题。

每次先打开串口程序而没有通信的时候,-5V或以下的电压就加在TXD管脚上了,如果 此时开发板断电但是却接着串口,就相当于初始状态是先让232收发器芯片处于上述 异常的工作条件,然后再给开发板上电的时候,就可能出现通信不成功的状况。

这个时候当带电拔插一下串口,相当于让232收发器芯片的RXD输入管脚去掉-5V电压, 而保持其电源管脚、V+、V-管脚的电压,这是232芯片回复到正常的工作条件。如果 232收发器芯片的失效程度还不深(不会深度“抱死”),这个时候通信就可能恢复正常。

而如果重新启动一下串口程序,初始化过程会改变PC串口TXD的输出电压,让232收发 器芯片的RXD管脚有一个恢复0电平的过程,这和上面拔插串口以便在RXD管脚上临时 去掉一下-5V的电平,是一个效果。

另外,将那个RXD的串联电阻改大,起的作用就是在232收发器芯片的电源管脚掉电 的时候,从RXD输入管脚(R1IN和R2IN)的输入电压被限流了,于是对芯片的损坏就不 那么大,或者说进入故障异常的程度不会那么深,当开发板上电(也就是232收发器 芯片上电)的时候,就比较容易恢复正常状态。

通过实验的方法也可以验证上述分析。当开发板断电但是串口依然接着PC的时候,测 量232收发器芯片对应于RXD输出到MCU的那个管脚,会发现该管脚的电压为显著的-0.x 伏(被MCU的管脚给限制了所以不会很低,但是往往会有个-0.3或-0.5V)。当给开发板 上电后出现了上述故障时,测量一下232收发器芯片对应RXD输出到MCU的那个管脚的 电平,你会发现该管脚一直维持为0电平,而不是期望的+3.3V/5V(取决于232收发器 芯片的电源大小),这就是RXD输出管脚好像被“抱死”了。而一旦热插拔或重新初始 化PC的串口后,会看到那个管脚的电平就回复到+3.3/5V,可以正常通信了。

所以,两个建议:

  1. 当开发板断电后,应该也拔掉串口线,否则232收发器芯片就可能长期处于异常的 电平条件。

  2. 从串口插座输入进来的信号,到232收发器芯片管脚之间应该串联较大的电阻,而 不是类似于TXD信号那样接个5.1或22欧的小电阻。我比较习惯于用1K或470欧。

    当然,这个串联电阻也不能太大,也要兼顾考虑串口线上的压降(比如线比较细或长)。

标签: uart

添加新评论