同一库文件在stm32f7上工作,但在stm32f4上不工作

时间:2019-02-11 13:36:08

标签: c i2c stm32f4 stm32f7

在使用飞行时间传感器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) 

库文件的astebin链接

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 :(得分:-1)

我有同样的问题。您找到解决方案了吗?

对我而言,函数 HAL_I2C_Master_Transmit() HAL_I2C_Master_Receive()返回 HAL_ERROR

我可以分析代码,我认为它与 HAL_I2C_ERROR_AF 有关,因为在 I2C_WaitOnMasterAddressFlagUntilTimeout(hi2c,I2C_FLAG_ADD10)中发现 I2C_FLAG_AF 是SET。

我不知道如何解决该问题,但由于CubeMX,我发现这是stm32f4中的常见错误。

相关问题