Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stm32f4xx.h"
- void delay(unsigned long int);
- char spiread(char addr);
- void spiwrite(char, char);
- char osx;
- int main(void)
- {
- char abcds;
- long int abcc=0;
- RCC -> AHB1ENR |= RCC_AHB1ENR_GPIODEN; //to turn GPIOD's clock
- RCC -> AHB1ENR |= RCC_AHB1ENR_GPIOAEN; //to turn GPIOA's clock
- RCC -> AHB1ENR |= RCC_AHB1ENR_GPIOEEN; //to turn GPIOE's clock
- GPIOD -> MODER |= GPIO_MODER_MODER13_0; //PD13 as output 01 bo tam jest podwojny rejestr jakby
- GPIOA -> MODER &=~ GPIO_MODER_MODER0; //PA0 as input
- GPIOA-> PUPDR &=~ GPIO_PUPDR_PUPDR0; // wejscie jest z pul down
- GPIOE -> MODER |= GPIO_MODER_MODER3_0; //PE3 as output 01 bo tam jest podwojny rejestr jakby
- GPIOE -> ODR |= (1<<3);
- RCC -> APB2ENR |= RCC_APB2ENR_SPI1EN; //SPI clock
- GPIOA -> MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER7_1 | GPIO_MODER_MODER6_1; // alterntativre function mode
- GPIOA -> AFR[0] |= 5<<28 | 5<<24 | 5<<20;
- SPI1 -> CR1 |= SPI_CR1_SSM | SPI_CR1_SSI | 7<<3 | SPI_CR1_MSTR | SPI_CR1_CPOL | SPI_CR1_CPHA;// | SPI_CR1_LSBFIRST;
- //SPI1 -> CR1 |= SPI_CR1_DFF; // 16 bitowa ramka
- SPI1 -> CR1 |= SPI_CR1_SPE;
- /*
- if(spiread(0x20) == 0x07)
- GPIOD -> ODR |= 1<<13;
- */
- GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
- spiwrite(0x20,0x47); // ustawiam wartosci w rejestrach: rejest, wartosc
- while(1)
- {
- GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
- osx=spiread(0x29);
- if(osx >0x07)
- {
- GPIOD -> ODR &=~ (1<<13); //PD13 ustawiam na 1
- delay(1000);
- }
- // GPIOD -> ODR |= (1<<13); //PD13 ustawiam na 1
- //
- // abcc= spiraz();
- // // abcc=GPIOA->IDR & 0x0000001; // ustawiam ze chce z portu A0 przypisac wartosc do abcc
- // if(abcc!=0)
- // {
- //
- // GPIOD -> ODR &=~ (1<<13); //PD13 ustawiam na 0
- // // delay(1000);
- //
- // }
- }
- while(1);
- return 0;
- }
- // podajesz w milisekunkach opoznienie jakie ma byc i takie jest
- void delay(unsigned long int opoznieniems) //funkcja wprowadza opoznienie w ms podane
- {
- long int licznikms=0;
- int i,b;
- for(licznikms; licznikms<opoznieniems/2; licznikms++)
- { // tutaj ma byc 168 000 operacji
- int a=6;
- a=a+1;
- for(i=0; i<84;i++)
- {
- for( b=0;b<1000;b++)
- {}
- }
- }
- }
- char spiread(char addr)
- {
- char luka;
- GPIOE -> ODR &=~ (1<<3); //PE3 ustawiam na 0 dzieki temu wybieram SPI
- while(!(SPI1 -> SR & (1<<1)));//czeka az txe bedzie =1
- SPI1 -> DR = (1<<7) | addr; //wysyla adres rejestru + komende read
- while(!(SPI1 -> SR & (1<<0)));// czeka az rxne bedzie pelne, czyli sa jakies dane do odczytania
- SPI1 -> DR; //zerowanie bufora odbiorczego
- while(!(SPI1 -> SR & (1<<1)));
- SPI1 -> DR = 0xff; //wysylamy nastepna ramke, smieci, by odpowiedzial na wczesniejsze pytanie
- while(!(SPI1 -> SR & (1<<0)));
- luka = (char)(SPI1 -> DR);
- GPIOE -> ODR |= (1<<3); //PE3 ustawiam na 1 dzieki temu wylaczam modul
- return luka;
- }
- void spiwrite(char rej,char war)
- {
- char lukaa;
- GPIOE -> ODR &=~ (1<<3); //PE3 ustawiam na 0 dzieki temu wybieram SPI
- while(!(SPI1 -> SR & (1<<1)));//czeka az txe bedzie =1
- SPI1 -> DR = (0<<7) | rej; //wysyla adres rejestru + komende write
- while(!(SPI1 -> SR & (1<<0)));// czeka az rxne bedzie pelne, czyli sa jakies dane do odczytania
- SPI1 -> DR; //zerowanie bufora odbiorczego
- while(!(SPI1 -> SR & (1<<1)));
- SPI1 -> DR = war; //wysylamy nastepna ramke, smieci, by odpowiedzial na wczesniejsze pytanie
- while(!(SPI1 -> SR & (1<<0)));
- lukaa = (char)(SPI1 -> DR);
- GPIOE -> ODR |= (1<<3); //PE3 ustawiam na 1 dzieki temu wylaczam modul
- }
Add Comment
Please, Sign In to add comment