// LD3 connected to PB3
#include "stm32l0xx.h"
#define CLOCK_SPEED 2097000u
#define SYSTICK_LOAD (CLOCK_SPEED / 1000) - 1
volatile uint32_t msTicks = 0;
void SysTick_Handler(void) // called when SysTick Val reaches 0
{
msTicks++;
}
void delay_ms(uint32_t ms)
{
uint32_t start = msTicks;
while ((msTicks - start) < ms)
{
start = msTicks;
};
}
int main(void)
{
// SysTick initialization
SysTick->LOAD = SYSTICK_LOAD;
SysTick->VAL = 0u;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_CLKSOURCE_Msk;
// Turn on RCC for GPIOB
RCC->IOPENR |= RCC_IOPENR_IOPBEN;
// Set PB3 to output in MODER
GPIOB->MODER &= ~(3 << 6);
GPIOB->MODER |= (1 << 6);
while (1)
{
// Toggle PB3 on/off
GPIOB->ODR ^= (1 << 3);
delay_ms(500);
}
return 0;
}Loading
st-nucleo-l031k6
st-nucleo-l031k6