日期:2014-05-19  浏览次数:20689 次

SerialPort 接收不到数据,搞了一晚上了,求高手帮助(串口通信)
最近在做一个手机短信收发软件,在网上找了些源码,自己调试了半天,总是发送AT指令后读不出数据:以下是我的一个小例子:请问是哪里不行啊。
SerialPort   s_port   =   new   SerialPort( "COM1 ",   19200,   Parity.None,   8,   StopBits.One);
s_port.Open();
s_port.Write( "AT+CMGR=1\r ");
System.Threading.Thread.Sleep(1000);   //   延迟指定时间
string   temp   =   s_port.ReadExisting();
MessageBox.Show(temp);

我使用的手机是:西门子3508,连接到COM1上,手机连接肯定没有问题:因为可以用串口通信调试程序调试。
同样的AT指令放到串口调试程序中可以返回数据,可是这里读出来总是为空
不管有什么方法,延时,注册SerialPort1_DataReceived事件,用事件读也没有数据。
请问这是怎么一回来啊。我搞了一晚上了,被卡在这里了,请求高手帮助啊。。。。

------解决方案--------------------
端口号改为57600行不行
------解决方案--------------------
Parity是1又能不?....
------解决方案--------------------
没 用过 SerialPort
不过我这倒是有个 写好的函数
------解决方案--------------------
好像用AT指令时,波特率都设为9600,记得是这样
另外,你的AT指令在超级终端里输入后会有数据返回吗?
------解决方案--------------------
记错了,不是9600
刚看了我手头上的一份文档(深圳一家做Modem的公司提供的),波特率是115200
------解决方案--------------------
System.Threading.Thread.Sleep(1000);
改这个时间,换成2000或者3000等试试,串口会话有延迟,我以前也遇到这样的问题.
------解决方案--------------------
你用DataReceived事件绑定后,事件能触发吗?
如果能触发,就说明串口中一定有数据

另外,这个ReadExisting方法我没用过,我一般用Read方法,返回一个byte[]数组
可能还跟你的编码方式有关
------解决方案--------------------
另外,延时这个方法...没什么用,我觉得 :)
------解决方案--------------------
你先不要用Sleep,先用DataReceived事件试试看,可能是那个串口发送也是异步的,你一sleep,就卡在那里了,结果还没发就收了
------解决方案--------------------
try this
HComPort.BaudRate = 921600;//set to your using
HComPort.DtrEnable = true;
HComPort.RtsEnable = true;
---------------------------
while (ATresult == ATstatus.WaitingResponse)
{
Thread.Sleep(100);
if (HComPort.BytesToRead > 0)
{
ATRx = ATRx + HComPort.ReadExisting();
if (TestOK(ATRx)) ATresult = ATstatus.OK;
if (TestERROR(ATRx)) ATresult = ATstatus.Error;
}
if (TimerCount > 30) { ATresult = ATstatus.TimingOut;}
else { TimerCount++; };
}


------解决方案--------------------
学习