main.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. /*
  2. LED blink project for the STM32L011
  3. Assumes LED at Pin 6, GPIO PA0
  4. */
  5. #include "stm32l011xx.h"
  6. volatile unsigned long SysTickCount = 0;
  7. void __attribute__ ((interrupt, used)) SysTick_Handler(void)
  8. {
  9. SysTickCount++;
  10. if ( SysTickCount & 1 )
  11. GPIOA->BSRR = GPIO_BSRR_BS_0; /* atomic set PA0 */
  12. else
  13. GPIOA->BSRR = GPIO_BSRR_BR_0; /* atomic clr PA0 */
  14. }
  15. int main()
  16. {
  17. RCC->IOPENR |= RCC_IOPENR_IOPAEN; /* Enable clock for GPIO Port A */
  18. __NOP();
  19. __NOP();
  20. GPIOA->MODER &= ~GPIO_MODER_MODE0; /* clear mode for PA0 */
  21. GPIOA->MODER |= GPIO_MODER_MODE0_0; /* Output mode for PA0 */
  22. GPIOA->OTYPER &= ~GPIO_OTYPER_OT_0; /* no Push/Pull for PA0 */
  23. GPIOA->OSPEEDR &= ~GPIO_OSPEEDER_OSPEED0; /* low speed for PA0 */
  24. GPIOA->PUPDR &= ~GPIO_PUPDR_PUPD0; /* no pullup/pulldown for PA0 */
  25. GPIOA->BSRR = GPIO_BSRR_BR_0; /* atomic clr PA0 */
  26. SysTick->LOAD = 2000*500 - 1;
  27. SysTick->VAL = 0;
  28. SysTick->CTRL = 7; /* enable, generate interrupt (SysTick_Handler), do not divide by 2 */
  29. for(;;)
  30. ;
  31. }