nmea.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef __NMEA_H
  2. #define __NMEA_H
  3. #include "stm32f1xx_hal.h"
  4. //GPS NMEA-0183协议重要参数结构体定义
  5. //卫星信息
  6. __packed typedef struct
  7. {
  8. uint8_t num; //卫星编号
  9. uint8_t eledeg; //卫星仰角
  10. uint16_t azideg; //卫星方位角
  11. uint8_t sn; //信噪比
  12. }nmea_satellitemsg;
  13. //北斗 NMEA-0183协议重要参数结构体定义
  14. //卫星信息
  15. __packed typedef struct
  16. {
  17. uint8_t beidou_num; //卫星编号
  18. uint8_t beidou_eledeg; //卫星仰角
  19. uint16_t beidou_azideg; //卫星方位角
  20. uint8_t beidou_sn; //信噪比
  21. }beidou_nmea_satellitemsg;
  22. //UTC时间信息
  23. __packed typedef struct
  24. {
  25. uint16_t year; //年份
  26. uint8_t month; //月份
  27. uint8_t date; //日期
  28. uint8_t hour; //小时
  29. uint8_t min; //分钟
  30. uint8_t sec; //秒钟
  31. }nmea_utc_time;
  32. //NMEA 0183 协议解析后数据存放结构体
  33. __packed typedef struct
  34. {
  35. uint8_t svnum; //可见GPS卫星数
  36. uint8_t beidou_svnum; //可见GPS卫星数
  37. nmea_satellitemsg slmsg[12]; //最多12颗GPS卫星
  38. beidou_nmea_satellitemsg beidou_slmsg[12]; //暂且算最多12颗北斗卫星
  39. nmea_utc_time utc; //UTC时间
  40. uint32_t latitude; //纬度 分扩大100000倍,实际要除以100000
  41. uint8_t nshemi; //北纬/南纬,N:北纬;S:南纬
  42. uint32_t longitude; //经度 分扩大100000倍,实际要除以100000
  43. uint8_t ewhemi; //东经/西经,E:东经;W:西经
  44. uint8_t gpssta; //GPS状态:0,未定位;1,非差分定位;2,差分定位;6,正在估算.
  45. uint8_t posslnum; //用于定位的GPS卫星数,0~12.
  46. uint8_t possl[12]; //用于定位的卫星编号
  47. uint8_t fixmode; //定位类型:1,没有定位;2,2D定位;3,3D定位
  48. uint16_t pdop; //位置精度因子 0~500,对应实际值0~50.0
  49. uint16_t hdop; //水平精度因子 0~500,对应实际值0~50.0
  50. uint16_t vdop; //垂直精度因子 0~500,对应实际值0~50.0
  51. int altitude; //海拔高度,放大了10倍,实际除以10.单位:0.1m
  52. uint16_t speed; //地面速率,放大了1000倍,实际除以10.单位:0.001公里/小时
  53. }nmea_msg;
  54. int NMEA_Str2num(uint8_t *buf,uint8_t*dx);
  55. void NMEA_Analysis(nmea_msg *gpsx,uint8_t *buf);
  56. void NMEA_GPGSV_Analysis(nmea_msg *gpsx,uint8_t *buf);
  57. void NMEA_BDGSV_Analysis(nmea_msg *gpsx,uint8_t *buf);
  58. void NMEA_GNGGA_Analysis(nmea_msg *gpsx,uint8_t *buf);
  59. void NMEA_GNGSA_Analysis(nmea_msg *gpsx,uint8_t *buf);
  60. void NMEA_GNGSA_Analysis(nmea_msg *gpsx,uint8_t *buf);
  61. void NMEA_GNRMC_Analysis(nmea_msg *gpsx,uint8_t *buf);
  62. void NMEA_GNVTG_Analysis(nmea_msg *gpsx,uint8_t *buf);
  63. #endif