#include #include "Driver_GPIO.h" #include "stm32f4xx.h" #include "sram_vtor.h" #include "cmsis_dv.h" #include "cmsis_os2.h" volatile long gTicks; void tick(void) { gTicks++; } osStatus_t osDelay (uint32_t t) { uint32_t start = gTicks; // modular subtraction is resillient against // up to a single overflow in gTicks while (gTicks - start < t) __WFI(); return 0; } void init_clock(void) { SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / 1000); NVIC_SetVector(SysTick_IRQn, (uintptr_t)tick); NVIC_EnableIRQ(SysTick_IRQn); RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN; (void)RCC->AHB1ENR; (void)RCC->AHB1ENR; } int main(void) { NVIC_Relocate_VTOR(); init_clock(); cmsis_dv(NULL); return EXIT_SUCCESS; }