STM32 library with DMA support for u-blox devices supporting Global Navigation Satellite Systems and UBX standard
 /* USER CODE BEGIN 2 */
	GNSS_Init(&GNSS_Handle, &huart1);
	HAL_Delay(1000);
	GNSS_LoadConfig(&GNSS_Handle);
	uint32_t Timer = HAL_GetTick();
 /* USER CODE END 2 */
 /* Infinite loop */
 /* USER CODE BEGIN WHILE */
	while (1) {
		if ((HAL_GetTick() - Timer) > 1000) {
			GNSS_GetUniqID(&GNSS_Handle);
			GNSS_ParseBuffer(&GNSS_Handle);
			HAL_Delay(250);
			GNSS_GetPVTData(&GNSS_Handle);
			GNSS_ParseBuffer(&GNSS_Handle);
           HAL_Delay(250);
           GNSS_SetMode(&GNSS_Handle,Automotiv);
           HAL_Delay(250);
			printf("Day: %d-%d-%d \r\n", GNSS_Handle.day, GNSS_Handle.month,GNSS_Handle.year);
			printf("Time: %d:%d:%d \r\n", GNSS_Handle.hour, GNSS_Handle.min,GNSS_Handle.sec);
			printf("Status of fix: %d \r\n", GNSS_Handle.fixType);
			printf("Latitude: %f \r\n", GNSS_Handle.fLat);
			printf("Longitude: %f \r\n",(float) GNSS_Handle.lon / 10000000.0);
			printf("Height above ellipsoid: %d \r\n", GNSS_Handle.height);
			printf("Height above mean sea level: %d \r\n", GNSS_Handle.hMSL);
			printf("Ground Speed (2-D): %d \r\n", GNSS_Handle.gSpeed);
			printf("Unique ID: %04X %04X %04X %04X %04X \n\r",
					GNSS_Handle.uniqueID[0], GNSS_Handle.uniqueID[1],
					GNSS_Handle.uniqueID[2], GNSS_Handle.uniqueID[3],
					GNSS_Handle.uniqueID[4], GNSS_Handle.uniqueID[5]);
			Timer = HAL_GetTick();
		}
		/* USER CODE END WHILE */
		/* USER CODE BEGIN 3 */
	}
 /* USER CODE END 3 */
- MAX-M8Q
 - NEO-M8
 - NEO-M9N
 
| Interrupt Table | Enable | Preenmption Priority | SubPriority | 
|---|---|---|---|
| USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25 | true | 0 | 0 | 
| USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26 | true | 0 | 0 | 
| DMA request | Stream | Direction | Priority | 
|---|---|---|---|
| USART1_RX | DMA1_Channel3 | Peripheral To Memory | Low | 
| USART1_TX | DMA1_Channel4 | Memory To Peripheral | Low | 
| Type | Mode | Baud Rate | Word Length | Parity | Stop Bits | Data Direction | 
|---|---|---|---|---|---|---|
| USART1 | Asynchronous | 9600 | 8 Bits (including Parity) | None | 1 | Receive and Transmit | 
//Setting input and output only for UBX standard
static uint8_t configUBX[]={0xB5,0x62,0x06,0x00,0x14,0x00,0x01,0x00,0x00,0x00,0xD0,0x08,0x00,0x00,0x80,0x25,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x9A,0x79};
//Changing the NMEA version to 4.10
static uint8_t setNMEA410[]={0xB5,0x62,0x06,0x17,0x14,0x00,0x00,0x41,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x75,0x57};
//Activation of navigation system: Galileo, Glonass, GPS, SBAS, IMES
static uint8_t setGNSS[]={0xB5,0x62,0x06,0x3E,0x24,0x00,0x00,0x00,0x20,0x04,0x00,0x08,0x10,0x00,0x01,0x00,0x01,0x01,0x01,0x01,0x03,0x00,0x01,0x00,0x01,0x01,0x02,0x04,0x08,0x00,0x01,0x00,0x01,0x01,0x06,0x08,0x0E,0x00,0x01,0x00,0x01,0x01,0xDF,0xFB};
| PERIPHERALS | MODES | FUNCTIONS | PINS | 
|---|---|---|---|
| USART1 | Asynchronous | USART2_RX | PB10 | 
| USART1 | Asynchronous | USART2_TX | PB6 | 
| SYS | Trace Asynchronous Sw | SYS_JTMS-SWDIO | PA13 | 
| SYS | Trace Asynchronous Sw | SYS_JTCK-SWCLK | PA14 | 
| SYS | Trace Asynchronous Sw | SYS_JTDO-SWO | PB3 | 
| SYS | SysTick | SYS_VS_Systick | VP_SYS_VS_Systick | 
| USART2 | Asynchronous | USART2_RX | PA3 | 
| USART2 | Asynchronous | USART2_TX | PA2 | 

