要先对开发板上电, 再打开串口超级终端, 串口通信才可成功 (转
但是另外一块开发板却没有这个问题。
这一般是什么原因造成的?
谢谢!
先开串口是不是进入在线编程状态了?
上次好像回答过这个问题
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欧。
当然,这个串联电阻也不能太大,也要兼顾考虑串口线上的压降(比如线比较细或长)。
Mark! 有道理!
MK!
MK!
Mark!