Advertisement
Grzesiek1996

Untitled

Feb 21st, 2020
2,483
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 3.37 KB | None | 0 0
  1. #include "stm32f10x.h"
  2.  
  3. int main(void)          //pętla główna programu
  4. {
  5.  GPIO_InitTypeDef gpio;     //definicja obiektu gpio będącego konfiguracją portów GPIO
  6.  I2C_InitTypeDef i2c;       //definicja obiektu i2c będącego modułem komunikacji I2C
  7.  
  8.  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE); //podłączenie zegara/ taktowanie portów A,B, C, D
  9.  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //uruchomienie zegara funkcji alternatywnych linii I/O
  10.  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);   //uruchomienie zegara modułu komunikacji I2C
  11.  
  12.      GPIO_StructInit(&gpio);                //konfiguracja domyślna portu
  13.  gpio.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;         //konfiguracja pinów 6 i 7, czyli linii SCL, SDA
  14.  gpio.GPIO_Mode = GPIO_Mode_AF_OD;      //do trybu open-drain
  15.  gpio.GPIO_Speed = GPIO_Speed_50MHz;        //ustawienie prędkości linii na 50 MHz           
  16.  GPIO_Init(GPIOB, &gpio);               //inicjalizacja modułu GPIOB/ konfiguracja portu B
  17.  
  18.  I2C_StructInit(&i2c);          //domyślna konfiguracja modułu komunikacji I2C
  19.  i2c.I2C_Mode = I2C_Mode_I2C;       //ustawienie trybu komunikacji I2C
  20.  i2c.I2C_Ack = I2C_Ack_Enable;      //ustawienie możliwości generowania sygnału potwierdzającego ACK
  21.  i2c.I2C_ClockSpeed = 100000;       //ustawienie prędkości transmisji danych na 100 kHz
  22.  I2C_Init(I2C1, &i2c);          //inicjalizacja modułu I2C1
  23.  I2C_Cmd(I2C1, ENABLE);         //uruchomienie interfejsu komunikacji I2C  
  24.  
  25.  I2C_GenerateSTART(I2C1, ENABLE);   //rozpoczęcie komunikacji/ wysłanie sygnału START
  26.  while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS); //oczekiwanie na wykonanie zadania przez moduł I2C
  27.  
  28.  I2C_Send7bitAddress(I2C1, 0xa0, I2C_Direction_Transmitter);    //wysłanie adresu układu podrzędnego
  29.  while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) != SUCCESS);   //oczekiwanie na potwierdzenie układu podrzędnego za pomocą bitu ACK
  30.  
  31.  I2C_SendData(I2C1, 0x00);      //wysłanie adresu komórki pamięci danych
  32.  while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING) != SUCCESS);   //oczekiwanie na potwierdzenie od układu podrzędnego za pomocą bitu ACK
  33.  
  34.  I2C_GenerateSTART(I2C1, ENABLE);   //wysłanie sygnału START/ rozpoczęcie odbierania danych z układu podrzędnego
  35.  while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) != SUCCESS); //oczekiwanie na wykonanie zadania przez moduł I2C
  36.  
  37.  I2C_AcknowledgeConfig(I2C1, ENABLE);       //włączenie wysyłania potwierdzania odbioru danych
  38.  I2C_Send7bitAddress(I2C1, 0xa0, I2C_Direction_Receiver);   //wysłanie identyfikatora układu wraz z bitem na odbieranie danych
  39.  while (I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) != SUCCESS);  //oczekiwanie na potwierdzenie od układu podrzędnego za pomocą bitu ACK
  40.  
  41.     while(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED) != SUCCESS); //oczekiwanie na wysłanie danych przez układ podrzędny
  42.     uint8_t data1 = I2C_ReceiveData(I2C1);  //wczytanie pierwszego bajta danych
  43.  
  44.  I2C_AcknowledgeConfig(I2C1, DISABLE);  //wyłączenie wysyłania potwierdzenia odbioru danych
  45.     I2C_GenerateSTOP(I2C1, ENABLE); //wysłanie sygnału STOP o zakończeniu transmisji
  46.     while(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED) != SUCCESS); //oczekiwanie na ostatni bajt danych
  47.     uint8_t data2 = I2C_ReceiveData(I2C1);  //wczytanie ostatnie bajta danych
  48.  
  49.  while (1)
  50.  ;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement