C# 串口16进制发送 每次接收只能收到2个字节 SerialDataReceivedEventHandler只触发了2次

renbin5566 2018-08-26 04:52:30
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
string dataout;
string datain;
int count2=0;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string str_t;
string textboxvalue;
int textl1,textl2;
int i=0;
byte[] buffer = new byte[1];
//serialPort1.DiscardInBuffer();
//serialPort1.DiscardOutBuffer();
if (!serialPort1.IsOpen)
{
MessageBox.Show("请打开串口!");
return;

}
if (Hex_Mode_T.Checked)
{

textboxvalue = textBox1.Text.Replace(" ","");
textl1 = textboxvalue.Length;
textl2 = textboxvalue.Length % 2;

for (i = 0; i < ((textl1-textl2)/2); i++)
{
str_t = textboxvalue.Substring(2 * i, 2);



buffer[0] = Convert.ToByte(str_t, 16);
//
try
{
serialPort1.Write(buffer, 0, 1);
// count.Text = Convert.ToString(i,10);

}
catch
{
MessageBox.Show("串口发送有错误!");
}
}
if (textl1 % 2 != 0)
{
str_t = textboxvalue.Substring( 2*i, 1);
buffer[0] = Convert.ToByte(str_t, 16);
try
{
serialPort1.Write(buffer, 0, 1);
}
catch
{
MessageBox.Show("串口发送有错误!");
}
}
}

else
{

//dataout = str_t;
dataout = textBox1.Text;
serialPort1.WriteLine(dataout);
}


}

private void Form1_Load(object sender, EventArgs e)
{


//端口设置
string[] portList = System.IO.Ports.SerialPort.GetPortNames();
for (int i = 0; i < portList.Length; i++)
{
string name = portList[i];
comboBox1.Items.Add(name);
}
try
{
this.comboBox1.SelectedIndex = 1;
serialPort1.PortName = comboBox1.Text;
//serialPort1.PortName = "COM3";

}
catch
{
MessageBox.Show("索引号有问题!");
}

// 波特率设置
baudrate.SelectedIndex = 2;
serialPort1.BaudRate = 4800;


////seriesatet 控件数据设置
string str;
for (int i = 0; i < 256; i++)
{
str = i.ToString("x").ToUpper();
if (str.Length == 1)
{
str = "0" + str;

}
seriesdatat.Items.Add("0x"+str);
seriesdatat.SelectedIndex = 0;
}

}
private void DisplayText(object sender, EventArgs e)
{



textBox2.AppendText(datain);
count.Text = Convert.ToString(count2, 10);




}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (Rece_Mode_R.Checked)
{
datain = serialPort1.ReadExisting();
this.Invoke(new EventHandler(DisplayText));
count2++;
// textBox2.AppendText(datain);
}
else
{
byte readbuf;
readbuf = (byte)serialPort1.ReadByte();
string readstr = Convert.ToString(readbuf, 16).ToUpper();
// datain = " " + readstr;
datain = readstr;
this.Invoke(new EventHandler(DisplayText));
count2++;



}

}

private void button2_Click(object sender, EventArgs e)
{
serialPort1.Close();
comboBox1.Enabled = true;
button3.Enabled = true;
// Close();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{

textBox1.Text =textBox1.Text .ToUpper() ;
}

private void textBox1_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{


}

private void button3_Click(object sender, EventArgs e)
{

if (!serialPort1.IsOpen)
{
serialPort1.Open();
//MessageBox.Show("串口打开成功!");
label2.Text = "没有开始通信!";
comboBox1.Enabled = false;
button3.Text = "关闭串口";
serialPort1.ReceivedBytesThreshold = 1;
}
else if (serialPort1.IsOpen)
{
serialPort1.Close();
// MessageBox.Show("串口已关闭!");
comboBox1.Enabled = true;
button3.Text = "打开串口";

}
else
{
return;

};

}

private void clear_rece_Click(object sender, EventArgs e)
{
textBox2.Text = "";


}









}
}
...全文
740 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhone99 2018-08-28
  • 打赏
  • 举报
回复
用串口助手看下,是代码问题,还是发来的数据有问题
alfred_woo 2018-08-28
  • 打赏
  • 举报
回复
接收端只要能收到数据,就不会收不全,应该是发送端的问题。

110,549

社区成员

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

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

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