Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h" // Device header
- #include "FreeRTOS.h" // ARM.FreeRTOS::RTOS:Core
- #include "FreeRTOSConfig.h" // ARM.FreeRTOS::RTOS:Config
- #include "Task.h"
- #include "queue.h"
- void vBlinkTask(void* pvParams)
- {
- TaskHandle_t* LineTaskHandle;
- LineTaskHandle = (TaskHandle_t*) (pvParams);
- while(1)
- {
- vTaskSuspend(*LineTaskHandle);
- for (char i=0;i<6;i++)
- {
- GPIOA->ODR |= GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(100));
- GPIOA->ODR &= ~GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(100));
- }
- vTaskResume(*LineTaskHandle);
- vTaskDelay(pdMS_TO_TICKS(2000));
- }
- }
- void vLineTask(void* pvParams)
- {
- while(1)
- {
- for (char i=0;i<3;i++)
- {
- GPIOA->ODR &= ~GPIO_ODR_ODR_8;
- GPIOA->ODR &= ~GPIO_ODR_ODR_13;
- GPIOA->ODR |= GPIO_ODR_ODR_10;
- GPIOA->ODR |= GPIO_ODR_ODR_11;
- vTaskDelay(pdMS_TO_TICKS(500));
- GPIOA->ODR &= ~GPIO_ODR_ODR_10;
- GPIOA->ODR &= ~GPIO_ODR_ODR_11;
- GPIOA->ODR |= GPIO_ODR_ODR_9;
- GPIOA->ODR |= GPIO_ODR_ODR_12;
- vTaskDelay(pdMS_TO_TICKS(500));
- GPIOA->ODR &= ~GPIO_ODR_ODR_9;
- GPIOA->ODR &= ~GPIO_ODR_ODR_12;
- GPIOA->ODR |= GPIO_ODR_ODR_8;
- GPIOA->ODR |= GPIO_ODR_ODR_13;
- vTaskDelay(pdMS_TO_TICKS(500));
- }
- }
- }
- TaskHandle_t LineTaskHandle = NULL;
- int main(void)
- {
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- GPIOA->MODER |= GPIO_MODER_MODER5_0 | GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0 | GPIO_MODER_MODER10_0 | GPIO_MODER_MODER11_0 | GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0;
- xTaskCreate(vBlinkTask, "BlinkingDiode", configMINIMAL_STACK_SIZE, (void*)&LineTaskHandle, 1, NULL);
- xTaskCreate(vLineTask, "DiodeLine", configMINIMAL_STACK_SIZE, NULL, 1, &LineTaskHandle);
- vTaskStartScheduler();
- while(1)
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement