/* Project L476_ats_blink for STM32L476 mounted on Nucleo board: * the user LED (mounted on pin PA-5) is flashed every second for 50 ms. * The time base is provided by Systick (1000 ticks per second). * The clock configuration is the default one (Sysclk = 80 MHz, derived from MSI and PLL). */ /* Includes ------------------------------------------------------------------*/ #include "stm32l4xx_ll_bus.h" #include "stm32l4xx_ll_rcc.h" #include "stm32l4xx_ll_system.h" #include "stm32l4xx_ll_utils.h" #include "stm32l4xx_ll_gpio.h" #include "stm32l4xx_ll_cortex.h" // #if defined(USE_FULL_ASSERT) // #include "stm32_assert.h" // #endif /* USE_FULL_ASSERT */ #include "gpio.h" // systick interrupt handler volatile uint32_t msTicks = 0; volatile uint8_t expe = 0; volatile uint8_t blue_mode = 0; void SysTick_Handler() { if ( BLUE_BUTTON() ){ blue_mode = 1 ; } msTicks++; /* See startup file startup_LPC17xx.s for SysTick vector */ if (msTicks == 5){ LED_GREEN(0); }else if(msTicks >= 200){ msTicks = 0; LED_GREEN(1); } } void SystemClock_Config(void); int main(void) { /* Configure the system clock */ SystemClock_Config(); // config GPIO GPIO_init(); // init systick timer (tick period at 1 ms) LL_Init1msTick( SystemCoreClock ); LL_SYSTICK_EnableIT(); //Setup Sleep mode LL_LPM_EnableSleep(); //LL_LPM_EnableSleepOnExit(); while (1) { if (blue_mode){ __WFI(); } // else { // LED_GREEN(0); // LL_mDelay(950); // LED_GREEN(1); // LL_mDelay(50); // } } } /** * @brief System Clock Configuration * The system Clock is configured as follows : * System Clock source = PLL (MSI) * SYSCLK(Hz) = 80000000 * HCLK(Hz) = 80000000 * AHB Prescaler = 1 * APB1 Prescaler = 1 * APB2 Prescaler = 1 * MSI Frequency(Hz) = 4000000 * PLL_M = 1 * PLL_N = 40 * PLL_R = 2 * Flash Latency(WS) = 4 * @param None * @retval None */ void SystemClock_Config(void) { /* MSI configuration and activation */ LL_FLASH_SetLatency(LL_FLASH_LATENCY_4); LL_RCC_MSI_Enable(); while (LL_RCC_MSI_IsReady() != 1) { }; /* Main PLL configuration and activation */ LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_MSI, LL_RCC_PLLM_DIV_1, 40, LL_RCC_PLLR_DIV_2); LL_RCC_PLL_Enable(); LL_RCC_PLL_EnableDomain_SYS(); while(LL_RCC_PLL_IsReady() != 1) { }; /* Sysclk activation on the main PLL */ LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1); LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL); while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL) { }; /* Set APB1 & APB2 prescaler*/ LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1); LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1); /* Update the global variable called SystemCoreClock */ SystemCoreClockUpdate(); }