TM STM32F4xx Libraries  v1.0.0
Libraries for STM32F4xx devices from Tilen Majerle
tm_stm32f4_gps.h
1 
29 #ifndef TM_GPS_H
30 #define TM_GPS_H 131
31 
151 #include "stm32f4xx.h"
152 #include "stm32f4xx_rcc.h"
153 #include "tm_stm32f4_usart.h"
154 #include "defines.h"
155 #include "math.h"
156 #include "stdio.h"
157 #include "stdlib.h"
158 #include "string.h"
159 
166 /* Default GPS USART used */
167 #ifndef GPS_USART
168 #define GPS_USART USART1
169 #define GPS_USART_PINSPACK TM_USART_PinsPack_2
170 #endif
171 
172 /* Checks if USART buffer for GPS is empty */
173 #ifndef GPS_USART_BUFFER_EMPTY
174 #define GPS_USART_BUFFER_EMPTY TM_USART_BufferEmpty(GPS_USART)
175 #endif
176 
177 /* Get character from USART buffer for GPS */
178 #ifndef GPS_USART_BUFFER_GET_CHAR
179 #define GPS_USART_BUFFER_GET_CHAR TM_USART_Getc(GPS_USART)
180 #endif
181 
182 /* Init function for GPS */
183 #ifndef GPS_USART_INIT
184 #define GPS_USART_INIT(baudrate) TM_USART_Init(GPS_USART, GPS_USART_PINSPACK, baudrate)
185 #endif
186 
187 /* Maximum number of custom GPGxx values */
188 #ifndef GPS_CUSTOM_NUMBER
189 #define GPS_CUSTOM_NUMBER 10
190 #endif
191 
192 /* Is character a digit */
193 #define GPS_IS_DIGIT(x) ((x) >= '0' && (x) <= '9')
194 
195 /* Char 2 digit conversions */
196 #define GPS_C2N(a) (((a) - 48))
197 #define GPS_C2NM(a, x) C2N(a) * (x)
198 #define GPS_CONCAT(x, y) ((x) << 5 | (y))
199 
200 /* NMEA statements */
201 #define GPS_GPGGA 0
202 #define GPS_GPRMC 1
203 #define GPS_GPGSA 2
204 #define GPS_GPGSV 3
205 #define GPS_ERR 4
206 
207 /* GPGGA Flags */
208 #define GPS_FLAG_LATITUDE 0x00000001 //GPGGA
209 #define GPS_FLAG_LONGITUDE 0x00000002 //GPGGA
210 #define GPS_FLAG_SATS 0x00000004 //GPGGA
211 #define GPS_FLAG_FIX 0x00000008 //GPGGA
212 #define GPS_FLAG_ALTITUDE 0x00000010 //GPGGA
213 #define GPS_FLAG_EW 0x00000020 //GPGGA
214 #define GPS_FLAG_NS 0x00000040 //GPGGA
215 #define GPS_FLAG_TIME 0x00000080 //GPGGA
216 /* GPRMC Flags */
217 #define GPS_FLAG_SPEED 0x00000100 //GPRMC
218 #define GPS_FLAG_DATE 0x00000200 //GPRMC
219 #define GPS_FLAG_VALIDITY 0x00000400 //GPRMC
220 #define GPS_FLAG_DIRECTION 0x00008000 //GPRMC
221 /* GPGSA Flags */
222 #define GPS_FLAG_HDOP 0x00000800 //GPGSA
223 #define GPS_FLAG_VDOP 0x00001000 //GPGSA
224 #define GPS_FLAG_PDOP 0x00002000 //GPGSA
225 #define GPS_FLAG_FIXMODE 0x00004000 //GPGSA
226 #define GPS_FLAG_SATS1_12 0x00020000 //GPGSA
227 /* GPGSV Flags */
228 #define GPS_FLAG_SATSINVIEW 0x00010000 //GPGSV
229 #define GPS_FLAG_SATSDESC 0x00040000 //GPGSV
230 
231 /* GPGGA Positions */
232 #define GPS_POS_LATITUDE GPS_CONCAT(GPS_GPGGA, 2) //
233 #define GPS_POS_LONGITUDE GPS_CONCAT(GPS_GPGGA, 4) //
234 #define GPS_POS_SATS GPS_CONCAT(GPS_GPGGA, 7) //
235 #define GPS_POS_FIX GPS_CONCAT(GPS_GPGGA, 6) //
236 #define GPS_POS_ALTITUDE GPS_CONCAT(GPS_GPGGA, 9) //
237 #define GPS_POS_TIME GPS_CONCAT(GPS_GPGGA, 1) //
238 #define GPS_POS_EW GPS_CONCAT(GPS_GPGGA, 5) //
239 #define GPS_POS_NS GPS_CONCAT(GPS_GPGGA, 3) //
240 
241 /* GPRMC Positions */
242 #define GPS_POS_SPEED GPS_CONCAT(GPS_GPRMC, 7) //
243 #define GPS_POS_DATE GPS_CONCAT(GPS_GPRMC, 9) //
244 #define GPS_POS_VALIDITY GPS_CONCAT(GPS_GPRMC, 2) //
245 #define GPS_POS_DIRECTION GPS_CONCAT(GPS_GPRMC, 8) //
246 
247 /* GPGSA Positions */
248 #define GPS_POS_PDOP GPS_CONCAT(GPS_GPGSA, 15) //
249 #define GPS_POS_HDOP GPS_CONCAT(GPS_GPGSA, 16) //
250 #define GPS_POS_VDOP GPS_CONCAT(GPS_GPGSA, 17) //
251 #define GPS_POS_FIXMODE GPS_CONCAT(GPS_GPGSA, 2) //
252 
253 #define GPS_POS_SAT1 GPS_CONCAT(GPS_GPGSA, 3) //
254 #define GPS_POS_SAT2 GPS_CONCAT(GPS_GPGSA, 4) //
255 #define GPS_POS_SAT3 GPS_CONCAT(GPS_GPGSA, 5) //
256 #define GPS_POS_SAT4 GPS_CONCAT(GPS_GPGSA, 6) //
257 #define GPS_POS_SAT5 GPS_CONCAT(GPS_GPGSA, 7) //
258 #define GPS_POS_SAT6 GPS_CONCAT(GPS_GPGSA, 8) //
259 #define GPS_POS_SAT7 GPS_CONCAT(GPS_GPGSA, 9) //
260 #define GPS_POS_SAT8 GPS_CONCAT(GPS_GPGSA, 10) //
261 #define GPS_POS_SAT9 GPS_CONCAT(GPS_GPGSA, 11) //
262 #define GPS_POS_SAT10 GPS_CONCAT(GPS_GPGSA, 12) //
263 #define GPS_POS_SAT11 GPS_CONCAT(GPS_GPGSA, 13) //
264 #define GPS_POS_SAT12 GPS_CONCAT(GPS_GPGSA, 14) //
265 
266 /* GPGSV Positions */
267 #define GPS_POS_SATSINVIEW GPS_CONCAT(GPS_GPGSV, 3) //
268 
269 /* Earth radius */
270 #define GPS_EARTH_RADIUS 6371
271 
272 /* Degrees to radians converter */
273 #define GPS_DEGREES2RADIANS(x) ((x) * (float)0.01745329251994)
274 /* Radians to degrees */
275 #define GPS_RADIANS2DEGREES(x) ((x) * (float)57.29577951308232)
276 
277 /* Maximal number of satellites in view */
278 #define GPS_MAX_SATS_IN_VIEW 24
279 
293 typedef enum {
298 
299 
304 typedef enum {
305  /* Metric */
310  /* Imperial */
315  /* For Runners and Joggers */
322  /* Nautical */
325 
326 
335 typedef struct {
336  int32_t Integer;
337  uint32_t Decimal;
339 
343 typedef struct {
344  uint8_t Date;
345  uint8_t Month;
346  uint8_t Year;
347 } TM_GPS_Date_t;
348 
352 typedef struct {
353  uint8_t Hours;
354  uint8_t Minutes;
355  uint8_t Seconds;
356  uint8_t Hundredths;
357 } TM_GPS_Time_t;
358 
362 typedef struct {
363  uint8_t ID;
364  uint8_t Elevation;
365  uint16_t Azimuth;
366  uint8_t SNR;
368 
372 typedef struct {
373  char Statement[7];
374  uint8_t TermNumber;
375  char Value[15];
377  uint8_t Updated;
379 
383 typedef struct {
384 #ifndef GPS_DISABLE_GPGGA
385  float Latitude;
386  float Longitude;
387  uint8_t Satellites;
388  uint8_t Fix;
389  float Altitude;
391 #endif
392 #ifndef GPS_DISABLE_GPRMC
394  float Speed;
395  uint8_t Validity;
396  float Direction;
397 #endif
398 #ifndef GPS_DISABLE_GPGSA
399  float HDOP;
400  float PDOP;
401  float VDOP;
402  uint8_t FixMode;
403  uint8_t SatelliteIDs[12];
405 #endif
406 #ifndef GPS_DISABLE_GPGSV
408  TM_GPS_Satellite_t SatDesc[30];
409 #endif
411  TM_GPS_Custom_t* CustomStatements[GPS_CUSTOM_NUMBER];
414 } TM_GPS_t;
415 
416 /* Backward compatibility */
417 typedef TM_GPS_t TM_GPS_Data_t;
418 
422 typedef struct {
423  float Latitude1;
424  float Longitude1;
425  float Latitude2;
426  float Longitude2;
427  float Distance;
428  float Bearing;
430 
448 void TM_GPS_Init(TM_GPS_t* GPS_Data, uint32_t baudrate);
449 
463 
470 float TM_GPS_ConvertSpeed(float SpeedInKnots, TM_GPS_Speed_t toSpeed);
471 
483 void TM_GPS_ConvertFloat(float num, TM_GPS_Float_t* Float_Data, uint8_t decimals);
484 
491 void TM_GPS_DistanceBetween(TM_GPS_Distance_t* Distance_Data);
492 
506 TM_GPS_Custom_t * TM_GPS_AddCustom(TM_GPS_t* GPS_Data, char* GPG_Statement, uint8_t TermNumber);
507 
520 #endif
521 
TM_GPS_Date_t Date
Definition: tm_stm32f4_gps.h:393
Definition: tm_stm32f4_gps.h:313
uint8_t TermNumber
Definition: tm_stm32f4_gps.h:374
float Direction
Definition: tm_stm32f4_gps.h:396
void TM_GPS_ConvertFloat(float num, TM_GPS_Float_t *Float_Data, uint8_t decimals)
Converts float number into integer and decimal part.
Satellite in view description structure.
Definition: tm_stm32f4_gps.h:362
float Latitude
Definition: tm_stm32f4_gps.h:385
float Latitude1
Definition: tm_stm32f4_gps.h:423
TM_GPS_Speed_t
Speed conversion enumeration.
Definition: tm_stm32f4_gps.h:304
Definition: tm_stm32f4_gps.h:318
Definition: tm_stm32f4_gps.h:319
float Altitude
Definition: tm_stm32f4_gps.h:389
Definition: tm_stm32f4_gps.h:314
uint32_t Decimal
Definition: tm_stm32f4_gps.h:337
uint8_t Date
Definition: tm_stm32f4_gps.h:344
TM_GPS_Result_t TM_GPS_Update(TM_GPS_t *GPS_Data)
Update GPS data.
uint8_t Hours
Definition: tm_stm32f4_gps.h:353
float HDOP
Definition: tm_stm32f4_gps.h:399
Definition: tm_stm32f4_gps.h:316
float Longitude1
Definition: tm_stm32f4_gps.h:424
Definition: tm_stm32f4_gps.h:306
float Distance
Definition: tm_stm32f4_gps.h:427
Definition: tm_stm32f4_gps.h:294
Definition: tm_stm32f4_gps.h:309
float Bearing
Definition: tm_stm32f4_gps.h:428
float VDOP
Definition: tm_stm32f4_gps.h:401
Definition: tm_stm32f4_gps.h:323
uint8_t SatellitesInView
Definition: tm_stm32f4_gps.h:407
TM_GPS_Result_t Status
Definition: tm_stm32f4_gps.h:410
Definition: tm_stm32f4_gps.h:307
float Longitude2
Definition: tm_stm32f4_gps.h:426
void TM_GPS_Init(TM_GPS_t *GPS_Data, uint32_t baudrate)
Initializes GPS and USART peripheral.
Definition: tm_stm32f4_gps.h:321
GPS Distance and bearing struct.
Definition: tm_stm32f4_gps.h:422
int32_t Integer
Definition: tm_stm32f4_gps.h:336
Definition: tm_stm32f4_gps.h:317
TM_GPS_Time_t Time
Definition: tm_stm32f4_gps.h:390
float Longitude
Definition: tm_stm32f4_gps.h:386
uint8_t Year
Definition: tm_stm32f4_gps.h:346
uint16_t Azimuth
Definition: tm_stm32f4_gps.h:365
Definition: tm_stm32f4_gps.h:311
Definition: tm_stm32f4_gps.h:295
uint8_t Updated
Definition: tm_stm32f4_gps.h:377
TM_GPS_Result_t
GPS Result enumeration.
Definition: tm_stm32f4_gps.h:293
Main GPS data structure.
Definition: tm_stm32f4_gps.h:383
uint8_t Satellites
Definition: tm_stm32f4_gps.h:387
TM_GPS_Custom_t * TM_GPS_AddCustom(TM_GPS_t *GPS_Data, char *GPG_Statement, uint8_t TermNumber)
Adds custom GPG statement to array of user selectable statements. Array is available to user using TM...
float PDOP
Definition: tm_stm32f4_gps.h:400
uint8_t SNR
Definition: tm_stm32f4_gps.h:366
Custom NMEA statement and term, selected by user.
Definition: tm_stm32f4_gps.h:372
float Speed
Definition: tm_stm32f4_gps.h:394
Definition: tm_stm32f4_gps.h:296
uint8_t ID
Definition: tm_stm32f4_gps.h:363
float Latitude2
Definition: tm_stm32f4_gps.h:425
uint8_t Seconds
Definition: tm_stm32f4_gps.h:355
uint8_t CustomStatementsCount
Definition: tm_stm32f4_gps.h:413
Definition: tm_stm32f4_gps.h:320
uint8_t Month
Definition: tm_stm32f4_gps.h:345
Time structure for GPS.
Definition: tm_stm32f4_gps.h:352
float TM_GPS_ConvertSpeed(float SpeedInKnots, TM_GPS_Speed_t toSpeed)
Converts speed in knots (from GPS) to user selectable speed.
uint8_t Minutes
Definition: tm_stm32f4_gps.h:354
Date struct for GPS date.
Definition: tm_stm32f4_gps.h:343
uint8_t Elevation
Definition: tm_stm32f4_gps.h:364
Definition: tm_stm32f4_gps.h:312
uint8_t Validity
Definition: tm_stm32f4_gps.h:395
void TM_GPS_DistanceBetween(TM_GPS_Distance_t *Distance_Data)
Calculates distance between 2 coordinates on earth and bearing from start to end point in relation to...
uint8_t Fix
Definition: tm_stm32f4_gps.h:388
uint8_t FixMode
Definition: tm_stm32f4_gps.h:402
GPS float structure.
Definition: tm_stm32f4_gps.h:335
uint8_t Hundredths
Definition: tm_stm32f4_gps.h:356
Definition: tm_stm32f4_gps.h:308