Guest User

Untitled

a guest
Aug 15th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. #include "stm32f4xx.h"
  2. void delay(unsigned long int);
  3. char spiread(char addr);
  4. void spiwrite(char, char);
  5. char osx;
  6.  
  7. int main(void)
  8. {
  9. char abcds;
  10. long int abcc=0;
  11. RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; //to turn GPIOD's clock
  12. RCC -> AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //to turn GPIOA's clock
  13. RCC -> AHB1ENR |= RCC_AHB1ENR_GPIOEEN; //to turn GPIOE's clock
  14.  
  15. GPIOD -> MODER |= GPIO_MODER_MODER13_0; //PD13 as output 01 bo tam jest podwojny rejestr jakby
  16. GPIOA -> MODER &=~ GPIO_MODER_MODER0; //PA0 as input
  17. GPIOA-> PUPDR &=~ GPIO_PUPDR_PUPDR0; // wejscie jest z pul down
  18. GPIOE -> MODER |= GPIO_MODER_MODER3_0; //PE3 as output 01 bo tam jest podwojny rejestr jakby
  19.  
  20. GPIOE -> ODR |= (1<<3);
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. RCC -> APB2ENR |= RCC_APB2ENR_SPI1EN; //SPI clock
  28. GPIOA -> MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER7_1 | GPIO_MODER_MODER6_1; // alterntativre function mode
  29. GPIOA -> AFR[0] |= 5<<28 | 5<<24 | 5<<20;
  30.  
  31. SPI1 -> CR1 |= SPI_CR1_SSM | SPI_CR1_SSI | 7<<3 | SPI_CR1_MSTR | SPI_CR1_CPOL | SPI_CR1_CPHA;// | SPI_CR1_LSBFIRST;
  32. //SPI1 -> CR1 |= SPI_CR1_DFF; // 16 bitowa ramka
  33. SPI1 -> CR1 |= SPI_CR1_SPE;
  34.  
  35.  
  36.  
  37.  
  38.  
  39. /*
  40.  
  41. if(spiread(0x20) == 0x07)
  42. GPIOD -> ODR |= 1<<13;
  43. */
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
  51. spiwrite(0x20,0x47); // ustawiam wartosci w rejestrach: rejest, wartosc
  52.  
  53.  
  54. while(1)
  55. {
  56. GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
  57. osx=spiread(0x29);
  58. if(osx >0x07)
  59. {
  60. GPIOD -> ODR &=~ (1<<13); //PD13 ustawiam na 1
  61. delay(1000);
  62. }
  63.  
  64.  
  65.  
  66. // GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
  67. //
  68. // abcc= spiraz();
  69. // // abcc=GPIOA->IDR & 0x0000001; // ustawiam ze chce z portu A0 przypisac wartosc do abcc
  70. // if(abcc!=0)
  71. // {
  72. //
  73. // GPIOD -> ODR &=~ (1<<13); //PD13 ustawiam na 0
  74. // // delay(1000);
  75. //
  76. // }
  77. }
  78.  
  79. while(1);
  80. return 0;
  81. }
  82.  
  83.  
  84.  
  85. // podajesz w milisekunkach opoznienie jakie ma byc i takie jest
  86.  
  87.  
  88. void delay(unsigned long int opoznieniems) //funkcja wprowadza opoznienie w ms podane
  89. {
  90. long int licznikms=0;
  91. int i,b;
  92. for(licznikms; licznikms<opoznieniems/2; licznikms++)
  93. { // tutaj ma byc 168 000 operacji
  94. int a=6;
  95. a=a+1;
  96. for(i=0; i<84;i++)
  97. {
  98. for( b=0;b<1000;b++)
  99. {}
  100. }
  101.  
  102. }
  103. }
  104.  
  105. char spiread(char addr)
  106. {
  107. char luka;
  108. GPIOE -> ODR &=~ (1<<3); //PE3 ustawiam na 0 dzieki temu wybieram SPI
  109.  
  110. while(!(SPI1 -> SR & (1<<1)));//czeka az txe bedzie =1
  111. SPI1 -> DR = (1<<7) | addr; //wysyla adres rejestru + komende read
  112.  
  113. while(!(SPI1 -> SR & (1<<0)));// czeka az rxne bedzie pelne, czyli sa jakies dane do odczytania
  114. SPI1 -> DR; //zerowanie bufora odbiorczego
  115.  
  116. while(!(SPI1 -> SR & (1<<1)));
  117. SPI1 -> DR = 0xff; //wysylamy nastepna ramke, smieci, by odpowiedzial na wczesniejsze pytanie
  118.  
  119. while(!(SPI1 -> SR & (1<<0)));
  120. luka = (char)(SPI1 -> DR);
  121.  
  122.  
  123.  
  124. GPIOE -> ODR |= (1<<3); //PE3 ustawiam na 1 dzieki temu wylaczam modul
  125.  
  126. return luka;
  127. }
  128. void spiwrite(char rej,char war)
  129. {
  130.  
  131. char lukaa;
  132. GPIOE -> ODR &=~ (1<<3); //PE3 ustawiam na 0 dzieki temu wybieram SPI
  133.  
  134. while(!(SPI1 -> SR & (1<<1)));//czeka az txe bedzie =1
  135. SPI1 -> DR = (0<<7) | rej; //wysyla adres rejestru + komende write
  136.  
  137. while(!(SPI1 -> SR & (1<<0)));// czeka az rxne bedzie pelne, czyli sa jakies dane do odczytania
  138. SPI1 -> DR; //zerowanie bufora odbiorczego
  139.  
  140. while(!(SPI1 -> SR & (1<<1)));
  141. SPI1 -> DR = war; //wysylamy nastepna ramke, smieci, by odpowiedzial na wczesniejsze pytanie
  142.  
  143. while(!(SPI1 -> SR & (1<<0)));
  144. lukaa = (char)(SPI1 -> DR);
  145.  
  146. GPIOE -> ODR |= (1<<3); //PE3 ustawiam na 1 dzieki temu wylaczam modul
  147.  
  148. }
Add Comment
Please, Sign In to add comment