Advertisement
Guest User

Untitled

a guest
Apr 4th, 2020
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.01 KB | None | 0 0
  1. #include "stm32f4xx.h"                  // Device header
  2. #include "FreeRTOS.h"                   // ARM.FreeRTOS::RTOS:Core
  3. #include "FreeRTOSConfig.h"             // ARM.FreeRTOS::RTOS:Config
  4. #include "Task.h"
  5. #include "queue.h"
  6. //MAP 0x40000000, 0x400FFFFF EXEC READ WRITE
  7.  
  8. void vTask2(void* pvParams){
  9.     while(1){
  10.         for (char i=0;i<4;i++){
  11.             GPIOA->ODR &= ~(GPIO_ODR_ODR_8 | GPIO_ODR_ODR_9 | GPIO_ODR_ODR_10 | GPIO_ODR_ODR_11
  12. | GPIO_ODR_ODR_12 | GPIO_ODR_ODR_13);
  13.             GPIOA->ODR &= ~GPIO_ODR_ODR_10;
  14.             GPIOA->ODR &= ~GPIO_ODR_ODR_11;
  15.             GPIOA->ODR |= GPIO_ODR_ODR_8;
  16.             GPIOA->ODR |= GPIO_ODR_ODR_13;
  17.             for (int i=0;i<16000000/20;i++) {
  18.             }
  19.                         //With the CPU's frequency at 16 MHz and tick frequency 1000 Hz
  20.                         //16000000/20 iterations are equal to ~800 ticks (0.8 seconds)
  21.             GPIOA->ODR &= ~GPIO_ODR_ODR_8;
  22.             GPIOA->ODR &= ~GPIO_ODR_ODR_13;
  23.             GPIOA->ODR |= GPIO_ODR_ODR_9;
  24.             GPIOA->ODR |= GPIO_ODR_ODR_12;
  25.             for (int i=0;i<16000000/20;i++) {
  26.             }
  27.             GPIOA->ODR &= ~GPIO_ODR_ODR_9;
  28.             GPIOA->ODR &= ~GPIO_ODR_ODR_12;
  29.             GPIOA->ODR |= GPIO_ODR_ODR_10;
  30.             GPIOA->ODR |= GPIO_ODR_ODR_11;
  31.             for (int i=0;i<16000000/20;i++) {
  32.             }
  33.         }
  34.         for (int i=0;i<16000000/3200;i++) {
  35.         } //5 ticks
  36.     }
  37. }
  38.  
  39. void vTask1(void* pvParams){
  40.     while(1){
  41.             for (char i=0;i<4;i++){
  42.             GPIOA->ODR |= GPIO_ODR_ODR_5;
  43.  
  44.                 for (int i=0;i<16000000/32;i++){
  45.                 } //0.5 seconds
  46.  
  47.                 GPIOA->ODR &= ~GPIO_ODR_ODR_5;
  48.  
  49.                 for (int i=0;i<16000000/32;i++) {
  50.                 }
  51.             }
  52.             for (int i=0;i<16000000/160;i++) {
  53.             }
  54.     }
  55. }
  56.  
  57. int main(void){
  58.         RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
  59.         //pin A5, A8-A13
  60.         GPIOA->MODER |= GPIO_MODER_MODER5_0 | GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0 | GPIO_MODER_MODER10_0
  61.         | GPIO_MODER_MODER11_0 | GPIO_MODER_MODER12_0 | GPIO_MODER_MODER13_0;
  62.  
  63.         xTaskCreate(vTask1, "DiodeBlink", configMINIMAL_STACK_SIZE, NULL, 3, NULL);
  64.         xTaskCreate(vTask2, "DiodeLine", configMINIMAL_STACK_SIZE, NULL, 4, NULL);
  65.         vTaskStartScheduler();
  66.  
  67.         while(1){
  68.         }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement