int estado_leds = 0;
int estado_anterior = 0;
void delay_ms(uint32_t milliseconds) {
uint32_t cycles = milliseconds * (SystemCoreClock / 2000);
for (uint32_t i = 0; i < cycles; i++) {
__NOP();
}
}
void inicio(void) {
RCC->IOPENR |= 0b00000000000000000000000000000011;
GPIOA->MODER &= 0b11111111111111111111111111111100;
GPIOA->PUPDR |= 0b00000000000000000000000000000010;
GPIOB->MODER &= 0b11111111111111110111010111110101;
}
int pulsador(void) {
if ((GPIOA->IDR & 0b00000000000000000000000000000001) == 1) {
return 1;
} else {
return 0;
}
}
int main(void) {
inicio();
while (1) {
int estado_actual = pulsador();
if (estado_actual == 1 && estado_anterior == 0) {
estado_leds = !estado_leds;
if (estado_leds) {
GPIOB->BSRR = 0b00000000000000000000000010110011;
} else {
GPIOB->BSRR = 0b00000000101100110000000000000000;
}
}
estado_anterior = estado_actual;
delay_ms(20);
}
}Loading
st-nucleo-l031k6
st-nucleo-l031k6