Я застрял с очень странной проблемой при использовании датчика времени полета VL53L0x - 200 cm
и VL6180x - 60 cm
.У меня две доски, STM32F446 Nucleo
и STM32F767 Nucleo
.Я написал библиотеки для обоих датчиков времени полета на STM32F767 Nucleo
.Но пока я пытался реализовать ту же библиотеку на STM32F446 Nucleo
, она не работает.
При поиске решения я обнаружил, что есть проблема с I2C.В F7 все нормально и возвращает HAL_OK.Но в F4 он возвращает 'HAL_ERROR'.Под it я подразумеваю эту функцию.
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Pastebin link для библиотечных файлов
https://pastebin.com/z15btwTD - vl6180.c
https://pastebin.com/62XYxUVx - vl6180.h
Конечно в vl6180.h
я изменил #include "stm32f7xx.h"
на #include "stm32f4xx.h"
при использовании для STM32F446 Nucleo
.И я использую I2C1 в обеих платах.Но я пробовал и другие I2C, но все они в конечном итоге в одной и той же проблеме.Библиотека Hal генерируется с использованием CubeMx, а Attolic True Studio является IDE.
То же самое происходит с VL53L0X Sensor
.
Любое предложение будет по-настоящему оценено.
РЕДАКТИРОВАТЬ
Из этогоопределенная часть функции HAL_I2C_Master_Transmit()
возвращает HAL_ERROR
if(I2C_MasterRequestWrite(hi2c, DevAddress, Timeout, tickstart) != HAL_OK)
{
if(hi2c->ErrorCode == HAL_I2C_ERROR_AF)
{
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
//HAL_GPIO_TogglePin(BLUE_GPIO_Port, BLUE_Pin);
return HAL_ERROR;
}
else
{
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
return HAL_TIMEOUT;
}
}
С уважением.