151 #include "stm32f4xx.h"
152 #include "stm32f4xx_rcc.h"
153 #include "tm_stm32f4_usart.h"
168 #define GPS_USART USART1
169 #define GPS_USART_PINSPACK TM_USART_PinsPack_2
173 #ifndef GPS_USART_BUFFER_EMPTY
174 #define GPS_USART_BUFFER_EMPTY TM_USART_BufferEmpty(GPS_USART)
178 #ifndef GPS_USART_BUFFER_GET_CHAR
179 #define GPS_USART_BUFFER_GET_CHAR TM_USART_Getc(GPS_USART)
183 #ifndef GPS_USART_INIT
184 #define GPS_USART_INIT(baudrate) TM_USART_Init(GPS_USART, GPS_USART_PINSPACK, baudrate)
188 #ifndef GPS_CUSTOM_NUMBER
189 #define GPS_CUSTOM_NUMBER 10
193 #define GPS_IS_DIGIT(x) ((x) >= '0' && (x) <= '9')
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))
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
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
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
228 #define GPS_FLAG_SATSINVIEW 0x00010000 //GPGSV
229 #define GPS_FLAG_SATSDESC 0x00040000 //GPGSV
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) //
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) //
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) //
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) //
267 #define GPS_POS_SATSINVIEW GPS_CONCAT(GPS_GPGSV, 3) //
270 #define GPS_EARTH_RADIUS 6371
273 #define GPS_DEGREES2RADIANS(x) ((x) * (float)0.01745329251994)
275 #define GPS_RADIANS2DEGREES(x) ((x) * (float)57.29577951308232)
278 #define GPS_MAX_SATS_IN_VIEW 24
384 #ifndef GPS_DISABLE_GPGGA
392 #ifndef GPS_DISABLE_GPRMC
398 #ifndef GPS_DISABLE_GPGSA
403 uint8_t SatelliteIDs[12];
406 #ifndef GPS_DISABLE_GPGSV
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