Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1.  
  2.  
  3.  
  4. #include "stm32f30x_conf.h" // STM32 config
  5. #include "30021_io.h" // Input/output library for this course
  6.  
  7.  
  8. void init_board();
  9.  
  10. void init_board(void){
  11. RCC->AHBENR |= RCC_AHBPeriph_GPIOA; // Enable clock for GPIO Port
  12. RCC->AHBENR |= RCC_AHBPeriph_GPIOB;
  13. RCC->AHBENR |= RCC_AHBPeriph_GPIOC;
  14.  
  15. GPIOA -> MODER &=~ (0x00000003 << (4 * 2)); //CLEAR REGISTER A PA4
  16. GPIOB -> MODER &=~ (0x00000003 << (0 * 2)); //CLEAR REGISTER B PB0
  17. GPIOB -> MODER &=~ (0x00000003 << (5 * 2)); //CLEAR REGISTER B PB5
  18. GPIOC -> MODER &=~ (0x00000003 << (0 * 2)); //CLEAR REGISTER C PC0
  19. GPIOC -> MODER &=~ (0x00000003 << (1 * 2)); //CLEAR REGISTER C PC1
  20.  
  21. GPIOA -> PUPDR &=~ (0x00000003 << (4 * 2)); //clear pull register
  22. GPIOB -> PUPDR &=~ (0x00000003 << (0 * 2)); //clear pull register
  23. GPIOB -> PUPDR &=~ (0x00000003 << (5 * 2)); //clear pull register
  24. GPIOC -> PUPDR &=~ (0x00000003 << (0 * 2)); //clear pull register
  25. GPIOC -> PUPDR &=~ (0x00000003 << (1 * 2)); //clear pull register
  26.  
  27.  
  28.  
  29. GPIOA -> PUPDR |= (0x00000002 << (4 * 2)); //Set Pulldown A PA4
  30. GPIOB -> PUPDR |= (0x00000002 << (0 * 2)); //Set Pulldown B PB0
  31. GPIOB -> PUPDR |= (0x00000002 << (5 * 2)); //Set Pulldown B PB5
  32. GPIOC -> PUPDR |= (0x00000002 << (0 * 2)); //Set Pulldown C PC0
  33. GPIOC -> PUPDR |= (0x00000002 << (1 * 2)); //Set Pulldown C PC1
  34. }
  35.  
  36. int main(void){
  37.  
  38. init_board();
  39. init_usb_uart( 9600 );
  40.  
  41. while(1){
  42.  
  43. uint8_t left = GPIOC->IDR & (0x0002 << 0);
  44. uint8_t right = GPIOC->IDR & (0x0001 << 0);
  45.  
  46. uint8_t up = GPIOA->IDR & (0x0010 << 0);
  47. uint8_t down = GPIOB->IDR & (0x0001 << 0);
  48.  
  49. uint8_t center = GPIOB->IDR & (0x0020 << 0);
  50.  
  51. if(right){printf("Right");}
  52. if(left){printf("Left");}
  53. if(up){printf("Up");}
  54. if(down){printf("Down");}
  55. if(center){printf("Center");}
  56.  
  57. //printf("\n");
  58. //printf("Sit\n");
  59. }
  60.  
  61. }
  62.  
  63.  
  64.  
  65.  
  66.  
  67. /*
  68. GPIOA->MODER &= ~(0x00000003 << (0 * 2)); // Clear mode register
  69. GPIOA->MODER |= (0x00000000 << (0 * 2)); // Set mode register (0x00 - Input, 0x01 - Output, 0x02 - Alternate Function, 0x03 - Analog in/out)
  70.  
  71. GPIOA->PUPDR &= ~(0x00000003 << (0 * 2)); // Clear push/pull register
  72. GPIOA->PUPDR |= (0x00000002 << (0 * 2)); // Set push/pull register (0x00 - No pull, 0x01 - Pull-up, 0x02 - Pull-down) // Set pin PA1 to output
  73.  
  74. GPIOA->OSPEEDR &= ~(0x00000003 << (1 * 2)); // Clear speed register
  75. GPIOA->OSPEEDR |= (0x00000002 << (1 * 2)); // set speed register (0x01 - 10 MHz, 0x02 - 2 MHz, 0x03 - 50 MHz)
  76.  
  77. GPIOA->OTYPER &= ~(0x0001 << (1)); // Clear output type register
  78. GPIOA->OTYPER |= (0x0000 << (1)); // Set output type register (0x00 -Push pull, 0x01 - Open drain)
  79.  
  80. GPIOA->MODER &= ~(0x00000003 << (1 * 2)); // Clear mode register
  81. GPIOA->MODER |= (0x00000001 << (1 * 2)); // Set mode register (0x00 - Input, 0x01 - Output, 0x02 - Alternate Function, 0x03 - Analog in/out)
  82.  
  83. uint16_t val = GPIOA->IDR & (0x0001 << 0);
  84.  
  85. PIOA->ODR |= (0x0001 << 1); //Set pin PA1 to high, WAS 0x0001
  86.  
  87.  
  88. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement