int ledPos[] = {5, 6, 7, 9, 15, 10, 8, 3};
uint32_t mask, clear = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, STM32!");
RCC->AHBENR = RCC_IOPENR_GPIOAEN;
for(int i = 0; i < 8; i++){
mask |= (0b11 << ledPos[i] * 2);
clear |= (0b01 << ledPos[i] * 2);
}
GPIOA->MODER &= ~(mask);
GPIOA->MODER |= clear;
//this one works if i only have 1 led turns on at a time
// GPIOA->MODER &= ~(buf);
// GPIOA->MODER &= ~( (0b11 << (5 *2)) | (0b11 << (6 *2)));
// GPIOA->MODER |= ( 0b01 << (5*2) | (0b01 << (6 *2)) );
// GPIOA->ODR = (1 << 5);
// delay(1000);
// GPIOA->ODR = 0;
// delay
// GPIOA->ODR = (1 << 6);
}
uint8_t counter = 0;
uint8_t array_buf[8] = {0};
void loop() {
// counter = 5;
mask = 0;
// for(int i = 0; i < 8; i++){
// for(counter = 0; counter < 8; counter++){
printf("number %d : \n", counter);
for(int i = 0; i < 8; i++){
// }
if((counter >> 7-i) &1){
mask |= (1 << ledPos[i]);
}
// mask |= (((counter >> 7-i) & 1 ) == 1 ? 1 : 0 ) << ledPos[i];
// delay(200);
// mask |= (array_buf[i] << ledPos[i]);
}
// for(int i = 0; i < 8; i++){
// // delay(200);
// // GPIOA->ODR &= ~(array_buf[i] << ledPos[i]);
// }
GPIOA->ODR = mask;
counter++;
delay(200);
// GPIOA->ODR = 0;
// delay(100);
// delay(500);
}
// }
// for(int i = 0; i < 8; i++){
// GPIOA->ODR |= (1<<ledPos[i]);
// for(int x = i; x < 8; x ++){
// GPIOA->ODR |= (1 << ledPos[x]);
// delay(200);
// }
// GPIOA->ODR = 0;
// delay(100);
// // GPIOA->ODR = 0;
// // delay(500);
// }
// GPIOA->ODR = 0;
// delay(500);
// }
// GPIOA->ODR = ~(0b11 << (5*2)) | (0b10 << (5*2));
// // GPIOA->BSRR = (1 << 5) | (1 << (6 + 16));
// delay(1000); // this speeds up the simulation
// GPIOA->ODR = ~(0b11 << (5*2)) | (0b01 << (5*2));
// GPIOA->BSRR = (1 << (5 + 16)) | (1 << 6);
// GPIOA->ODR !=
// delay(1000);