diff --git a/Timelapse_keyboard/GPS.c b/Timelapse_keyboard/GPS.c index 639a79d..b684f42 100644 --- a/Timelapse_keyboard/GPS.c +++ b/Timelapse_keyboard/GPS.c @@ -155,7 +155,8 @@ void GPS_parse_answer(uint8_t *buf){ *ptr++ = 0; if(*ptr == 'A'){ GPS_status = GPS_VALID; - set_time(buf); - }else + }else{ GPS_status = GPS_NOT_VALID; + } + set_time(buf); } diff --git a/Timelapse_keyboard/Makefile b/Timelapse_keyboard/Makefile index 821ad23..5c38f09 100644 --- a/Timelapse_keyboard/Makefile +++ b/Timelapse_keyboard/Makefile @@ -1,8 +1,7 @@ BINARY = timelapse BOOTPORT ?= /dev/ttyUSB0 BOOTSPEED ?= 115200 -# change this linking script depending on particular MCU model, -# for example, if you have STM32F103VBT6, you should write: +# change this linking script depending on particular MCU model LDSCRIPT = ld/stm32f103x8.ld LIBNAME = opencm3_stm32f1 # add -DULTRASONIC to compile with ultrasonic distance-meter support diff --git a/Timelapse_keyboard/hardware_ini.h b/Timelapse_keyboard/hardware_ini.h index fb497b7..c207f77 100644 --- a/Timelapse_keyboard/hardware_ini.h +++ b/Timelapse_keyboard/hardware_ini.h @@ -35,15 +35,15 @@ void GPIO_init(); void SysTick_init(); -// yellow LEDs: PA11, PA12 +// yellow LEDs: PA11, PA12; Y1- - trigr, Y2 - PPS #define LEDS_Y_PORT GPIOA #define LEDS_Y1_PIN GPIO13 #define LEDS_Y2_PIN GPIO15 -// green LEDs: PB7, PB8 +// green LEDs: PB7, PB8; G1 - GPS rdy #define LEDS_G_PORT GPIOB #define LEDS_G1_PIN GPIO7 #define LEDS_G2_PIN GPIO8 -// red LEDs: PB6, PB5 +// red LEDs: PB6, PB5; R2 - power #define LEDS_R_PORT GPIOB #define LEDS_R1_PIN GPIO6 #define LEDS_R2_PIN GPIO5 diff --git a/Timelapse_keyboard/main.c b/Timelapse_keyboard/main.c index c125220..6986362 100644 --- a/Timelapse_keyboard/main.c +++ b/Timelapse_keyboard/main.c @@ -65,7 +65,8 @@ void time_increment(){ } int main(void){ - uint8_t *string, *lastGPSans = NULL; // string from UART2 & pointer to last full GPS answer + uint8_t *string; // string from UART2 & pointer to last full GPS answer + uint8_t lastGPSans[UART_BUF_DATA_SIZE] = {0}; int i; rcc_clock_setup_in_hse_8mhz_out_72mhz(); // init systick (1ms) @@ -107,6 +108,8 @@ int main(void){ iwdg_set_period_ms(50); // set watchdog timeout to 50ms iwdg_start(); while(1){ + if(Timer == 500) // turn off PPS LED after 500ms + gpio_set(LEDS_Y_PORT, LEDS_Y2_PIN); poll_usbkeybrd(); if(usbkbrdtm != msctr){ // process USB not frequently than once per 1ms process_usbkbrd(); @@ -117,7 +120,7 @@ int main(void){ #endif poll_ADC(); if((string = check_UART2())){ - lastGPSans = string; + memcpy(lastGPSans, string, UART_BUF_DATA_SIZE); GPS_parse_answer(string); } /* @@ -149,7 +152,7 @@ if(msctr - trigrtm > 3000){ istriggered = 1; P("Button time: "); print_time(&trigger_time, trigger_ms); - if(lastGPSans){ + if(*lastGPSans){ P("GPS last message: "); send_msg((char*)lastGPSans); newline(); @@ -221,11 +224,12 @@ if(msctr - trigrtm > 3000){ } // check GPS status to turn on/off GPS LED if(current_time.H < 24){ // timer OK - if(GPS_status != GPS_VALID || need_sync) + if((GPS_status != GPS_VALID) || need_sync){ GPSLEDblink = 1; - else if(GPSLEDblink){ + }else{ GPSLEDblink = 0; - gpio_clear(LEDS_G_PORT, LEDS_G1_PIN); // turn ON G1 LED + if((GPIO_ODR(LEDS_G_PORT) & LEDS_G1_PIN) == 0) + gpio_clear(LEDS_G_PORT, LEDS_G1_PIN); // turn ON G1 LED } if(GPSLEDblink){ if(msctr - GPSstatus_tm > 500 || msctr < GPSstatus_tm){ @@ -268,6 +272,7 @@ void exti4_isr(){ uint32_t t = 0, ticks; static uint32_t ticksavr = 0, N = 0; if(EXTI_PR & EXTI4){ + gpio_clear(LEDS_Y_PORT, LEDS_Y2_PIN); // correct systick_val = STK_CVR; STK_CVR = RVR0; diff --git a/Timelapse_keyboard/timelapse.bin b/Timelapse_keyboard/timelapse.bin index fe2eca1..80acb08 100755 Binary files a/Timelapse_keyboard/timelapse.bin and b/Timelapse_keyboard/timelapse.bin differ