Visual Studio 2013 SerialPort未接收所有数据

问题描述 投票:1回答:1

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

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

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

当PC向PIC发送“AT + RTPM”时。

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请求实时数据。这项工作更好,但有些时候我得到一些随机数据。我暂时没有专注于此,因为没有数据集,其他一切都是无用的。

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

visual-studio serial-port pic mplab
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.