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 vTask1(void* pvParams){
- TaskHandle_t* Task2Handle; //A local pointer to second task's handle
- Task2Handle = (TaskHandle_t*) (pvParams);
- while(1){
- vTaskSuspend(*Task2Handle);
- for (char i=0;i<4*2;i++){
- GPIOA->ODR |= GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(1000));
- GPIOA->ODR &= ~GPIO_ODR_ODR_5;
- vTaskDelay(pdMS_TO_TICKS(1000)); //Diode flash frequency is 0.5 Hz
- }
- vTaskResume(*Task2Handle);
- vTaskDelay(pdMS_TO_TICKS(2000));
- }
- }
- void vTask2(void* pvParams){
- while(1) {
- for (char i=0;i<4;i++){
- GPIOA->ODR &= ~GPIO_ODR_ODR_10;
- GPIOA->ODR &= ~GPIO_ODR_ODR_11;
- GPIOA->ODR |= GPIO_ODR_ODR_8;
- GPIOA->ODR |= GPIO_ODR_ODR_13;
- vTaskDelay(pdMS_TO_TICKS(500));
- GPIOA->ODR &= ~GPIO_ODR_ODR_8;
- GPIOA->ODR &= ~GPIO_ODR_ODR_13;
- 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_10;
- GPIOA->ODR |= GPIO_ODR_ODR_11;
- vTaskDelay(pdMS_TO_TICKS(500));
- }
- vTaskDelay(5);
- }
- }
- TaskHandle_t Task2Handle = NULL;
- int main(void){
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
- //pin A5, A8-A13
- 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(vTask2, "DiodeLine", configMINIMAL_STACK_SIZE, NULL, 1, &Task2Handle);
- xTaskCreate(vTask1, "DiodeBlink", configMINIMAL_STACK_SIZE, (void*) &Task2Handle, 1, NULL);
- vTaskStartScheduler();
- while(1){
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement