Advertisement
RybaSG

Untitled

Jan 21st, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. #include "stm32f4xx.h"
  2.  
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "semphr.h"
  6. #include "queue.h"
  7.  
  8. static void prvSetupHardware(void);
  9. void vLEDTask(void *pvParameters);
  10.  
  11. int main(void)
  12. {
  13. prvSetupHardware();
  14. int value = 1;
  15. xTaskCreate(vLEDTask, "LEDTask1", 100, (void*)value, 1, NULL);
  16. value = 0;
  17. xTaskCreate(vLEDTask, "LEDTask2", 100, (void*)value, 1, NULL);
  18. vTaskStartScheduler();
  19.  
  20. SemaphoreHandle_t semaphore = xSemaphoreCreateBinary();
  21.  
  22. // // External interrupt config
  23. // RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // Enable SYSCFG clock enable
  24. // SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI12_PB; // Enable EXTI12 interrupt line for PB12
  25. // EXTI->IMR |= EXTI_IMR_MR12; // Interrupt mask register
  26. // EXTI->FTSR |= EXTI_FTSR_TR12; // Falling edge trigger
  27. // NVIC_EnableIRQ(EXTI15_10_IRQn); // Enable interrupts lines 15:10
  28. //
  29. // // TIM1 interrupt config
  30. // RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
  31. // TIM1->PSC = 999;
  32. // TIM1->ARR = 3999;
  33. // TIM1->DIER |= TIM_DIER_UIE; // Update interrupt enable
  34. // TIM1->CR1 |= TIM_CR1_CEN; // Counter enable
  35. // NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
  36.  
  37. SysTick_Config(8000000);
  38.  
  39. while(1) {}
  40.  
  41. return 0;
  42. }
  43.  
  44. static void prvSetupHardware(void)
  45. {
  46. RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
  47.  
  48. GPIOB->MODER |= GPIO_MODER_MODER14_0; // Red LED
  49. GPIOB->MODER |= GPIO_MODER_MODER15_0; // Green LED
  50. GPIOB->MODER |= GPIO_MODER_MODER13_0; // Blue LED
  51. GPIOB->ODR |= GPIO_ODR_ODR_14;
  52. GPIOB->ODR |= GPIO_ODR_ODR_15;
  53. GPIOB->ODR |= GPIO_ODR_ODR_13;
  54.  
  55. GPIOB->MODER &= ~GPIO_MODER_MODER12_1; // Input Button
  56. GPIOB->MODER &= ~GPIO_MODER_MODER12_0; // Input Button
  57. }
  58.  
  59. void vLEDTask(void *pvParameters)
  60. {
  61. int value = (int)pvParameters;
  62.  
  63. for (;;)
  64. {
  65. if(value == 1)
  66. {
  67. GPIOB->ODR |= GPIO_ODR_ODR_15;
  68. vTaskDelay( 500 / portTICK_RATE_MS );
  69. GPIOB->ODR &= ~GPIO_ODR_ODR_15;
  70. vTaskDelay( 500 / portTICK_RATE_MS );
  71. }
  72. else
  73. {
  74. GPIOB->ODR &= ~GPIO_ODR_ODR_14;
  75. vTaskDelay( 500 / portTICK_RATE_MS );
  76. GPIOB->ODR |= GPIO_ODR_ODR_14;
  77. vTaskDelay( 500 / portTICK_RATE_MS );
  78. }
  79. }
  80.  
  81. vTaskDelete(NULL);
  82. }
  83.  
  84. __attribute((interrupt)) void TIM1_UP_TIM10_IRQHandler(void)
  85. {
  86. TIM1->SR = ~TIM_SR_UIF;
  87. GPIOB->ODR ^= GPIO_ODR_ODR_13;
  88. }
  89.  
  90. //__attribute((interrupt)) void SysTick_Handler(void)
  91. //{
  92. // GPIOB->ODR ^= GPIO_ODR_ODR_14;
  93. //}
  94.  
  95. __attribute((interrupt)) void EXTI15_10_IRQHandler(void)
  96. {
  97. EXTI->PR = EXTI_PR_PR12;
  98. GPIOB->ODR ^= GPIO_ODR_ODR_15;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement