Как использовать библиотеку STM32g4xx_HAL_Driver HAL для считывания данных датчика с помощью i2 c? - PullRequest
0 голосов
/ 26 мая 2020

Я сделал заказную плату MCU на основе STM32G431 и попытался прочитать регистр MPU6050. Но я не могу заставить работать HAL_I2C_Mem_Read. Это функция, которую я пытаюсь использовать:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);

И я настроил ее на:

HAL_I2C_Mem_Read(&hi2c3, 0x68, 0x0D, 8, &Buffer, 1, 10000);

Что мне не хватает?

Это часть для проверьте, работает ли он. Я переключаю красный и зеленый светодиоды, в зависимости от того, возвращает он HAL_OK или нет.

status = HAL_I2C_Mem_Read(&hi2c3, 0x68, 0x0D, 0x2, &Buffer, 1, 10000);
/*if (HAL_I2C_Init(&hi2c3) == HAL_OK)*/
if (status == HAL_OK)
  {
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_2);
    HAL_Delay(200);

  }

/*if (HAL_I2C_Init(&hi2c3) != HAL_OK)*/
if (status != HAL_OK)
      {
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_3);
        HAL_Delay(200);

      }

А это сборка MCU + Sensor + LED: STM32G431 Custom made Board

1 Ответ

0 голосов
/ 27 мая 2020

Я думаю, что uint16_t MemAddSize должно быть I2C_MEMADD_SIZE_8BIT (0x1) или I2C_MEMADD_SIZE_16BIT (0x2), а не 8 в вашем коде.
P / S: конечно, вы использовали stm32Cube и правильно его настроили ? Вы выбрали и вставили правильный контакт? И не забудьте проверить свое оборудование, возможно, некоторые сети не подключены или шина i2 c подвержена шумам. Я предлагаю вам использовать анализатор logi c для отладки подобного протокола.
Быть инженером-электриком - это больно. Удачи, друг мой.

...