c#自己写的一个串口 可是返回值会出现返回不一样的情况

qq_34976570 2016-07-13 06:56:23
第一次
后面几次中的一次

返回的数据应该是at,但是返回的是YQB0AA==,而且第二次按发送会变
波特率硬件均没有问题
下面是发送代码主体


public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
comm.NewLine = "\r\n";
comm.RtsEnable = true;
comm.PortName = "COM3";
comm.BaudRate = 115200;
comm.DataReceived += new SerialDataReceivedEventHandler(timerReadCom_Tick);
linkCom();

}

public void linkCom()
{
//关闭时点击则后打开
try
{

comm.Open();


//timerReadCom.Enabled = true;
MessageBox.Show("串口连接成功");

}
catch(Exception ex)
{
comm = new SerialPort();//捕获到异常信息,创建一个comm的对象
MessageBox.Show(ex.Message);//显示异常信息给用户
this.Close();
}

}


//串口数据接收控制
private void timerReadCom_Tick(object sender, SerialDataReceivedEventArgs e)
{
try
{

int n = comm.BytesToRead;//记录缓存数量
byte [] buf = new byte[n];//声明一个临时数组储存当前来的串口数据
comm.Read(buf,0,n);//读取缓冲数据
builder.Remove(0,builder.Length);//清除字符串构造器的内容
//因为要访问ui资源,所以需要invoke方法同步ui。
this.Invoke((EventHandler)(delegate
{
//直接按ASC11规则转换成字符
builder.Append(Encoding.ASCII.GetString(buf));
if (builder.ToString().Length > 0)
{
//MessageBox.Show(buf.ToString());
//byte[] buf = Convert.FromBase64String(comm.ReadLine());
textBox2.Text = Encoding.ASCII.GetString(buf);
}

}));
}
catch(Exception ex)
{
MessageBox.Show("串口信息错误" + ex.Message);
}
}



//发送
private void button1_Click(object sender, EventArgs e)
{
try
{
byte[] data = Encoding.Unicode.GetBytes(textBox1.Text);
string str = Convert.ToBase64String(data);
comm.WriteLine(str);
//MessageBox.Show("数据发送成功", "系统提示");
//string SendStr = textBox1.Text + '\r';//获取要发送的数据,并且添加回车键
if (this.comm.IsOpen)
this.comm.Write(str);//发送数据
else
MessageBox.Show("串口已关闭");
Console.WriteLine("发送信息;" + str);

}
catch (Exception ex)
{
Console.WriteLine("信息发送错误:" + ex.Message);
}


}
...全文
398 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小程序员 2016-07-14
  • 打赏
  • 举报
回复
//直接按ASC11规则转换成字符 builder.Append(Encoding.ASCII.GetString(buf)); if (builder.ToString().Length > 0) { //MessageBox.Show(buf.ToString()); //byte[] buf = Convert.FromBase64String(comm.ReadLine()); textbox2.text.append(Encoding.ASCII.GetString(buf)); } 把所有接收到的都打印出来看看,感觉应该是接收出问题
楚狂歌 2016-07-14
  • 打赏
  • 举报
回复
发byte数组试下
巴士上的邂逅 2016-07-14
  • 打赏
  • 举报
回复
引用
string str = Convert.ToBase64String(data); comm.WriteLine(str); //MessageBox.Show("数据发送成功", "系统提示"); //string SendStr = textBox1.Text + '\r';//获取要发送的数据,并且添加回车键 if (this.comm.IsOpen) this.comm.Write(str);//发送数据 else MessageBox.Show("串口已关闭");
感觉发送数据怪怪的。 改成comm.Write(data,0,data.Length);试试
qq_34976570 2016-07-14
  • 打赏
  • 举报
回复
波特率没有问题 ,在聂小猛(丁丁)的串口程序上就是用的115200
巴士上的邂逅 2016-07-14
  • 打赏
  • 举报
回复
波特率问题?
qq_34976570 2016-07-14
  • 打赏
  • 举报
回复
另外第一次发送和第二次发送不一样的问题是没有设置时延,只要在接受数据之前加上Thread.sleep(200)停上几百毫秒就可以了
qq_34976570 2016-07-14
  • 打赏
  • 举报
回复
谢谢各位的建议 最后调试成功了 主要问题是发送的代码太乱了 最后发一下成功的代码
string str = textBox1.Text + '\r';//获取要发送的数据,并且添加回车键
                if (this.comm.IsOpen)
                    this.comm.Write(str);//发送数据
                else
                   MessageBox.Show("串口已关闭");
                Console.WriteLine("发送信息;" + str);
qq_34976570 2016-07-13
  • 打赏
  • 举报
回复

第二张图片发错了

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧