#include <stdint.h>
#include "main.h"
void delay(void);
int main() {
volatile RCC_IOPENR_t* pClockEnable = RCC_IOPENR;
volatile GPIOx_Mode_t* pSetGPIOMode = GPIOA_MODER;
volatile GPIOx_IDR_t* pReadInput = GPIOA_IDR;
volatile GPIOx_ODR_t* pTurnOnGPIOA = GPIOA_ODR;
volatile uint32_t* pTrunOnPullUp = GPIO_PULL_UP;
// включити певриферійний годинник
pClockEnable->gpioa_en = 1;
// встановили пін 5 як вихід
pSetGPIOMode->pin_5 = 0001;
// встановили пін 0 як вхід
pSetGPIOMode->pin_0 = 0000;
// встановили пін 1 як вихід
pSetGPIOMode->pin_1 = 0001;
// втановили підтягуючий резистор я pull-up
*pTrunOnPullUp &= ~(3<<(2 * 0));
*pTrunOnPullUp |= (1<<(2 * 0));
uint8_t last_state = 1;
uint8_t led_pattern = 0;
while(1) {
uint8_t current_state = pReadInput->pin_0;
if (current_state != last_state){
delay();
current_state = pReadInput->pin_0;
if (current_state == 0) {
led_pattern = ((led_pattern + 1)%3);
pTurnOnGPIOA->pin_5 = 0;
pTurnOnGPIOA->pin_1 = 0;
switch(led_pattern){
case 0:
break;
case 1:
pTurnOnGPIOA->pin_5 = 1;
break;
case 2:
pTurnOnGPIOA->pin_1 = 1;
break;
}
}
}
last_state = current_state;
}
return 0;
}
void delay(void){
for(volatile uint32_t i = 0; i <30000; i++);
};