Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f30x_conf.h" // STM32 config
- #include "30021_io.h" // Input/output library for this course
- void init_board();
- void init_board(void){
- RCC->AHBENR |= RCC_AHBPeriph_GPIOA; // Enable clock for GPIO Port
- RCC->AHBENR |= RCC_AHBPeriph_GPIOB;
- RCC->AHBENR |= RCC_AHBPeriph_GPIOC;
- GPIOA -> MODER &=~ (0x00000003 << (4 * 2)); //CLEAR REGISTER A PA4
- GPIOB -> MODER &=~ (0x00000003 << (0 * 2)); //CLEAR REGISTER B PB0
- GPIOB -> MODER &=~ (0x00000003 << (5 * 2)); //CLEAR REGISTER B PB5
- GPIOC -> MODER &=~ (0x00000003 << (0 * 2)); //CLEAR REGISTER C PC0
- GPIOC -> MODER &=~ (0x00000003 << (1 * 2)); //CLEAR REGISTER C PC1
- GPIOA -> PUPDR &=~ (0x00000003 << (4 * 2)); //clear pull register
- GPIOB -> PUPDR &=~ (0x00000003 << (0 * 2)); //clear pull register
- GPIOB -> PUPDR &=~ (0x00000003 << (5 * 2)); //clear pull register
- GPIOC -> PUPDR &=~ (0x00000003 << (0 * 2)); //clear pull register
- GPIOC -> PUPDR &=~ (0x00000003 << (1 * 2)); //clear pull register
- GPIOA -> PUPDR |= (0x00000002 << (4 * 2)); //Set Pulldown A PA4
- GPIOB -> PUPDR |= (0x00000002 << (0 * 2)); //Set Pulldown B PB0
- GPIOB -> PUPDR |= (0x00000002 << (5 * 2)); //Set Pulldown B PB5
- GPIOC -> PUPDR |= (0x00000002 << (0 * 2)); //Set Pulldown C PC0
- GPIOC -> PUPDR |= (0x00000002 << (1 * 2)); //Set Pulldown C PC1
- }
- int main(void){
- init_board();
- init_usb_uart( 9600 );
- while(1){
- uint8_t left = GPIOC->IDR & (0x0002 << 0);
- uint8_t right = GPIOC->IDR & (0x0001 << 0);
- uint8_t up = GPIOA->IDR & (0x0010 << 0);
- uint8_t down = GPIOB->IDR & (0x0001 << 0);
- uint8_t center = GPIOB->IDR & (0x0020 << 0);
- if(right){printf("Right");}
- if(left){printf("Left");}
- if(up){printf("Up");}
- if(down){printf("Down");}
- if(center){printf("Center");}
- //printf("\n");
- //printf("Sit\n");
- }
- }
- /*
- GPIOA->MODER &= ~(0x00000003 << (0 * 2)); // Clear mode register
- GPIOA->MODER |= (0x00000000 << (0 * 2)); // Set mode register (0x00 - Input, 0x01 - Output, 0x02 - Alternate Function, 0x03 - Analog in/out)
- GPIOA->PUPDR &= ~(0x00000003 << (0 * 2)); // Clear push/pull register
- GPIOA->PUPDR |= (0x00000002 << (0 * 2)); // Set push/pull register (0x00 - No pull, 0x01 - Pull-up, 0x02 - Pull-down) // Set pin PA1 to output
- GPIOA->OSPEEDR &= ~(0x00000003 << (1 * 2)); // Clear speed register
- GPIOA->OSPEEDR |= (0x00000002 << (1 * 2)); // set speed register (0x01 - 10 MHz, 0x02 - 2 MHz, 0x03 - 50 MHz)
- GPIOA->OTYPER &= ~(0x0001 << (1)); // Clear output type register
- GPIOA->OTYPER |= (0x0000 << (1)); // Set output type register (0x00 -Push pull, 0x01 - Open drain)
- GPIOA->MODER &= ~(0x00000003 << (1 * 2)); // Clear mode register
- GPIOA->MODER |= (0x00000001 << (1 * 2)); // Set mode register (0x00 - Input, 0x01 - Output, 0x02 - Alternate Function, 0x03 - Analog in/out)
- uint16_t val = GPIOA->IDR & (0x0001 << 0);
- PIOA->ODR |= (0x0001 << 1); //Set pin PA1 to high, WAS 0x0001
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement