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;
}