C# 如何从串口读取GPS数据

C# 如何从串口读取GPS数据,c#,serial-port,gps,C#,Serial Port,Gps,我正试图从BU-353S4 USB GPS的串行端口读取数据。就可读的NMEA句子而言,我一无所获。GPS与覆盆子Pi完美配合 这适用于.NET控制台应用程序。网络上到处都有类似的问题,但这些样本似乎都不起作用 var-port=新的串行端口 { PortName=“COM5”, 波特率=4800, 奇偶性=奇偶性。无, 数据位=8, 停止位=停止位。一, }; port.DataReceived+=端口_DataReceived; 私有静态无效端口\u DataReceived(对象发送方,S

我正试图从BU-353S4 USB GPS的串行端口读取数据。就可读的NMEA句子而言,我一无所获。GPS与覆盆子Pi完美配合

这适用于.NET控制台应用程序。网络上到处都有类似的问题,但这些样本似乎都不起作用

var-port=新的串行端口
{
PortName=“COM5”,
波特率=4800,
奇偶性=奇偶性。无,
数据位=8,
停止位=停止位。一,
};
port.DataReceived+=端口_DataReceived;
私有静态无效端口\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
字符串行=”;
SerialPort端口=(SerialPort)发送方;
line=port.ReadExisting();
控制台。写入(行);
}
而且

private static void Port_DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
SerialPort端口=(SerialPort)发送方;
var count=port.BytesToRead;
var buffer=新字节[计数];
端口读取(缓冲区,0,计数);
var line=Encoding.ASCII.GetString(缓冲区);
控制台。写入(行);
}
无论我尝试什么,我最终都会得到这样的结果:

()((Y)((Y))(Y))(Y))((Y))40? ?J?&%%%%%??%$$$$$$$$$f Qx?++++++*******?!#xm=?
t?D0?3 4?2 \

发现GPS发送的是SiRF而不是NMEA。一旦我按照步骤将其切换到NMEA,一切都很好!

你确定端口设置正确吗?我发现这是串行端口设备故障排除的好工具。你为什么使用4800波特率而不是9600波特率?人们使用4800仅仅是因为Windows上串行端口的同步读取不起作用!!!始终使用9600(或更快)异步读取总是有效的。Rasberry工作的原因是有人将设备中的波特率设置为4800,而您的设备设置为默认速率,可能是9600或19200。没有人使用4800波特,除非是作为一种混叠,因为使用同步读取时,更快的速率是不可靠的。@jdweng,设备规格是4800bps。设备是否为e驱动程序安装不正确,或者它运行在Windows 8.1-10上,写得不兼容,或者其他什么?它是否与《用户指南》中所示的供应商应用程序一起工作?检查设备管理器,查看它是否在Com5上。确保设置端口。握手=握手。无;电缆可能有可能会产生问题的插脚。转动h而shake to None将忽略电缆的任何问题。