在使用飞行时间传感器VL53L0x - 200 cm
和VL6180x - 60 cm
. 我有两个板,STM32F446 Nucleo
和STM32F767 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;
}
}
问候。