From 5146b6a75213b3bb00691712d84005703b60ce7d Mon Sep 17 00:00:00 2001 From: Alex Bashara Date: Mon, 19 May 2025 22:40:41 -0700 Subject: [PATCH 1/2] WIP GPS Reset Pin --- Core/Inc/main.h | 1 + Core/Src/gpio.c | 3 +++ Core/Src/main.c | 3 +++ 3 files changed, 7 insertions(+) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index a27ff3d..ee06fc4 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -52,6 +52,7 @@ extern "C" { // Constant Definitions #define STATUS_LED_PIN (13) #define GPS_ADDR (0x42) +#define GPS_RST_PIN (8) #define SUS_POT_TRAVEL (50) #define THERMOCOUPLE_CONVERSION (100) diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index 21a1997..fd9abba 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -26,6 +26,7 @@ void LED_Init() { void GPIO_Init() { // Enable GPIO A Clock RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; + RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // Set GPIO Pins to Output mode // Pins reset to push pull mode @@ -34,6 +35,8 @@ void GPIO_Init() { GPIOA->OSPEEDR &= ~GPIO_OSPEEDR_OSPEED8 & ~GPIO_OSPEEDR_OSPEED9; GPIOA->OSPEEDR |= (0x1 << GPIO_OSPEEDR_OSPEED8_Pos) | (0x1 << GPIO_OSPEEDR_OSPEED9_Pos); GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD8 & ~GPIO_PUPDR_PUPD9; + + // TODO: GPIOB Config for GPS reset pin } GPIO_Status GPIO_EXTI_Init(GPIO_TypeDef* GPIO, uint8_t pin) { diff --git a/Core/Src/main.c b/Core/Src/main.c index 3830382..85cba45 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -127,6 +127,9 @@ void GPS_Task() { GPS_Status status; volatile GPS_Data data; const TickType_t GPSFrequency = 40; // 25 Hz + Clear_Pin(GPIOB, GPS_RST_PIN); // Turn off GPS Power + vTaskDelay(100); + Set_Pin(GPIOB, GPS_RST_PIN); // Turn on GPS Power vTaskDelay(1000); // Delay for GPS Module to Boot status = GPS_Init(); From 5974691717cf34569178aa7cfdb65e6f65753c84 Mon Sep 17 00:00:00 2001 From: Alex Bashara Date: Tue, 20 May 2025 19:26:54 -0700 Subject: [PATCH 2/2] Added GPS reset logic --- Core/Inc/main.h | 1 + Core/Src/gpio.c | 17 +++++++++++------ Core/Src/main.c | 6 +++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index ee06fc4..f08d411 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -53,6 +53,7 @@ extern "C" { #define STATUS_LED_PIN (13) #define GPS_ADDR (0x42) #define GPS_RST_PIN (8) +#define LORA_RST_PIN (8) #define SUS_POT_TRAVEL (50) #define THERMOCOUPLE_CONVERSION (100) diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c index fd9abba..91f6545 100644 --- a/Core/Src/gpio.c +++ b/Core/Src/gpio.c @@ -24,19 +24,24 @@ void LED_Init() { } void GPIO_Init() { - // Enable GPIO A Clock + // Enable GPIO Clocks RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; - // Set GPIO Pins to Output mode - // Pins reset to push pull mode - GPIOA->MODER &= ~GPIO_MODER_MODE8 & ~GPIO_MODER_MODE9; // Clear RST Pin + // Configure LoRa Reset and Interrupt Pins + GPIOA->MODER &= ~GPIO_MODER_MODE8 & ~GPIO_MODER_MODE9; GPIOA->MODER |= (0x1 << GPIO_MODER_MODE8_Pos) | (0x0 << GPIO_MODER_MODE9_Pos); GPIOA->OSPEEDR &= ~GPIO_OSPEEDR_OSPEED8 & ~GPIO_OSPEEDR_OSPEED9; - GPIOA->OSPEEDR |= (0x1 << GPIO_OSPEEDR_OSPEED8_Pos) | (0x1 << GPIO_OSPEEDR_OSPEED9_Pos); + GPIOA->OSPEEDR |= (0x1 << GPIO_OSPEEDR_OSPEED9_Pos); GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD8 & ~GPIO_PUPDR_PUPD9; + GPIOA->PUPDR |= (0x2 << GPIO_PUPDR_PUPD8_Pos); - // TODO: GPIOB Config for GPS reset pin + // GPS Reset Pin + GPIOB->MODER &= ~GPIO_MODER_MODE8; + GPIOB->MODER |= (0x1 << GPIO_MODER_MODE8_Pos); + GPIOB->OTYPER &= ~GPIO_OTYPER_OT8; // Push Pull + GPIOB->OSPEEDR &= ~GPIO_OSPEEDR_OSPEED8; + GPIOB->PUPDR &= ~GPIO_PUPDR_PUPD8; // No Pull up/down } GPIO_Status GPIO_EXTI_Init(GPIO_TypeDef* GPIO, uint8_t pin) { diff --git a/Core/Src/main.c b/Core/Src/main.c index 85cba45..4ae717b 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -42,7 +42,8 @@ void main() { GPIO_Init(); DMA_ADC1_Init(&ADC_Buffer); USART3_Init(); - Lora_Init(); + Lora_Init(); + Clear_Pin(GPIOA, LORA_RST_PIN); // Turn On LoRa Module // Create Tasks to collect Data Task_Status &= xTaskCreate(ADC_Task, "ADC_Task", 128, NULL, ADC_PRIORITY, NULL); @@ -127,9 +128,12 @@ void GPS_Task() { GPS_Status status; volatile GPS_Data data; const TickType_t GPSFrequency = 40; // 25 Hz + + // Reset GPS Module Clear_Pin(GPIOB, GPS_RST_PIN); // Turn off GPS Power vTaskDelay(100); Set_Pin(GPIOB, GPS_RST_PIN); // Turn on GPS Power + vTaskDelay(1000); // Delay for GPS Module to Boot status = GPS_Init();