A) Blink diodes using only registers with your own wait funtion.

https://elektronika327.blogspot.com/2015/10/0-stm32f4-rejestry-gpio.html

Juliusz - A

B) Blink diodes with wait funtion based on SysTick timer.

SysClk = 53.76 MHz

Juliusz - B

C) Blink diodes using SysTick interrupt.

SysTick_Handler LOAD, CTRL, No loops: while neither for.

Juliusz - C

D) Blink diodes using timer interrupt.

http://www.micromouseonline.com/2016/02/03/tim3-arr-regular-interrupts-stm32f4/

https://www.csit.carleton.ca/~pbeirne/NET3001/Resources/timer_interrupt_demo.c

Use TIM6, the easiest timer on f407. TIM6 → ARR → PSC → DIER → CR

NVIC_EnableIRQ()