2

我正在编写一个串口应用程序来通过串口与蓝牙模块通信。我发送到设备的第一个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);
    }
}

不知道我在这里缺少什么。

4

2 回答 2

1

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

于 2013-03-06T00:46:22.443 回答
0

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

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

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

于 2013-03-05T18:35:51.330 回答