0

在使用飞行时间传感器VL53L0x - 200 cmVL6180x - 60 cm. 我有两个板,STM32F446 NucleoSTM32F767 Nucleo。我已经为两个飞行时间传感器编写了库 STM32F767 Nucleo。但是,当我试图在它上面实现相同的库时,STM32F446 Nucleo它不起作用。

在寻找解决方案时,我发现 I2C 存在问题。在 F7 中一切正常,它返回 HAL_OK。但在 F4 中它返回“HAL_ERROR”。 的意思是这个功能。

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) 

库文件的 Pastebin 链接

https://pastebin.com/z15btwTD - vl6180.c

https://pastebin.com/62XYxUVx - vl6180.h

当然,在我使用 for 时vl6180.h已更改#include "stm32f7xx.h"为。我在两个板上都使用了 I2C1。但我也尝试过其他 I2C,但它们都遇到了同样的问题。Hal 库是使用 CubeMx 生成的,而 Attolic True Studio 是 IDE。#include "stm32f4xx.h"STM32F446 Nucleo

同样的事情正在发生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;
  }
}

问候。

4

0 回答 0