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"
- //MAP 0x40000000, 0x400FFFFF EXEC READ WRITE
- void vTask2(void* pvParams){
- while(1){
- for (char i=0;i<4;i++){
- GPIOA->ODR &= ~(GPIO_ODR_ODR_8 | GPIO_ODR_ODR_9 | GPIO_ODR_ODR_10 | GPIO_ODR_ODR_11
- | GPIO_ODR_ODR_12 | GPIO_ODR_ODR_13);
- GPIOA->ODR &= ~GPIO_ODR_ODR_10;
- GPIOA->ODR &= ~GPIO_ODR_ODR_11;
- GPIOA->ODR |= GPIO_ODR_ODR_8;
- GPIOA->ODR |= GPIO_ODR_ODR_13;
- for (int i=0;i<16000000/20;i++) {
- }
- //With the CPU's frequency at 16 MHz and tick frequency 1000 Hz
- //16000000/20 iterations are equal to ~800 ticks (0.8 seconds)
- GPIOA->ODR &= ~GPIO_ODR_ODR_8;
- GPIOA->ODR &= ~GPIO_ODR_ODR_13;
- GPIOA->ODR |= GPIO_ODR_ODR_9;
- GPIOA->ODR |= GPIO_ODR_ODR_12;
- for (int i=0;i<16000000/20;i++) {
- }
- GPIOA->ODR &= ~GPIO_ODR_ODR_9;
- GPIOA->ODR &= ~GPIO_ODR_ODR_12;
- GPIOA->ODR |= GPIO_ODR_ODR_10;
- GPIOA->ODR |= GPIO_ODR_ODR_11;
- for (int i=0;i<16000000/20;i++) {
- }
- }
- for (int i=0;i<16000000/3200;i++) {
- } //5 ticks
- }
- }
- void vTask1(void* pvParams){
- while(1){
- for (char i=0;i<4;i++){
- GPIOA->ODR |= GPIO_ODR_ODR_5;
- for (int i=0;i<16000000/32;i++){
- } //0.5 seconds
- GPIOA->ODR &= ~GPIO_ODR_ODR_5;
- for (int i=0;i<16000000/32;i++) {
- }
- }
- for (int i=0;i<16000000/160;i++) {
- }
- }
- }
- 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(vTask1, "DiodeBlink", configMINIMAL_STACK_SIZE, NULL, 3, NULL);
- xTaskCreate(vTask2, "DiodeLine", configMINIMAL_STACK_SIZE, NULL, 4, NULL);
- vTaskStartScheduler();
- while(1){
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement