Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h"
- #include "FreeRTOS.h"
- #include "task.h"
- #include "semphr.h"
- #include "queue.h"
- static void prvSetupHardware(void);
- void vLEDTask(void *pvParameters);
- int main(void)
- {
- prvSetupHardware();
- int value = 1;
- xTaskCreate(vLEDTask, "LEDTask1", 100, (void*)value, 1, NULL);
- value = 0;
- xTaskCreate(vLEDTask, "LEDTask2", 100, (void*)value, 1, NULL);
- vTaskStartScheduler();
- SemaphoreHandle_t semaphore = xSemaphoreCreateBinary();
- // // External interrupt config
- // RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // Enable SYSCFG clock enable
- // SYSCFG->EXTICR[3] |= SYSCFG_EXTICR4_EXTI12_PB; // Enable EXTI12 interrupt line for PB12
- // EXTI->IMR |= EXTI_IMR_MR12; // Interrupt mask register
- // EXTI->FTSR |= EXTI_FTSR_TR12; // Falling edge trigger
- // NVIC_EnableIRQ(EXTI15_10_IRQn); // Enable interrupts lines 15:10
- //
- // // TIM1 interrupt config
- // RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
- // TIM1->PSC = 999;
- // TIM1->ARR = 3999;
- // TIM1->DIER |= TIM_DIER_UIE; // Update interrupt enable
- // TIM1->CR1 |= TIM_CR1_CEN; // Counter enable
- // NVIC_EnableIRQ(TIM1_UP_TIM10_IRQn);
- SysTick_Config(8000000);
- while(1) {}
- return 0;
- }
- static void prvSetupHardware(void)
- {
- RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
- GPIOB->MODER |= GPIO_MODER_MODER14_0; // Red LED
- GPIOB->MODER |= GPIO_MODER_MODER15_0; // Green LED
- GPIOB->MODER |= GPIO_MODER_MODER13_0; // Blue LED
- GPIOB->ODR |= GPIO_ODR_ODR_14;
- GPIOB->ODR |= GPIO_ODR_ODR_15;
- GPIOB->ODR |= GPIO_ODR_ODR_13;
- GPIOB->MODER &= ~GPIO_MODER_MODER12_1; // Input Button
- GPIOB->MODER &= ~GPIO_MODER_MODER12_0; // Input Button
- }
- void vLEDTask(void *pvParameters)
- {
- int value = (int)pvParameters;
- for (;;)
- {
- if(value == 1)
- {
- GPIOB->ODR |= GPIO_ODR_ODR_15;
- vTaskDelay( 500 / portTICK_RATE_MS );
- GPIOB->ODR &= ~GPIO_ODR_ODR_15;
- vTaskDelay( 500 / portTICK_RATE_MS );
- }
- else
- {
- GPIOB->ODR &= ~GPIO_ODR_ODR_14;
- vTaskDelay( 500 / portTICK_RATE_MS );
- GPIOB->ODR |= GPIO_ODR_ODR_14;
- vTaskDelay( 500 / portTICK_RATE_MS );
- }
- }
- vTaskDelete(NULL);
- }
- __attribute((interrupt)) void TIM1_UP_TIM10_IRQHandler(void)
- {
- TIM1->SR = ~TIM_SR_UIF;
- GPIOB->ODR ^= GPIO_ODR_ODR_13;
- }
- //__attribute((interrupt)) void SysTick_Handler(void)
- //{
- // GPIOB->ODR ^= GPIO_ODR_ODR_14;
- //}
- __attribute((interrupt)) void EXTI15_10_IRQHandler(void)
- {
- EXTI->PR = EXTI_PR_PR12;
- GPIOB->ODR ^= GPIO_ODR_ODR_15;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement