#define PERIPHERAL_BASE    (0x40000000UL) 
#define AHB1PERIPH_OFFSET  (0x00020000UL)
#define AHB1PERIPH_BASE    (PERIPHERAL_BASE + AHB1PERIPH_OFFSET )
#define GPIOA_OFFSET       (0x00000000U)
#define GPOIA_BASE         (AHB1PERIPH_BASE + GPIOA_OFFSET)
#define RCC_OFFSET         (0x00003800UL) 
#define RCC_BASE            (AHB1PERIPH_BASE + RCC_OFFSET )
#define RCC_AHB1EN_REG_OFFSET  (0x00000030UL)
#define RCC_ABH1EN_REG          (*(volatile unsigned int*)(RCC_BASE + RCC_AHB1EN_REG_OFFSET) ) 

#define MODE_REG_OFFSET         (0x00000000UL)
#define GPIOA_MODE_REG           (*(volatile unsigned int*)(GPOIA_BASE + MODE_REG_OFFSET))

#define OD_REG_OFFSET               (0x00000014UL)
#define GPIOA_OD_REG                (*(volatile unsigned int*)(GPOIA_BASE + OD_REG_OFFSET))
#define GPIOAEN               (1U<<0)
#define PIN5                   (1u<<5)  
#define LED_PIN                 PIN5

int main(void){
	RCC_ABH1EN_REG |=  GPIOAEN;
	
	GPIOA_MODE_REG |= (1U<<10);
	GPIOA_MODE_REG &=~(1U<<11);

	while(1){
		
		GPIOA_OD_REG ^= LED_PIN; 
		for(int i=0; i<10000000; i++){
		}

	}

}