Skocz do zawartości

STM32 L3G4200D I2C problem z komunikacją


brawo2

Pomocna odpowiedź

Cześć

Posiadam mikrokontroler STM32F100C4T6B oraz moduł GY-50 L3G4200D. Staram się odebrać informację z żyroskopu ( na początek tylko informacje o Z ) przy użyciu I2C oraz przesłać je za pomocą UART i wyświetlić na komputerze.
Korzystam z STM32CubeMX oraz Sytem Workbench for STM32. Komunikacja przez UART działa na pewno. Wszystko jest dobrze podłączone według dokumentacji. Na początku próbowałem UART obsługiwać w przerwaniu ale przy korzystaniu z I2C to przerwanie nie działa dlatego wrzuciłem je do głównej pętli i wtedy mogę odbierać wiadomości dane na komputerze. Czytałem też że może być konflikt między I2C oraz UART jeżeli chodzi o DMA ale według tego co sprawdziłem to nie powinno być w przypadku mojego modelu.  Próbowałem też samej komunikacji I2C bez UART, uzależniłem zmienną od silnika ale silnik ani drgnął. Niestety nie mogę podłączyć STMa przez SWD gdyż źle zaprojektowałem płytkę PCB. Poniżej wrzucam kod. Proszę o pomoc.

#define L3G4200D_ACC_ADDRESS (0x69 << 1) // adres akcelerometru
 // adres akcelerometru
#define L3G4200D_ACC_CTRL_REG1 0x20 // rejestr ustawien 1
#define L3G4200D_ACC_CTRL_REG4 0x23 // rejestr ustawien 1
#define WHO_AM_I 0x0F
#define L3G4200D_ACC_Z_H_A 0x2D // starszy bajt danych osi z
//CTRL_REG1 = [DR1][DR0][BW1][BW0][PD][Zen][Yen][Xen]

// Maski bitowe
#define L3G4200D_ACC_100HZ 0x0F
#define L3G4200D_ACC_DPS 0x20


// Zmienne
uint8_t Data=0;
int8_t Zaxis =0;

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/*void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

	static uint16_t cnt = 0; //Licznik wysylanych wiadomosci
	uint8_t data [50];//Tablica przechowujaca wysylana wiadomosc
	uint16_t size = 0;//Rozmiar wysylanej wiadomosci

	++cnt; // Zwiekszenia licznika wysylanych wiadomosci
	size = sprintf(data, "Liczba wysylanych wiadomosc: %d.\n\r", cnt); // Stworzenie wiadomosci do
	 wyslania oraz przypisanie ilosci wysylanych znakow do zmiennej size
	HAL_UART_Transmit_IT(&huart1, data, size);// Rozpoczecie nadawania danych z wykorzystaniem przerwan



}*/
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

 uint8_t Settings = L3G4200D_ACC_100HZ;
 uint8_t Settings1 = L3G4200D_ACC_DPS;
  HAL_I2C_Mem_Write(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_CTRL_REG1, 1, &Settings, 1, 100);
  HAL_I2C_Mem_Write(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_CTRL_REG4, 1, &Settings1, 1, 100);


  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  HAL_I2C_Mem_Read(&hi2c1, L3G4200D_ACC_ADDRESS, L3G4200D_ACC_Z_H_A , 1, &Data, 1, 100);
	  	 	  Zaxis = Data << 8;
	  		uint8_t data1 [50];//Tablica przechowujaca wysylana wiadomosc
	  		uint16_t size = 0;//Rozmiar wysylanej wiadomosci
	  		size = sprintf(data1, "Odczyt Z: %d.\n\r", Zaxis); // Stworzenie wiadomosci do

	  			HAL_UART_Transmit_IT(&huart1, data1, size);// Rozpoczecie nadawania danych z wykorzystaniem przerwan
  /* USER CODE END 3 */
}
}

 

Edytowano przez brawo2
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.