从GPS读取NMEA句子

我有一台Mio P550设备,其中包含GPS。 我尝试使用SerialPort来获取NMEA句子,只需使用SerialPort.Read()即可。 数据以一些奇怪的编码返回。 GPS应该以ASCII格式返回NMEA句子,但事实并非如此。 这是我的阅读代码:

dataLength = this.serialPort.Read(buffor, 0, Gps.BUFFOR_LENGTH); Debug.WriteLine("data length: " + dataLength); if (dataLength > 0) { for (int i = 0; i < dataLength; i++) { char c = Convert.ToChar(buffor[i]); if (c == '\r' || c == '\n') { string data = stringBuilder.ToString(); Debug.WriteLine("data readed: " + data); if (data.StartsWith("$GPGGA")) { this.OnLocationChanged(data); } stringBuilder.Length = 0; } else { stringBuilder.Append(c); } Debug.WriteLine("readed data: " + stringBuilder.ToString()); } 

以下是我得到的样本价值:xæææxfæ`æxæføøøxxxøx

我还有第二个设备(华硕A636N),它返回ASCII的NMEA句子,我的代码效果很好。

我与Mio设备有什么关系才能获得ASCII的NMEA句子? 或者我如何获取设备返回的数据的编码? 我尝试使用System.Text.Encoding.xxx.GetString()中的所有类来从readed字节获取字符串,但它不返回正确的数据 – 它返回类似于上面示例的数据。

您可能需要确保根据NMEA规范的要求将串行端口的波特率设置为4800波特 。

请参阅此代码示例: https : //code.google.com/p/avr-nmea-gps-library/

它还使用4800波特率。