Тот же файл библиотеки работает на stm32f7, но не на stm32f4 - PullRequest
0 голосов
/ 11 февраля 2019

Я застрял с очень странной проблемой при использовании датчика времени полета 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;
  }
}

С уважением.

1 Ответ

0 голосов
/ 06 марта 2019

У меня такая же проблема.Вы нашли решение?

Для меня функции HAL_I2C_Master_Transmit () и HAL_I2C_Master_Receive () возвращает HAL_ERROR .

Я мог бы проанализировать код, и я думаю, что он как-то связан с HAL_I2C_ERROR_AF , потому что в I2C_WaitOnMasterAddressFlagUntilTimeout (hi2c, I2C_FLAG_ADD10) найти 1012F I2C.* Я не знаю, как решить проблему, но обнаружил, что это распространенная ошибка в stm32f4 из-за CubeMX.

...