Я пытаюсь восстановить данные с датчика LIS3DH, и я нашел это руководство на YouTube.

В учебнике человек использует следующее, чтобы увидеть, готов ли датчик к использованию:

if(HAL_I2C_IsDeviceReady(&hi2c1,SLAVEI2C_ADD,10,100)==HAL_OK)

Однако, когда я устанавливаю соединения и запускаю программу, я ничего не вижу.

Я подключил датчик следующим образом:

  • Датчик -> STM32
  • SDA -> SDA/D14 (напряжение 10 кОм)
  • SCL -> SCL/D15 (напряжение 10 кОм)
  • SDO -> 3.3 В
  • CS -> 3,3 В
  • GND -> GND
  • Vcc -> 3.3 В

Следующий код - это тот, который я использую, чтобы узнать состояние моего датчика.

#include "main.h"

I2C_HandleTypeDef hi2c1;

#define SLAVEI2C_ADD 0x19

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);

int main(void)
{

  HAL_Init();

  SystemClock_Config();

  __HAL_RCC_GPIOB_CLK_ENABLE();
  MX_GPIO_Init();
  __HAL_RCC_I2C1_CLK_ENABLE();
  MX_I2C1_Init()


  HAL_Delay(1000);
  if(HAL_I2C_IsDeviceReady(&hi2c1,SLAVEI2C_ADD,10,100)==HAL_OK)
  {
    HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5);
  }

  while (1)
  {

  }

}

Ошибка, которую я обнаружил, заключается в том, что время ожидания связи с датчиком истекло HAL_I2C_ERROR_TIMEOUT . Я понятия не имею, что это может быть за ошибка. Знаете ли вы, что может происходить?

Конфигурация в CUBEMX

0