Visual Studio 2013 SerialPort未收到所有数据

时间:2018-03-01 22:28:51

标签: visual-studio serial-port pic mplab

我目前正在开发一个需要PIC 24FV16KA302与PC软件之间进行串行通信的项目。

过去3天我在互联网上搜索过,但我找不到问题的答案,所以我决定在这里问一下。这是我的第一个视觉工作室计划,所以我没有任何使用该软件的经验。

PIC需要在PC端查看和修改几个变量和两个8x16表。问题出现在我发送表格时,收到的所有其他信息都没有问题。我通过uart到usb转换器使用串行连接(38400/8-N-1) FT232

当PC发送" AT + RTPM"对PIC。

Button7.Click
    SerialPort1.ReceivedBytesThreshold = 128
    MachineState = MS.Receive_table
    SerialPort1.Write("AT+RTPM")
End Sub

PIC发回128字节(表中的值)

case read_table_pwm : // send pwm table 
        for (yy = 0 ; yy < 8 ; yy ++) {
            for (xx = 0 ; xx < 16 ; xx++ ) {
                uart_send_char(controll_by_pmw_map_lb[yy][xx]) ;
            } 
        }
           at_command = receive_state_idle ;
    break ;

该软件假设在DataGrid中获取并显示。

Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    If MachineState = MS.Receive_table Then
        SerialPort1.Read(Buffer_array_received_data, 0, 128)
        cellpos = 0
        For grid_y As Int16 = 0 To 7 Step 1
            For grid_x As Int16 = 0 To 15 Step 1
                DataGridView1.Rows(grid_y).Cells(grid_x).Value = Buffer_array_received_data(cellpos)
                cellpos += 1
            Next
        Next

End Sub

问题在于,大部分时间(99%)它只显示数据集的一部分并且到最后显示为零,当我再次尝试再次显示时,它显示另一部分并从头开始。

First request Second request

如果我对另一个程序尝试相同的事情,我总是得到完整的数据集

Realterm Termite

我曾尝试逐个单元地进行,但只有当我一秒钟请求它们时它才有效,否则我会遇到同样的问题。

之后我需要使用定时器(100 ms)从PIC请求实时数据。 这项工作更好,但有些时候我得到一些随机数据。我暂时没有专注于此,因为没有数据集,其他一切都是无用的。

我错过了什么或有没有人遇到过同样的问题?

1 个答案:

答案 0 :(得分:0)

我设法通过替换

来解决问题

SerialPort1.Read(Buffer_array_received_data, 0, 128)

 For byte_pos As Int16 = 0 To 127 Step 1
     Buffer_array_received_data(byte_pos) = SerialPort1.ReadByte()
    Next

但他们不应该是一样的吗?