相同的库文件在stm32f7上工作但在stm32f4上没有

问题描述 投票:0回答:1

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

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;
  }
}

问候。

c i2c stm32f4 stm32f7
1个回答
-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中的常见错误。

© www.soinside.com 2019 - 2024. All rights reserved.