2013-09-23 102 views
0

我已经使用这个代码在VS串口通讯

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 RxString,ComPort; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
{ 

serialPort1.PortName = "COM5"; 

serialPort1.BaudRate = 9600; 
serialPort1.Parity = Parity.None; 
serialPort1.StopBits = StopBits.One; 
serialPort1.Handshake = Handshake.None; 

serialPort1.DataReceived += new  SerialDataReceivedEventHandler(serialPort1_DataReceived); 
    } 
    private void Start_Click(object sender, EventArgs e) 
    { 
     serialPort1.PortName = ComPort; 
     serialPort1.BaudRate = 9600; 

     serialPort1.Open(); 
     if(serialPort1.IsOpen) 
     { 
      Start.Enabled = false; 
      Stop.Enabled = true; 
      textBox1.ReadOnly = false; 
     } 
    } 

    private void Stop_Click(object sender, EventArgs e) 
    { 
     if (serialPort1.IsOpen) 
     { 
      serialPort1.Close(); 
      Start.Enabled = true; 
      Stop.Enabled = false; 
      textBox1.ReadOnly = true; 
     } 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (serialPort1.IsOpen) serialPort1.Close(); 
    } 

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!serialPort1.IsOpen) return; 

     char[] buff = new char[1]; 

     buff[0] = e.KeyChar; 

     serialPort1.Write(buff, 0 , 1); 

     e.Handled = true; 
    } 

    private void DisplayText(object sender, EventArgs e) 
    { 
     textBox1.AppendText(RxString); 
    } 

    private void serialPort1_DataReceived(object sender,  System.IO.Ports.SerialDataReceivedEventArgs e) 
    { 
     RxString = serialPort1.ReadExisting(); 
     this.Invoke(new EventHandler(DisplayText)); 
    } 

    private void textBox1_TextChanged(object sender, EventArgs e) 
    { 

    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ComPort = comboBox1.SelectedItem.ToString(); 
    } 

    } 
    } 

,但它不工作,我已经使用AVR传输字符尝试和成功大力神什么的发射试验。但它并没有出现在我的程序中。请帮忙。

我已经更新了代码和它的工作正常接收部分,但没有正确传输,我没有得到任何错误,它只是不工作,因为它应该工作。

+3

“它不工作”是什么意思?你有错误吗?没有收到数据?程序是否挂起?小绿人在屏幕上站起舞来跳舞吗?请稍微详细一点。 –

+0

我的串口“hello world”首先使用引脚2和3 TX/RX之间的回形针“loopback”工作。 – kenny

+3

您没有设置所需的串口属性,只是波特率不够。不设置Handshake要求您明确地将DtrEnable和RtsEnable属性设置为true。 –

回答

0

您必须设置您的serialPort1的所有属性。

此外,你应该尝试在多个地方进行调试,以帮助我们在哪里出错:IsOpen返回true?如果否,这解释了为什么你什么都收不到。

参见MSDN例如,如果你想尝试的东西应该工作:http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx

确保串行端口没有被其他程序alerady打开,并且您已经选择好COM端口。否则代码看起来不错。 (你也可以在每次通过时查看RxString的值(可能有很多空白或“/ r”))

+0

好的,我已添加此代码 private void Form1_Load(object sender,EventArgs e) { serialPort1.PortName =“COM5”; //提供设备所连接端口的名称 //硬件的默认值[与设备规格文档一起检查] serialPort1.BaudRate = 9600; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; serialPort1.Handshake = Handshake.None; serialPort1.DataReceived + = new SerialDataReceivedEventHandler(serialPort1_DataReceived); } – user2733959

+0

我不认为代表是绝对必要的,但我为你感到高兴,它的工作原理 –