Я пытаюсь восстановить данные с датчика 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
. Я понятия не имею, что это может быть за ошибка. Знаете ли вы, что может происходить?