kopia lustrzana https://github.com/sq2ips/m20-custom-firmware
Early implementation of new GPS watchdog, some code cleanup
rodzic
91de72ae76
commit
d0051d1dec
|
@ -16,9 +16,9 @@ const static float QRG_FSK4[] = {435100000}; // Transmitted frequencies array, s
|
||||||
|
|
||||||
#define TIME_PERIOD 6 // Time betwen starts of transmissions (in seconds) (must be more than 3)
|
#define TIME_PERIOD 6 // Time betwen starts of transmissions (in seconds) (must be more than 3)
|
||||||
|
|
||||||
#define GPS_TYPE 1 // Type of GPS module: 1 - u-blox | 2 - XM1110
|
#define GPS_TYPE 2 // Type of GPS module: 1 - u-blox | 2 - XM1110
|
||||||
|
|
||||||
#define GPS_WATCHDOG 3 // number of frames without gps fix to trigger restart
|
#define GPS_WATCHDOG // Enable GPS watchdog
|
||||||
|
|
||||||
#define PA_FSK4 10 // RF power setting for horus transmission values 0-63
|
#define PA_FSK4 10 // RF power setting for horus transmission values 0-63
|
||||||
#define RF_BOOST_ACTIVE 1 // RF booster enabled for transmissions about 15dB gain, but more power consumed - normally should be ON(1).
|
#define RF_BOOST_ACTIVE 1 // RF booster enabled for transmissions about 15dB gain, but more power consumed - normally should be ON(1).
|
||||||
|
@ -32,6 +32,10 @@ const static float QRG_FSK4[] = {435100000}; // Transmitted frequencies array, s
|
||||||
/*-----------------------------------------------------------------*/
|
/*-----------------------------------------------------------------*/
|
||||||
// the rest of parameters should not be changed normally
|
// the rest of parameters should not be changed normally
|
||||||
|
|
||||||
|
#define GPS_WATCHDOG_ARC 180 // Time of GPS watchdog after restart counter, how much time (in s) the module has for getting a fix after a restart before next one
|
||||||
|
//#define GPS_WATCHDOG_MAX_D_TIME 10 // Max GPS time deviation (in s) from last frame
|
||||||
|
//#define GPS_WATCHDOG_ASCENTRATE 100 // Ascent rate value triggering restart
|
||||||
|
|
||||||
#define FSK4_BAUD 100 // Baudrate for horus 4FSK
|
#define FSK4_BAUD 100 // Baudrate for horus 4FSK
|
||||||
#define FSK4_SPACE_MULTIPLIER 1 // Tone spacing multiplier - 1 for 244Hz, 2 for 488, etc.
|
#define FSK4_SPACE_MULTIPLIER 1 // Tone spacing multiplier - 1 for 244Hz, 2 for 488, etc.
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ typedef struct TBinaryPacket {
|
||||||
int16_t ExtTemp;
|
int16_t ExtTemp;
|
||||||
uint8_t Hum;
|
uint8_t Hum;
|
||||||
uint16_t Press;
|
uint16_t Press;
|
||||||
uint16_t Unused;
|
uint8_t GpsResetCount; // counter of GPS watchdog resets
|
||||||
|
uint8_t Unused;
|
||||||
// End of custom data
|
// End of custom data
|
||||||
uint16_t Checksum;
|
uint16_t Checksum;
|
||||||
} __attribute__((packed)) HorusBinaryPacket;
|
} __attribute__((packed)) HorusBinaryPacket;
|
||||||
|
|
|
@ -60,8 +60,16 @@ XMDATA GpsData;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GPS_WATCHDOG
|
#ifdef GPS_WATCHDOG
|
||||||
uint8_t GpsWatchdogCounter = 0;
|
struct GpsWatchdogStruct {
|
||||||
bool GpsPreviousFix = false;
|
bool PreviousFix;
|
||||||
|
bool AfterRestart;
|
||||||
|
uint8_t AfterRestartCounter;
|
||||||
|
bool TriggerRestart;
|
||||||
|
|
||||||
|
#if GPS_TYPE == 2
|
||||||
|
uint32_t LastTime;
|
||||||
|
#endif
|
||||||
|
} GpsWatchdog;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t lps_init;
|
uint8_t lps_init;
|
||||||
|
@ -87,6 +95,8 @@ static void MX_TIM6_Init(void);
|
||||||
void GPS_Handler(void);
|
void GPS_Handler(void);
|
||||||
void LED_Handler(void);
|
void LED_Handler(void);
|
||||||
void main_loop(void);
|
void main_loop(void);
|
||||||
|
void DelayWithIWDG(uint16_t time);
|
||||||
|
void GpsAirborne(void);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
|
@ -183,6 +193,11 @@ void main_loop(void) {
|
||||||
LL_ADC_REG_StartConversion(ADC1);
|
LL_ADC_REG_StartConversion(ADC1);
|
||||||
while (LL_ADC_IsActiveFlag_EOC(ADC1) == 0) {
|
while (LL_ADC_IsActiveFlag_EOC(ADC1) == 0) {
|
||||||
}
|
}
|
||||||
|
// ADC voltage: 3.3V, divided by ADC max value 4095 (2^12-1). That gives a
|
||||||
|
// range between 0 for 0V and 1 for 3.3V. Than it's multiplied by max
|
||||||
|
// variable value: 255, and divided by corresponding voltage: 5V, simplified
|
||||||
|
// gives 187/4550 Note: this value will not go higher than 168 corresponding
|
||||||
|
// to 3.3V max value of ADC
|
||||||
HorusPacket.BatVoltage = (LL_ADC_REG_ReadConversionData12(ADC1) * 187) / 4550;
|
HorusPacket.BatVoltage = (LL_ADC_REG_ReadConversionData12(ADC1) * 187) / 4550;
|
||||||
LL_ADC_ClearFlag_EOS(ADC1);
|
LL_ADC_ClearFlag_EOS(ADC1);
|
||||||
|
|
||||||
|
@ -221,9 +236,94 @@ void main_loop(void) {
|
||||||
(unsigned char *)&HorusPacket,
|
(unsigned char *)&HorusPacket,
|
||||||
sizeof(HorusPacket));
|
sizeof(HorusPacket));
|
||||||
|
|
||||||
|
#ifdef GPS_WATCHDOG
|
||||||
|
// Set a flag if we have initial fix.
|
||||||
|
#if GPS_TYPE == 1
|
||||||
|
if (NmeaData.Fix > 1 && NmeaData.Sats > 0) {
|
||||||
|
GpsWatchdog.PreviousFix = true;
|
||||||
|
GpsWatchdog.AfterRestart = false;
|
||||||
|
}
|
||||||
|
#elif GPS_TYPE == 2
|
||||||
|
if (GpsData.Fix > 1 && GpsData.Sats > 0) {
|
||||||
|
GpsWatchdog.PreviousFix = true;
|
||||||
|
GpsWatchdog.AfterRestart = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
// Check GPS reset conditions only if there was initial fix.
|
||||||
|
if (GpsWatchdog.PreviousFix) {
|
||||||
|
#if GPS_TYPE == 1
|
||||||
|
if (NmeaData.Fix > 1 && NmeaData.Sats > 0) {
|
||||||
|
if (NmeaData.AscentRate >= GPS_WATCHDOG_ASCENTRATE) {
|
||||||
|
GpsWatchdog.TriggerRestart = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif GPS_TYPE == 2
|
||||||
|
if (GpsData.Fix > 1 && GpsData.Sats > 0) {
|
||||||
|
// If there is fix check spoofing specific conditions.
|
||||||
|
// Ascent rate
|
||||||
|
//printf("%d %d\r\n",(int32_t)GpsData.Time - TIME_PERIOD, GpsWatchdog.LastTime);
|
||||||
|
/*if ((int32_t)GpsData.AscentRate >= GPS_WATCHDOG_ASCENTRATE
|
||||||
|
|| (int32_t)GpsData.AscentRate <= (-1*GPS_WATCHDOG_ASCENTRATE)
|
||||||
|
// Time deviation
|
||||||
|
|| (GpsWatchdog.LastTime != 0 &&
|
||||||
|
(((int32_t)GpsData.Time - TIME_PERIOD) - GpsWatchdog.LastTime > GPS_WATCHDOG_MAX_D_TIME
|
||||||
|
|| GpsWatchdog.LastTime - ((int32_t)GpsData.Time - TIME_PERIOD) < GPS_WATCHDOG_MAX_D_TIME))) {
|
||||||
|
// If conditions match trigger a restart
|
||||||
|
GpsWatchdog.TriggerRestart = true;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
GpsWatchdog.LastTime = GpsData.Time;
|
||||||
|
// if (GpsData.AscentRate >= GPS_WATCHDOG_ASCENTRATE ||
|
||||||
|
//(GpsWatchdog.LastTime != 0 &&
|
||||||
|
// (GpsData.Time-TIME_PERIOD-GpsWatchdog.LastTime>GPS_WATCHDOG_MAX_TIME ||
|
||||||
|
// GpsData.Time-TIME_PERIOD-GpsWatchdog.LastTime<(-1*GPS_WATCHDOG_MAX_TIME))))
|
||||||
|
// /
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else if (GpsWatchdog.AfterRestart) {
|
||||||
|
// If there is no fix and gps after a restart give it some time before next restart
|
||||||
|
GpsWatchdog.AfterRestartCounter++;
|
||||||
|
if (GpsWatchdog.AfterRestartCounter >= GPS_WATCHDOG_ARC/TIME_PERIOD) {
|
||||||
|
GpsWatchdog.TriggerRestart = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GpsWatchdog.TriggerRestart = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//printf("%d %d %d %d\r\n", GpsWatchdog.PreviousFix,
|
||||||
|
// GpsWatchdog.AfterRestart, GpsWatchdog.AfterRestartCounter,
|
||||||
|
// GpsWatchdog.TriggerRestart);
|
||||||
|
|
||||||
|
if (GpsWatchdog.TriggerRestart) {
|
||||||
|
LL_GPIO_ResetOutputPin(GPS_ON_GPIO_Port, GPS_ON_Pin); // disable GPS
|
||||||
|
DelayWithIWDG(1000);
|
||||||
|
LL_GPIO_SetOutputPin(GPS_ON_GPIO_Port, GPS_ON_Pin); // enable GPS
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Transmit
|
// Transmit
|
||||||
FSK4_start_TX(HorusCodedBuffer, HorusCodedLen);
|
FSK4_start_TX(HorusCodedBuffer, HorusCodedLen);
|
||||||
|
|
||||||
|
#ifdef GPS_WATCHDOG
|
||||||
|
if (GpsWatchdog.TriggerRestart) {
|
||||||
|
#if GPS_TYPE == 1
|
||||||
|
while (FSK4_is_active()) {
|
||||||
|
LL_IWDG_ReloadCounter(IWDG);
|
||||||
|
LL_mDelay(100);
|
||||||
|
} // Wait for end of transmission (and for GPS module to start).
|
||||||
|
|
||||||
|
GpsAirborne(); // Send a command to GPS module to change to airborne mode.
|
||||||
|
#endif
|
||||||
|
// Reset variables to after restart state
|
||||||
|
GpsWatchdog.TriggerRestart = false;
|
||||||
|
GpsWatchdog.AfterRestart = true;
|
||||||
|
GpsWatchdog.AfterRestartCounter = 0;
|
||||||
|
GpsWatchdog.LastTime = 0;
|
||||||
|
|
||||||
|
HorusPacket.GpsResetCount++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Packet counter
|
// Packet counter
|
||||||
HorusPacket.PacketCount++;
|
HorusPacket.PacketCount++;
|
||||||
|
|
||||||
|
@ -231,78 +331,6 @@ void main_loop(void) {
|
||||||
#if LED_MODE == 1
|
#if LED_MODE == 1
|
||||||
LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
|
LL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef GPS_WATCHDOG
|
|
||||||
#if GPS_TYPE == 1
|
|
||||||
if (NmeaData.Fix >= 1 && NmeaData.Sats>0)
|
|
||||||
GpsPreviousFix = true;
|
|
||||||
if (GpsPreviousFix && (NmeaData.Fix <= 1 || NmeaData.Sats == 0)) {
|
|
||||||
GpsWatchdogCounter++;
|
|
||||||
} else {
|
|
||||||
GpsWatchdogCounter = 0;
|
|
||||||
}
|
|
||||||
#elif GPS_TYPE == 2
|
|
||||||
if (GpsData.Fix >= 1 && GpsData.Sats>0)
|
|
||||||
GpsPreviousFix = true;
|
|
||||||
if (GpsPreviousFix && (GpsData.Fix <= 1 || GpsData.Sats == 0)) {
|
|
||||||
GpsWatchdogCounter++;
|
|
||||||
} else {
|
|
||||||
GpsWatchdogCounter = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (GpsWatchdogCounter >= GPS_WATCHDOG) {
|
|
||||||
LL_GPIO_ResetOutputPin(GPS_ON_GPIO_Port, GPS_ON_Pin); // disable GPS
|
|
||||||
for(uint8_t i = 0; i<10; i++){
|
|
||||||
LL_mDelay(100);
|
|
||||||
LL_IWDG_ReloadCounter(IWDG);
|
|
||||||
}
|
|
||||||
LL_GPIO_SetOutputPin(GPS_ON_GPIO_Port, GPS_ON_Pin); // enable GPS
|
|
||||||
GpsWatchdogCounter = 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
void GPS_Handler(void) {
|
|
||||||
if (LL_LPUART_IsEnabledIT_RXNE(LPUART1) &&
|
|
||||||
LL_LPUART_IsActiveFlag_RXNE(LPUART1)) {
|
|
||||||
if (GpsBufferCounter >= GpsRxBuffer_SIZE) {
|
|
||||||
GpsBufferCounter = 0;
|
|
||||||
GpsBufferReady = true;
|
|
||||||
}
|
|
||||||
GpsRxBuffer[GpsBufferCounter] = LL_LPUART_ReceiveData8(LPUART1);
|
|
||||||
GpsBufferCounter++;
|
|
||||||
} else if (LL_LPUART_IsActiveFlag_ORE(LPUART1)) {
|
|
||||||
LL_LPUART_ClearFlag_ORE(LPUART1);
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf("ORE!\r\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void LED_Handler(void) {
|
|
||||||
#if LED_MODE == 2
|
|
||||||
#if GPS_TYPE == 1
|
|
||||||
uint8_t fix = NmeaData.Fix;
|
|
||||||
if (LED_DISABLE_ALT != 0) {
|
|
||||||
if (NmeaData.Alt >= LED_DISABLE_ALT) {
|
|
||||||
LL_TIM_DisableCounter(TIM6);
|
|
||||||
LL_TIM_DisableIT_UPDATE(TIM6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#elif GPS_TYPE == 2
|
|
||||||
uint8_t fix = GpsData.Fix;
|
|
||||||
if (LED_DISABLE_ALT != 0) {
|
|
||||||
if (GpsData.Alt >= LED_DISABLE_ALT) {
|
|
||||||
LL_TIM_DisableCounter(TIM6);
|
|
||||||
LL_TIM_DisableIT_UPDATE(TIM6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for (; fix > 0; fix--) {
|
|
||||||
LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);
|
|
||||||
LL_mDelay(50);
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
|
|
||||||
LL_mDelay(100);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
@ -316,9 +344,11 @@ int main(void) {
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
/* MCU Configuration--------------------------------------------------------*/
|
/* MCU
|
||||||
|
* Configuration--------------------------------------------------------*/
|
||||||
|
|
||||||
/* Reset of all peripherals, Initializes the Flash interface and the Systick.
|
/* Reset of all peripherals, Initializes the Flash interface and the
|
||||||
|
* Systick.
|
||||||
*/
|
*/
|
||||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
|
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
|
||||||
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
|
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
|
||||||
|
@ -345,7 +375,7 @@ int main(void) {
|
||||||
MX_TIM2_Init();
|
MX_TIM2_Init();
|
||||||
MX_TIM22_Init();
|
MX_TIM22_Init();
|
||||||
MX_ADC_Init();
|
MX_ADC_Init();
|
||||||
// MX_IWDG_Init(); // IWDG implementation after GPS
|
MX_IWDG_Init();
|
||||||
MX_TIM6_Init();
|
MX_TIM6_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
|
@ -359,6 +389,7 @@ int main(void) {
|
||||||
|
|
||||||
HorusPacket.PayloadID = PAYLOAD_ID;
|
HorusPacket.PayloadID = PAYLOAD_ID;
|
||||||
|
|
||||||
|
// Init of LPS22 sensor, try 5 times
|
||||||
for (uint8_t i = 0; i < 5; i++) {
|
for (uint8_t i = 0; i < 5; i++) {
|
||||||
lps_init = LPS22_Init();
|
lps_init = LPS22_Init();
|
||||||
if (lps_init == 0)
|
if (lps_init == 0)
|
||||||
|
@ -380,27 +411,14 @@ int main(void) {
|
||||||
|
|
||||||
#if GPS_TYPE == 1
|
#if GPS_TYPE == 1
|
||||||
// u-blox change mode to airborne
|
// u-blox change mode to airborne
|
||||||
LL_mDelay(2000);
|
DelayWithIWDG(2000); // Wait for full GPS start
|
||||||
for (uint8_t ih = 0; ih < 2; ih++) {
|
GpsAirborne(); // Send a command to GPS module to change to airborne mode.
|
||||||
for (uint8_t ig = 0; ig < 44; ig++) {
|
DelayWithIWDG(100);
|
||||||
while (!LL_LPUART_IsActiveFlag_TXE(LPUART1)) {
|
|
||||||
}
|
|
||||||
LL_LPUART_TransmitData8(LPUART1, GPS_airborne[ig]);
|
|
||||||
}
|
|
||||||
while (!LL_LPUART_IsActiveFlag_TC(LPUART1)) {
|
|
||||||
}
|
|
||||||
if (ih == 0)
|
|
||||||
LL_mDelay(900);
|
|
||||||
LL_mDelay(100);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
|
||||||
|
|
||||||
// watchdog timer
|
|
||||||
MX_IWDG_Init();
|
|
||||||
|
|
||||||
// main loop timer
|
// main loop timer
|
||||||
LL_TIM_EnableCounter(TIM22);
|
LL_TIM_EnableCounter(TIM22);
|
||||||
LL_TIM_EnableIT_UPDATE(TIM22);
|
LL_TIM_EnableIT_UPDATE(TIM22);
|
||||||
|
@ -1112,6 +1130,70 @@ static void MX_GPIO_Init(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
|
void GPS_Handler(void) {
|
||||||
|
if (LL_LPUART_IsEnabledIT_RXNE(LPUART1) &&
|
||||||
|
LL_LPUART_IsActiveFlag_RXNE(LPUART1)) {
|
||||||
|
if (GpsBufferCounter >= GpsRxBuffer_SIZE) {
|
||||||
|
GpsBufferCounter = 0;
|
||||||
|
GpsBufferReady = true;
|
||||||
|
}
|
||||||
|
GpsRxBuffer[GpsBufferCounter] = LL_LPUART_ReceiveData8(LPUART1);
|
||||||
|
GpsBufferCounter++;
|
||||||
|
} else if (LL_LPUART_IsActiveFlag_ORE(LPUART1)) {
|
||||||
|
LL_LPUART_ClearFlag_ORE(LPUART1);
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf("ORE!\r\n");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void LED_Handler(void) {
|
||||||
|
#if LED_MODE == 2
|
||||||
|
#if GPS_TYPE == 1
|
||||||
|
uint8_t fix = NmeaData.Fix;
|
||||||
|
if (LED_DISABLE_ALT != 0) {
|
||||||
|
if (NmeaData.Alt >= LED_DISABLE_ALT) {
|
||||||
|
LL_TIM_DisableCounter(TIM6);
|
||||||
|
LL_TIM_DisableIT_UPDATE(TIM6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#elif GPS_TYPE == 2
|
||||||
|
uint8_t fix = GpsData.Fix;
|
||||||
|
if (LED_DISABLE_ALT != 0) {
|
||||||
|
if (GpsData.Alt >= LED_DISABLE_ALT) {
|
||||||
|
LL_TIM_DisableCounter(TIM6);
|
||||||
|
LL_TIM_DisableIT_UPDATE(TIM6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
for (; fix > 0; fix--) {
|
||||||
|
LL_GPIO_SetOutputPin(LED_GPIO_Port, LED_Pin);
|
||||||
|
LL_mDelay(50);
|
||||||
|
LL_GPIO_ResetOutputPin(LED_GPIO_Port, LED_Pin);
|
||||||
|
LL_mDelay(100);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
void DelayWithIWDG(uint16_t time) {
|
||||||
|
for (uint8_t i = 0; i < time / 100; i++) {
|
||||||
|
LL_IWDG_ReloadCounter(IWDG);
|
||||||
|
LL_mDelay(100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if GPS_TYPE == 1
|
||||||
|
void GpsAirborne(void) {
|
||||||
|
for (uint8_t ih = 0; ih < 2; ih++) {
|
||||||
|
for (uint8_t ig = 0; ig < 44; ig++) {
|
||||||
|
while (!LL_LPUART_IsActiveFlag_TXE(LPUART1)) {
|
||||||
|
}
|
||||||
|
LL_LPUART_TransmitData8(LPUART1, GPS_airborne[ig]);
|
||||||
|
}
|
||||||
|
while (!LL_LPUART_IsActiveFlag_TC(LPUART1)) {
|
||||||
|
}
|
||||||
|
if (ih == 0)
|
||||||
|
DelayWithIWDG(900);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1120,7 +1202,8 @@ static void MX_GPIO_Init(void) {
|
||||||
*/
|
*/
|
||||||
void Error_Handler(void) {
|
void Error_Handler(void) {
|
||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state
|
||||||
|
*/
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1) {
|
while (1) {
|
||||||
}
|
}
|
||||||
|
@ -1138,8 +1221,8 @@ void Error_Handler(void) {
|
||||||
void assert_failed(uint8_t *file, uint32_t line) {
|
void assert_failed(uint8_t *file, uint32_t line) {
|
||||||
/* USER CODE BEGIN 6 */
|
/* USER CODE BEGIN 6 */
|
||||||
/* User can add his own implementation to report the file name and line
|
/* User can add his own implementation to report the file name and line
|
||||||
number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file,
|
number, ex: printf("Wrong parameters value: file %s on line %d\r\n",
|
||||||
line) */
|
file, line) */
|
||||||
/* USER CODE END 6 */
|
/* USER CODE END 6 */
|
||||||
}
|
}
|
||||||
#endif /* USE_FULL_ASSERT */
|
#endif /* USE_FULL_ASSERT */
|
||||||
|
|
|
@ -42,7 +42,7 @@ void ParseXM(XMDATA *GpsData, uint8_t *buffer, uint8_t position) {
|
||||||
((GpsData->Time & 0x00FF0000) >> 8) |
|
((GpsData->Time & 0x00FF0000) >> 8) |
|
||||||
((GpsData->Time & 0x0000FF00) << 8);
|
((GpsData->Time & 0x0000FF00) << 8);
|
||||||
|
|
||||||
if (GpsData->Fix > 1 && GpsData->Alt != 0) {
|
if (GpsData->Fix == 3 && GpsData->Alt != 0) {
|
||||||
if (GpsData->Time != 0) {
|
if (GpsData->Time != 0) {
|
||||||
if (oldTime == 0) {
|
if (oldTime == 0) {
|
||||||
oldAlt = GpsData->Alt;
|
oldAlt = GpsData->Alt;
|
||||||
|
|
Ładowanie…
Reference in New Issue