#include "FreeRTOS.h"
#include "task.h"
#include "stm32c0xx_hal.h"
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 0
#define configUSE_TICK_HOOK 0
#define configCPU_CLOCK_HZ (SystemCoreClock)
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configMAX_PRIORITIES 5
#define configMINIMAL_STACK_SIZE ((unsigned short)128)
#define configTOTAL_HEAP_SIZE ((size_t)(10 * 1024))
#define configUSE_16_BIT_TICKS 0
// Tâche pour la LED 1
void LEDTask1(void *pvParameters) {
TickType_t LastWakeTime = xTaskGetTickCount();
while (1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // Basculer l'état de la LED PA5
//vTaskDelay(pdMS_TO_TICKS(500)); // Délai de 500 ms
//HAL_Delay(500);
vTaskDelayUntil(&LastWakeTime,pdMS_TO_TICKS(500));
}
}
// Tâche pour la LED 2
void LEDTask2(void *pvParameters) {
TickType_t LastWakeTime = xTaskGetTickCount();
while (1) {
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_6); // Basculer l'état de la LED PA6
//vTaskDelay(pdMS_TO_TICKS(1500));// Délai de 300 ms
//HAL_Delay(1500);
vTaskDelayUntil(&LastWakeTime,pdMS_TO_TICKS(1500));
}
}
void LEDTask3(void *pvParameters) {
TickType_t LastWakeTime = xTaskGetTickCount();
while (1) {
HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_7); // Basculer l'état de la LED PA6
//vTaskDelay(pdMS_TO_TICKS(200));// Délai de 300 ms
//HAL_Delay(1500);
vTaskDelayUntil(&LastWakeTime,pdMS_TO_TICKS(200));
}
}
void loop() {
// Fonction vide pour satisfaire la référence à loop()
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
// Création des tâches FreeRTOS
xTaskCreate(LEDTask1,"taskLed_Rouge",128,NULL,1,NULL);
xTaskCreate(LEDTask2,"TaskLed_Blue",128,NULL,2,NULL);
xTaskCreate(LEDTask3,"TaskLed_yellow",128,NULL,3,NULL);
// Démarrage du planificateur
vTaskStartScheduler();
while (1) {
// Boucle inactive
}
}
void SystemClock_Config(void) {
// Configuration de l'horloge pour STM32C031C6
}
void MX_GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
// Configuration de la LED 1 (PA5)
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// Configuration de la LED 2 (PA6)
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_7;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}