我目前正在开发一个需要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%)它只显示数据集的一部分并且到最后显示为零,当我再次尝试再次显示时,它显示另一部分并从头开始。
如果我对另一个程序尝试相同的事情,我总是得到完整的数据集
我曾尝试逐个单元地进行,但只有当我一秒钟请求它们时它才有效,否则我会遇到同样的问题。
之后我需要使用定时器(100 ms)从PIC请求实时数据。 这项工作更好,但有些时候我得到一些随机数据。我暂时没有专注于此,因为没有数据集,其他一切都是无用的。
我错过了什么或有没有人遇到过同样的问题?
答案 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
但他们不应该是一样的吗?