Advertisement
Guest User

main.c

a guest
Dec 17th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1.  
  2. /* Includes ------------------------------------------------------------------*/
  3. #include "stm32f4_discovery.h"
  4.  
  5. /* Private typedef -----------------------------------------------------------*/
  6. /* Private define ------------------------------------------------------------*/
  7. /* Private macro -------------------------------------------------------------*/
  8. /* Private variables ---------------------------------------------------------*/
  9. /* Private function prototypes -----------------------------------------------*/
  10. /* Private functions ---------------------------------------------------------*/
  11.  
  12. //kot parameter podas stevilo ki ga odsteva do nic
  13. void delay(uint32_t delay) {
  14. while(delay--);
  15. }
  16.  
  17. int main(void)
  18. {
  19. //init ure
  20. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  21. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  22. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  23. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
  24.  
  25.  
  26.  
  27. // init LED
  28. GPIO_InitTypeDef led;
  29. led.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  30. led.GPIO_Mode = GPIO_Mode_OUT;
  31. led.GPIO_Speed = GPIO_Speed_2MHz;
  32. led.GPIO_OType = GPIO_OType_PP;
  33. led.GPIO_PuPd = GPIO_PuPd_NOPULL;
  34. GPIO_Init(GPIOD, &led);
  35.  
  36. //nastavitev GPIO pinov
  37. GPIO_InitTypeDef GPIO_InitStructure;
  38. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; //5->MISO(master in slave out),6->MOSI,7->SCLK
  39. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  40. GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  41. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  42. GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
  43. GPIO_Init(GPIOA, &GPIO_InitStructure);
  44. //klicemo funkicjo ki ponastavi
  45. GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
  46. GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
  47. GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
  48.  
  49. // inicializacijska struktura za senzor
  50. GPIO_InitTypeDef senzor;
  51. senzor.GPIO_Pin = GPIO_Pin_3;
  52. senzor.GPIO_Mode = GPIO_Mode_OUT;
  53. senzor.GPIO_OType = GPIO_OType_PP;
  54. senzor.GPIO_PuPd = GPIO_PuPd_NOPULL;
  55. senzor.GPIO_Speed = GPIO_Speed_2MHz;
  56. GPIO_Init(GPIOE, &senzor);
  57. GPIO_SetBits(GPIOE, GPIO_Pin_3);
  58.  
  59. //inicializacija SPI s strukturo iz slidov
  60. SPI_InitTypeDef spi;
  61. spi.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  62. spi.SPI_Mode = SPI_Mode_Master;
  63. spi.SPI_DataSize = SPI_DataSize_8b;
  64. spi.SPI_CPOL = SPI_CPOL_Low;
  65. spi.SPI_CPHA = SPI_CPHA_1Edge;
  66. spi.SPI_NSS = SPI_NSS_Soft;
  67. spi.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  68. spi.SPI_FirstBit = SPI_FirstBit_MSB;
  69. spi.SPI_CRCPolynomial = 7;
  70. SPI_Init(SPI1, &spi);
  71. //Vklop spi
  72. SPI_Cmd(SPI1, ENABLE);
  73.  
  74. //senzor je tuki slave,pisem v register (na slidih "Primer pisanja v regiter senzorja")
  75. GPIO_ResetBits(GPIOE, GPIO_Pin_3);
  76. SPI1_Write(0x20); //<----- 1. je naslov na katerega bomo pisali(pazi na odmik)
  77. SPI1_Write(0x47); //<----- 2. je vrednost ki sebo zapisala v naslov
  78. GPIO_SetBits(GPIOE, GPIO_Pin_3);
  79.  
  80.  
  81. while (1)
  82. {
  83. //X-os na naslovu 0x29
  84. GPIO_ResetBits(GPIOE, GPIO_Pin_3);
  85. SPI1_Write(0x29 | 0x80); //<- na prosojnicah pise 0x80..why?
  86. volatile int8_t x_os = SPI1_Read();
  87. GPIO_SetBits(GPIOE, GPIO_Pin_3);
  88.  
  89. //Y-os na naslovu 0x2B
  90. GPIO_ResetBits(GPIOE, GPIO_Pin_3);
  91. SPI1_Write(0x29 | 0x80); //<- na prosojnicah pise 0x80..why?
  92. volatile int8_t y_os = SPI1_Read();
  93. GPIO_SetBits(GPIOE, GPIO_Pin_3);
  94.  
  95. if(x_os > 5)
  96. {
  97. delay(200);
  98. GPIO_SetBits(GPIOD, GPIO_Pin_12);
  99. }
  100.  
  101. if(x_os < -5)
  102. {
  103. delay(200);
  104. GPIO_SetBits(GPIOD, GPIO_Pin_13);
  105. }
  106. if(x_os < 5 && x_os > -5)
  107. {
  108. delay(200);
  109. GPIO_ResetBits(GPIOD, GPIO_Pin_12);
  110. GPIO_ResetBits(GPIOD, GPIO_Pin_13);
  111. }
  112.  
  113. if(y_os > 5)
  114. {
  115. delay(200);
  116. GPIO_SetBits(GPIOD, GPIO_Pin_14);
  117. }
  118.  
  119. if(y_os < -5)
  120. {
  121. delay(200);
  122. GPIO_SetBits(GPIOD, GPIO_Pin_15);
  123. }
  124. if(y_os < 5 && y_os > -5)
  125. {
  126. delay(200);
  127. GPIO_ResetBits(GPIOD, GPIO_Pin_14);
  128. GPIO_ResetBits(GPIOD, GPIO_Pin_15);
  129. }
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement