From 0c40f21ffc56320ed3f9661d08722328b68eafe0 Mon Sep 17 00:00:00 2001 From: Alex Bashara Date: Wed, 11 Sep 2024 22:19:00 -0500 Subject: [PATCH] Setup tasks --- Core/Inc/main.h | 28 +++++++++++++++++++ Core/Src/can.c | 1 + Core/Src/main.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 5a53834..4b57b9b 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -73,6 +73,34 @@ void Status_LED(void *argument); */ void CAN_Task(void *argument); +/** + * @brief Update the values on the driver display + * + * @param argument + */ +void Display_Update(void *argument); + +/** + * @brief Update GPS Values + * + * @param argument + */ +void GPS_Update(void *argument); + +/** + * @brief Send the Telemetry Data over Lora + * + * @param argument + */ +void Lora_Send(void *argument); + +/** + * @brief Update ADC values + * + * @param argument + */ +void ADC_Update(void *argument); + /** * @brief Main Function to start FreeRTOS and initialize peripherals * diff --git a/Core/Src/can.c b/Core/Src/can.c index ba285d4..473e908 100644 --- a/Core/Src/can.c +++ b/Core/Src/can.c @@ -76,6 +76,7 @@ CAN_Status CAN_Filters_Init() { CAN1->FA1R |= CAN_FA1R_FACT_Msk; // Enable Filter 0 CAN1->FMR &= ~CAN_FMR_FINIT; // Exit Filter Initialization Mode + return CAN_OK; } CAN_Status CAN_Start() { diff --git a/Core/Src/main.c b/Core/Src/main.c index 15fba3e..7c4d34a 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -10,6 +10,7 @@ /* Global Variables ---------------------------------------------------------*/ Telemetry telemetry; +uint16_t adc_value[16]; /* Thread Attributes --------------------------------------------------------*/ osThreadId_t StatusLED; @@ -26,12 +27,44 @@ const osThreadAttr_t CANTask_attr = { .stack_size = 128 }; +osThreadId_t DisplayTask; +const osThreadAttr_t DisplayTask_attr = { + .name = "Display_Task", + .priority = osPriorityNormal, + .stack_size = 128 +}; + +osThreadId_t GPSTask; +const osThreadAttr_t GPSTask_attr = { + .name = "GPS_Task", + .priority = osPriorityNormal, + .stack_size = 128 +}; + +osThreadId_t LoraTask; +const osThreadAttr_t LoraTask_attr = { + .name = "Lora_Task", + .priority = osPriorityNormal, + .stack_size = 128 +}; + +osThreadId_t ADCTask; +const osThreadAttr_t ADC_Task_attr = { + .name = "ADC_Task", + .priority = osPriorityNormal, + .stack_size = 128 +}; + void main() { osKernelInitialize(); // Initialize FreeRTOS // Initialize Peripherals Sysclk_168(); + DMA_ADC1_Init(&adc_value); LED_Init(); + USART3_Init(); + I2C1_Init(); + SPI2_Init(); CAN1_Init(); CAN_Filters_Init(); CAN_Start(); @@ -39,6 +72,10 @@ void main() { // Create FreeRTOS Threads StatusLED = osThreadNew(Status_LED, NULL, &StatusLED_attr); CANTask = osThreadNew(CAN_Task, NULL, &CANTask_attr); + DisplayTask = osThreadNew(Display_Update, NULL, &DisplayTask_attr); + GPSTask = osThreadNew(GPS_Update, NULL, &GPSTask_attr); + LoraTask = osThreadNew(Lora_Send, NULL, &LoraTask_attr); + ADCTask = osThreadNew(ADC_Update, NULL, &ADC_Task_attr); osKernelStart(); // Start FreeRTOS while(1); @@ -63,4 +100,40 @@ void CAN_Task(void *argument) { } osDelay(1000); } +} + +void Display_Update(void *argument) { + uint8_t message[64]; + + while(1) { + sprintf(message, "RPM: %d\n", telemetry.RPM); + send_String(USART3, message); + osDelay(1000); + } +} + +void GPS_Update(void *argument) { + uint8_t message[64]; + + while(1) { + // TODO: Implement GPS Task + } +} + +void Lora_Send(void *argument) { + + while(1) { + // TODO: Implement Lora Task + } +} + +void ADC_Update(void *argument) { + + while(1) { + // TODO: Set update rates + telemetry.TPS = adc_value[0]; + telemetry.FOT = adc_value[1]; + telemetry.IA = adc_value[2]; + osDelay(1000); + } } \ No newline at end of file