#include <stm32c0xx.h>
#define LED_PIN0 0
#define LED_PIN1 1
#define LED_PIN2 2
#define BUTTON_PIN0 5
#define BUTTON_PIN1 6
#define BUTTON_PIN2 7
void delay(volatile uint32_t time)
{
while(time --)
{
__asm__("nop");
}
}
void init_pin_output(uint32_t pin)
{
GPIOA->MODER = GPIOA->MODER & ~(3 << (pin * 2));
GPIOA->MODER = GPIOA->MODER | (1 << (pin * 2));
}
void init_pin_input(uint32_t pin)
{
GPIOA->MODER = GPIOA->MODER & ~(3 << (pin * 2));
}
int main (void)
{
RCC->IOPENR = RCC->IOPENR | RCC_IOPENR_GPIOAEN;
init_pin_output(LED_PIN0);
init_pin_output(LED_PIN1);
init_pin_output(LED_PIN2);
init_pin_input(BUTTON_PIN0);
init_pin_input(BUTTON_PIN1);
init_pin_input(BUTTON_PIN2);
while (1)
{
if (GPIOA-> IDR & (1 << BUTTON_PIN0))
GPIOA->ODR = GPIOA->ODR | (1 << LED_PIN0);
else
GPIOA->ODR = GPIOA->ODR & ~(1 << LED_PIN0);
delay(10000);
}
return 0;
}