我正在编写一个串行端口应用程序,通过串口与蓝牙模块通信。我发送给设备的第一个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);
}
}
不确定我在这里缺少什么。
答案 0 :(得分:1)
感谢您的回复。我发现了这个问题。实际上我不得不使用myport.Write而不是myport.WriteLine。我删除了myport.NewLine这一行并添加了" \ r"对每一个命令。现在设备按预期响应。至于DTR和RTS,设备根据供应商不要求它们
答案 1 :(得分:0)
不确定这是否解决了您的问题,但我注意到您没有启用流量控制(例如myport.RtsEnable = false; myport.DtrEnable = false;
)。
您是否检查过文档以确保蓝牙模块不需要它?通常,115kbps及更高速率的设备需要流量控制。
要检查的另一件事是NewLine常量。您将其设置为sys默认值,可能是Cr + Lf。确保模块需要。