115 lines
3 KiB
C
115 lines
3 KiB
C
/* 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();
|
|
}
|