0) { SysTick -> LOAD = 1999; // 16MHz * 8 = 1 tick // 0...1999 = 2k ticks // LOAD should be decremented SysTick -> VAL = 0; SysTick -> CTRL = SysTick_CTRL_ENABLE_Msk; miliseconds--; while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); } SysTick -> CTRL = 0; } void led_blue() { GPIOD->ODR ^= GPIO_ODR_OD15; } void led_red() { GPIOD->ODR ^= GPIO_ODR_OD14; } void led_orange() { GPIOD->ODR ^= GPIO_ODR_OD13; } void led_green() { GPIOD->ODR ^= GPIO_ODR_OD12; } void setup(void) { RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Enable output on D port GPIOD -> MODER |= GPIO_MODER_MODER15_0; GPIOD -> MODER |= GPIO_MODER_MODER14_0; GPIOD -> MODER |= GPIO_MODER_MODER13_0; GPIOD -> MODER |= GPIO_MODER_MODER12_0; } void loop(void) { led_blue(); wait(100"> 0) { SysTick -> LOAD = 1999; // 16MHz * 8 = 1 tick // 0...1999 = 2k ticks // LOAD should be decremented SysTick -> VAL = 0; SysTick -> CTRL = SysTick_CTRL_ENABLE_Msk; miliseconds--; while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); } SysTick -> CTRL = 0; } void led_blue() { GPIOD->ODR ^= GPIO_ODR_OD15; } void led_red() { GPIOD->ODR ^= GPIO_ODR_OD14; } void led_orange() { GPIOD->ODR ^= GPIO_ODR_OD13; } void led_green() { GPIOD->ODR ^= GPIO_ODR_OD12; } void setup(void) { RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Enable output on D port GPIOD -> MODER |= GPIO_MODER_MODER15_0; GPIOD -> MODER |= GPIO_MODER_MODER14_0; GPIOD -> MODER |= GPIO_MODER_MODER13_0; GPIOD -> MODER |= GPIO_MODER_MODER12_0; } void loop(void) { led_blue(); wait(100"> 0) { SysTick -> LOAD = 1999; // 16MHz * 8 = 1 tick // 0...1999 = 2k ticks // LOAD should be decremented SysTick -> VAL = 0; SysTick -> CTRL = SysTick_CTRL_ENABLE_Msk; miliseconds--; while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); } SysTick -> CTRL = 0; } void led_blue() { GPIOD->ODR ^= GPIO_ODR_OD15; } void led_red() { GPIOD->ODR ^= GPIO_ODR_OD14; } void led_orange() { GPIOD->ODR ^= GPIO_ODR_OD13; } void led_green() { GPIOD->ODR ^= GPIO_ODR_OD12; } void setup(void) { RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Enable output on D port GPIOD -> MODER |= GPIO_MODER_MODER15_0; GPIOD -> MODER |= GPIO_MODER_MODER14_0; GPIOD -> MODER |= GPIO_MODER_MODER13_0; GPIOD -> MODER |= GPIO_MODER_MODER12_0; } void loop(void) { led_blue(); wait(100">
/* Juliusz Tarnowski */
#include "stm32f4xx.h"

void wait(uint32_t miliseconds) // need to be up to 1000 s
{  
  while (miliseconds > 0) 
  {
    SysTick -> LOAD = 1999;  // 16MHz * 8 = 1 tick 
                             // 0...1999 = 2k ticks
                             // LOAD should be decremented
    SysTick -> VAL = 0;
    SysTick -> CTRL = SysTick_CTRL_ENABLE_Msk;
    miliseconds--;
    while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);
  }
  SysTick -> CTRL = 0;
}

void led_blue()   { GPIOD->ODR ^= GPIO_ODR_OD15; }
void led_red()    { GPIOD->ODR ^= GPIO_ODR_OD14; }
void led_orange() { GPIOD->ODR ^= GPIO_ODR_OD13; }
void led_green()  { GPIOD->ODR ^= GPIO_ODR_OD12; }

void setup(void)
{
  RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Enable output on D port
  GPIOD -> MODER |= GPIO_MODER_MODER15_0;  
  GPIOD -> MODER |= GPIO_MODER_MODER14_0;  
  GPIOD -> MODER |= GPIO_MODER_MODER13_0;  
  GPIOD -> MODER |= GPIO_MODER_MODER12_0; 
}

void loop(void)
{
  led_blue();   wait(1000);
  led_red();    wait(1000);
  led_orange(); wait(1000);
  led_green();  wait(1000);
}

int main(void)
{
  setup();
  while(1)
  {
    loop();
  }
  return 0;
}