Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/c-cpp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main # Run on main
pull_request:

jobs:
build:
Expand Down
42 changes: 39 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,52 @@
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"name": "ST-Link Debug",
"cwd": "${workspaceFolder}",
"preLaunchCommands": ["make -j8"],
"executable": "./build/Lora_Receiver.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "stutil",
"device": "STM32F042",
"device": "STM32F042F6",
"interface": "swd",
"svdFile": "${workspaceFolder}/STM32F0x2.svd",
}
},
{
"name": "ST-Link Attach",
"cwd": "${workspaceFolder}",
"executable": "./build/Lora_Receiver.elf",
"request": "attach",
"type": "cortex-debug",
"servertype": "stutil",
"device": "STM32F042F6",
"interface": "swd",
"svdFile": "${workspaceFolder}/STM32F0x2.svd",
},
{
"name": "J-Link Debug",
"cwd": "${workspaceFolder}",
"executable": "./build/Lora_Receiver.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "jlink",
"device": "STM32F042F6",
"interface": "swd",
"runToEntryPoint": "main",
"svdFile": "${workspaceFolder}/STM32F0x2.svd",
"preLaunchCommands": ["make -j8"]
},
{
"name": "J-Link Attach",
"cwd": "${workspaceFolder}",
"executable": "./build/Lora_Receiver.elf",
"request": "attach",
"type": "cortex-debug",
"servertype": "jlink",
"device": "STM32F042F6",
"interface": "swd",
"runToEntryPoint": "main",
"svdFile": "${workspaceFolder}/STM32F0x2.svd"
}
]
}
48 changes: 48 additions & 0 deletions Core/Inc/gpio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/************************************************
* @file gpio.h
* @author APBashara
* @date 6/2024
*
* @brief GPIO Function Prototypes
***********************************************/

#include "stm32f042x6.h"

/* Structs and Enums --------------------------------------------------------*/
typedef enum {
GPIO_OK,
GPIO_ERROR,
} GPIO_Status;

/* Function Prototypes ------------------------------------------------------*/

/**
* @brief Initialize GPIO Pins used in the Telem system
* @note PA8 LoRa RST, PA9 LoRa INT
*
*/
void GPIO_Init();

/**
* @brief Toggle a given GPIO pin on or off
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to toggle
*/
void Toggle_Pin(GPIO_TypeDef* GPIO, uint8_t pin);

/**
* @brief Set a given GPIO pin high (Set to 1)
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to set high
*/
void Set_Pin(GPIO_TypeDef* GPIO, uint8_t pin);

/**
* @brief Clear a given GPIO pin (Set to 0)
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to set low
*/
void Clear_Pin(GPIO_TypeDef* GPIO, uint8_t pin);
148 changes: 100 additions & 48 deletions Core/Inc/main.h
Original file line number Diff line number Diff line change
@@ -1,69 +1,121 @@
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.h
* @brief : Header for main.c file.
* This file contains the common defines of the application.
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */

/* Define to prevent recursive inclusion -------------------------------------*/
/************************************************
* @file main.h
* @author APBashara
* @date 5/2025
*
* @brief Main Header File
***********************************************/

/* Define to prevent recursive inclusion ------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#ifdef __cplusplus
extern "C" {
#endif
/* Includes -----------------------------------------------------------------*/
#include "stm32f042x6.h"

/* Includes ------------------------------------------------------------------*/
#include "stm32f0xx_hal.h"
#include "usb_device.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "sysclk.h"
#include "gpio.h"

/* USER CODE END Includes */
/* System Defines -----------------------------------------------------------*/
#define LED_PIN (4)
#define LED_GPIO (GPIOA)
#define USB_BUF_LEN (128)

/* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */
// LoRa Packet IDs
#define LORA_SUSPENSION_ID (0x01) // 50 Hz
#define LORA_GPS_ID (0x02) // 25 Hz
#define LORA_ENGINE_ID (0x03) // 20 Hz
#define LORA_BRAKES_ACCEL_ID (0x04) // 10 Hz
#define LORA_TEMPERATURE_ID (0x05) // 1 Hz

/* USER CODE END ET */
/* Data Structures ---------------------------------------------------------*/
/**
* @brief 50 Hz packet with ID 0x01
* @note Contains Front and Rear Suspension Potentiometer values
*/
typedef struct {

/* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */
uint16_t FrontPot; // Front Right Suspension Damper
uint16_t RearPot; // Rear Right Suspension Damper

/* USER CODE END EC */
} LoRa_Suspension_Packet;

/* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */
/**
* @brief 25 Hz packet with ID 0x02
* @note Contains GPS Latitude, Longitude, and Speed
*/
typedef struct {

/* USER CODE END EM */
int32_t latGPS; // Latitude GPS
int32_t longGPS; // Longitude GPS
int32_t Speed; // Vehicle GPS Speed

/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);
} LoRa_GPS_Packet;

/* USER CODE BEGIN EFP */
/**
* @brief 20 Hz packet with ID 0x03
* @note Contains Engine RPM, Throttle Position, Steering Angle, and Brake Pressure
*/
typedef struct {

uint16_t BrakePressure; // Brake Pressure
uint16_t ThrottleADC; // Analog Throttle Position
uint16_t Steering; // Steering Angle
uint16_t RPM; // Engine RPM
uint16_t ThrottlePosSensor; // Throttle Position from ECU
uint16_t Lambda; // Lambda

/* USER CODE END EFP */
} LoRa_Engine_Data_Packet;

/* Private defines -----------------------------------------------------------*/
/**
* @brief 10 Hz packet with ID 0x04
* @note Contains Oil Pressure, Front and Rear Brake Temp, and Accelerometer values
*/
typedef struct {

/* USER CODE BEGIN Private defines */
uint16_t OilPressure; // Oil Pressure
uint16_t FrontBrakeTemp; // Front Right Brake Temp (F)
uint16_t RearBrakeTemp; // Rear Right Brake Temp (F)
uint16_t AccelX; // Accelerometer X Axis
uint16_t AccelZ; // Accelerometer Z Axis
uint16_t AccelY; // Accelerometer Y Axis

/* USER CODE END Private defines */
} LoRa_Brakes_Accel_Packet;

/**
* @brief 1 Hz packet with ID 0x05
* @note Contains Air and Coolant Temp
*/
typedef struct {

uint16_t AirTemp; // Air Temp (F)
uint16_t CoolTemp; // Coolant Temp (F)

} LoRa_Temperature_Packet;

/**
* @brief Telemetry Struct to hold all Telemetry Data
* @note Anything not in a LoRa packet should be in this struct
*/
typedef struct {
// LoRa Packets
LoRa_Suspension_Packet Suspension_Packet; // 50 Hz
LoRa_GPS_Packet GPS_Packet; // 25 Hz
LoRa_Engine_Data_Packet Engine_Data_Packet; // 20 Hz
LoRa_Brakes_Accel_Packet Brakes_Accel_Packet; // 10 Hz
LoRa_Temperature_Packet Temperature_Packet; // 1 Hz

} Telemetry;

/* Functions prototypes -----------------------------------------------------*/

/**
* @brief Handles system errors.
*
*/
void Error_Handler(void);

#ifdef __cplusplus
}
#endif

#endif /* __MAIN_H */
2 changes: 1 addition & 1 deletion Core/Inc/stm32f0xx_hal_conf.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
/*#define HAL_SMARTCARD_MODULE_ENABLED */
/*#define HAL_SMBUS_MODULE_ENABLED */
/*#define HAL_WWDG_MODULE_ENABLED */
/*#define HAL_PCD_MODULE_ENABLED */
#define HAL_PCD_MODULE_ENABLED
#define HAL_CORTEX_MODULE_ENABLED
#define HAL_DMA_MODULE_ENABLED
#define HAL_FLASH_MODULE_ENABLED
Expand Down
3 changes: 2 additions & 1 deletion Core/Inc/stm32f0xx_it.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* Copyright (c) 2025 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
Expand Down Expand Up @@ -51,6 +51,7 @@ void HardFault_Handler(void);
void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);
void USB_IRQHandler(void);
/* USER CODE BEGIN EFP */

/* USER CODE END EFP */
Expand Down
53 changes: 53 additions & 0 deletions Core/Src/gpio.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/************************************************
* @file gpio.c
* @author APBashara
* @date 6/2024
*
* @brief Basic GPIO Driver
***********************************************/

#include "gpio.h"

void GPIO_Init() {
// Enable GPIO Clock
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
SYSCFG->CFGR1 |= SYSCFG_CFGR1_PA11_PA12_RMP; // Remap PA11 and PA12 for USB

// Configure USB and LED pins
GPIOA->MODER &= ~GPIO_MODER_MODER4;
GPIOA->MODER |= (1 << GPIO_MODER_MODER4_Pos);
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_4;
GPIOA->OSPEEDR &= ~GPIO_OSPEEDR_OSPEEDR4;
GPIOA->OSPEEDR |= (1 << GPIO_OSPEEDR_OSPEEDR4_Pos);
GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR4;
}

/**
* @brief Toggle a given GPIO pin on or off
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to toggle
*/
void Toggle_Pin(GPIO_TypeDef* GPIO, uint8_t pin) {
GPIO->ODR ^= (1 << pin);
}

/**
* @brief Set a given GPIO pin high (Set to 1)
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to set high
*/
void Set_Pin(GPIO_TypeDef* GPIO, uint8_t pin) {
GPIO->BSRR |= (1 << pin);
}

/**
* @brief Clear a given GPIO pin (Set to 0)
*
* @param GPIO [GPIO_TypeDef*] GPIO Port to use
* @param pin [uint8_t] Pin to set low
*/
void Clear_Pin(GPIO_TypeDef* GPIO, uint8_t pin) {
GPIO->BSRR |= (1 << (pin+16));
}
Loading