TM STM32Fxxx HAL Libraries  v1.0.0
Libraries for STM32Fxxx (F0, F4 and F7 series) devices based on HAL drivers from ST from Tilen Majerle
tm_stm32_gps.h
1 
37 #ifndef TM_GPS_H
38 #define TM_GPS_H 100
39 
40 /* C++ detection */
41 #ifdef __cplusplus
42 extern C {
43 #endif
44 
188 #include "stm32fxxx_hal.h"
189 #include "tm_stm32_usart.h"
190 #include "tm_stm32_gpio.h"
191 #include "defines.h"
192 #include "math.h"
193 #include "stdio.h"
194 #include "stdlib.h"
195 #include "string.h"
196 
203 /* Default GPS USART used */
204 #ifndef GPS_USART
205 #define GPS_USART USART1
206 #define GPS_USART_PINSPACK TM_USART_PinsPack_2
207 #endif
208 
209 /* Checks if USART buffer for GPS is empty */
210 #ifndef GPS_USART_BUFFER_EMPTY
211 #define GPS_USART_BUFFER_EMPTY TM_USART_BufferEmpty(GPS_USART)
212 #endif
213 
214 /* Get character from USART buffer for GPS */
215 #ifndef GPS_USART_BUFFER_GET_CHAR
216 #define GPS_USART_BUFFER_GET_CHAR TM_USART_Getc(GPS_USART)
217 #endif
218 
219 /* Init function for GPS */
220 #ifndef GPS_USART_INIT
221 #define GPS_USART_INIT(baudrate) TM_USART_Init(GPS_USART, GPS_USART_PINSPACK, baudrate)
222 #endif
223 
224 /* Maximum number of custom GPGxx values */
225 #ifndef GPS_CUSTOM_NUMBER
226 #define GPS_CUSTOM_NUMBER 10
227 #endif
228 
242 typedef enum {
247 
248 
253 typedef enum {
254  /* Metric */
259  /* Imperial */
264  /* For Runners and Joggers */
271  /* Nautical */
274 
275 
284 typedef struct {
285  int32_t Integer;
286  uint32_t Decimal;
288 
292 typedef struct {
293  uint8_t Date;
294  uint8_t Month;
295  uint8_t Year;
296 } TM_GPS_Date_t;
297 
301 typedef struct {
302  uint8_t Hours;
303  uint8_t Minutes;
304  uint8_t Seconds;
305  uint16_t Hundredths;
306 } TM_GPS_Time_t;
307 
311 typedef struct {
312  uint8_t ID;
313  uint8_t Elevation;
314  uint16_t Azimuth;
315  uint8_t SNR;
317 
321 typedef struct {
322  char Statement[7];
323  uint8_t TermNumber;
324  char Value[15];
326  uint8_t Updated;
328 
332 typedef struct {
333 #ifndef GPS_DISABLE_GPGGA
334  float Latitude;
335  float Longitude;
336  float Altitude;
337  uint8_t Satellites;
338  uint8_t Fix;
340 #endif
341 #ifndef GPS_DISABLE_GPRMC
343  float Speed;
344  uint8_t Validity;
345  float Direction;
346 #endif
347 #ifndef GPS_DISABLE_GPGSA
348  float HDOP;
349  float PDOP;
350  float VDOP;
351  uint8_t FixMode;
352  uint8_t SatelliteIDs[12];
354 #endif
355 #ifndef GPS_DISABLE_GPGSV
357  TM_GPS_Satellite_t SatDesc[30];
358 #endif
360  TM_GPS_Custom_t* CustomStatements[GPS_CUSTOM_NUMBER];
363 } TM_GPS_t;
364 
365 /* Backward compatibility */
366 typedef TM_GPS_t TM_GPS_Data_t;
367 
371 typedef struct {
372  float Latitude1;
373  float Longitude1;
374  float Latitude2;
375  float Longitude2;
376  float Distance;
377  float Bearing;
379 
397 void TM_GPS_Init(TM_GPS_t* GPS_Data, uint32_t baudrate);
398 
412 
419 float TM_GPS_ConvertSpeed(float SpeedInKnots, TM_GPS_Speed_t toSpeed);
420 
432 void TM_GPS_ConvertFloat(float num, TM_GPS_Float_t* Float_Data, uint8_t decimals);
433 
440 void TM_GPS_DistanceBetween(TM_GPS_Distance_t* Distance_Data);
441 
455 TM_GPS_Custom_t * TM_GPS_AddCustom(TM_GPS_t* GPS_Data, char* GPG_Statement, uint8_t TermNumber);
456 
469 /* C++ detection */
470 #ifdef __cplusplus
471 }
472 #endif
473 
474 #endif
475 
TM_GPS_Date_t Date
Definition: tm_stm32_gps.h:342
Definition: tm_stm32_gps.h:262
uint8_t TermNumber
Definition: tm_stm32_gps.h:323
float Direction
Definition: tm_stm32_gps.h:345
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_stm32_gps.h:311
float Latitude
Definition: tm_stm32_gps.h:334
float Latitude1
Definition: tm_stm32_gps.h:372
TM_GPS_Speed_t
Speed conversion enumeration.
Definition: tm_stm32_gps.h:253
Definition: tm_stm32_gps.h:267
Definition: tm_stm32_gps.h:268
float Altitude
Definition: tm_stm32_gps.h:336
Definition: tm_stm32_gps.h:263
uint32_t Decimal
Definition: tm_stm32_gps.h:286
uint8_t Date
Definition: tm_stm32_gps.h:293
TM_GPS_Result_t TM_GPS_Update(TM_GPS_t *GPS_Data)
Update GPS data.
uint8_t Hours
Definition: tm_stm32_gps.h:302
float HDOP
Definition: tm_stm32_gps.h:348
Definition: tm_stm32_gps.h:265
float Longitude1
Definition: tm_stm32_gps.h:373
Definition: tm_stm32_gps.h:255
float Distance
Definition: tm_stm32_gps.h:376
Definition: tm_stm32_gps.h:243
Definition: tm_stm32_gps.h:258
float Bearing
Definition: tm_stm32_gps.h:377
float VDOP
Definition: tm_stm32_gps.h:350
Definition: tm_stm32_gps.h:272
uint8_t SatellitesInView
Definition: tm_stm32_gps.h:356
TM_GPS_Result_t Status
Definition: tm_stm32_gps.h:359
Definition: tm_stm32_gps.h:256
float Longitude2
Definition: tm_stm32_gps.h:375
void TM_GPS_Init(TM_GPS_t *GPS_Data, uint32_t baudrate)
Initializes GPS and USART peripheral.
Definition: tm_stm32_gps.h:270
GPS Distance and bearing struct.
Definition: tm_stm32_gps.h:371
int32_t Integer
Definition: tm_stm32_gps.h:285
Definition: tm_stm32_gps.h:266
TM_GPS_Time_t Time
Definition: tm_stm32_gps.h:339
float Longitude
Definition: tm_stm32_gps.h:335
uint8_t Year
Definition: tm_stm32_gps.h:295
uint16_t Azimuth
Definition: tm_stm32_gps.h:314
Definition: tm_stm32_gps.h:260
Definition: tm_stm32_gps.h:244
uint8_t Updated
Definition: tm_stm32_gps.h:326
TM_GPS_Result_t
GPS Result enumeration.
Definition: tm_stm32_gps.h:242
Main GPS data structure.
Definition: tm_stm32_gps.h:332
uint8_t Satellites
Definition: tm_stm32_gps.h:337
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_stm32_gps.h:349
uint8_t SNR
Definition: tm_stm32_gps.h:315
Custom NMEA statement and term, selected by user.
Definition: tm_stm32_gps.h:321
float Speed
Definition: tm_stm32_gps.h:343
Definition: tm_stm32_gps.h:245
uint8_t ID
Definition: tm_stm32_gps.h:312
float Latitude2
Definition: tm_stm32_gps.h:374
uint8_t Seconds
Definition: tm_stm32_gps.h:304
uint8_t CustomStatementsCount
Definition: tm_stm32_gps.h:362
Definition: tm_stm32_gps.h:269
uint8_t Month
Definition: tm_stm32_gps.h:294
Time structure for GPS.
Definition: tm_stm32_gps.h:301
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_stm32_gps.h:303
Date struct for GPS date.
Definition: tm_stm32_gps.h:292
uint8_t Elevation
Definition: tm_stm32_gps.h:313
Definition: tm_stm32_gps.h:261
uint8_t Validity
Definition: tm_stm32_gps.h:344
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_stm32_gps.h:338
uint16_t Hundredths
Definition: tm_stm32_gps.h:305
uint8_t FixMode
Definition: tm_stm32_gps.h:351
GPS float structure.
Definition: tm_stm32_gps.h:284
Definition: tm_stm32_gps.h:257