SerialPort First Command OK。第二个命令错误

时间:2013-03-05 18:22:30

标签: c# serial-port

我正在编写一个串行端口应用程序,通过串口与蓝牙模块通信。我发送给设备的第一个At命令运行正常,我收到模块版本的响应。所有后续命令都会因ERROR响应而失败。

部分代码在这里:

namespace PhoneApp
{
    public partial class Form1 : Form
    {
        //SerialPort myport = OPenPort.OpenIt();
        SerialPort myport = new SerialPort();


        public Form1()
        {
            InitializeComponent();
            myport.PortName = "COM3";
            myport.BaudRate = 115200;
            myport.Parity = Parity.None;
            myport.DataBits = 8;
            myport.StopBits = StopBits.One;
            myport.NewLine = System.Environment.NewLine;
            myport.ReadTimeout = 500;
            myport.WriteTimeout = 500;
            myport.DtrEnable = false;
            myport.RtsEnable = false;
            myport.WriteBufferSize = 4096;
            myport.ReadBufferSize = 4096;
            myport.Handshake = Handshake.None;
            myport.Encoding = System.Text.Encoding.ASCII;

            if (!myport.IsOpen)
            {                
                myport.Open();
            }

            calling.Visible = false;
            myport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            mycommand.Text = @"AT+BGVER";     

发送命令的按钮。每次命令后,设备都需要换行。

private void button2_Click(object sender, EventArgs e)
{
    try
    {               
        myport.WriteLine(mycommand.Text.Trim());
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

不确定我在这里缺少什么。

2 个答案:

答案 0 :(得分:1)

感谢您的回复。我发现了这个问题。实际上我不得不使用myport.Write而不是myport.WriteLine。我删除了myport.NewLine这一行并添加了" \ r"对每一个命令。现在设备按预期响应。至于DTR和RTS,设备根据供应商不要求它们

答案 1 :(得分:0)

不确定这是否解决了您的问题,但我注意到您没有启用流量控制(例如myport.RtsEnable = false; myport.DtrEnable = false;)。

您是否检查过文档以确保蓝牙模块不需要它?通常,115kbps及更高速率的设备需要流量控制。

要检查的另一件事是NewLine常量。您将其设置为sys默认值,可能是Cr + Lf。确保模块需要。