ST意法半导体
直播中

王丽

7年用户 1320经验值
私信 关注
[问答]

如何为VL6180X距离传感器提供HAL_ERROR?

你好!
我正在为 VL6180X 编写 C 代码,因为我发现 ST 自己的 C 代码库非常混乱,我无法使用它,因为我不理解它。所以我从https://github.com/pololu/vl6180x-arduino重新编写了一个 C++ 库到 STM32 C 代码
这是代码。(它现在正在工作!)
https://github.com/DanielMartensson/STM32-Libraries/tree/master/VL6180X
反正!当我第一次尝试将 I2C 与距离传感器连接时。
  • #define VL6180X_ADDRESS_DEFAULT  0x29
  • HAL_StatusTypeDef status = HAL_I2C_IsDeviceReady(&hi2c1, VL6180X_ADDRESS_DEFAULT, 10, 100);
我得到状态 = HAL_ERROR
这很糟糕,因为我可以使用 ST 自己的 .hex 文件中的 VL6180X 传感器,而且效果很好。但是当我试图编译自己的 C 代码时,它就不起作用了。
Nucleo F401RE板和传感器都没有问题。我也尝试将 SSD1306 I2C LCD 连接到 I2C,但随后我得到状态 = HAL_BUSY
此 Nucleo 板随附 VL6180X 扩展板X-NUCLEO-6180XA1
可能是firmare的一些问题吗?
  • static void MX_I2C1_Init(void)
  • {
  •   /* USER CODE BEGIN I2C1_Init 0 */
  •   /* USER CODE END I2C1_Init 0 */
  •   /* USER CODE BEGIN I2C1_Init 1 */
  •   /* USER CODE END I2C1_Init 1 */
  •   hi2c1.Instance = I2C1;
  •   hi2c1.Init.ClockSpeed = 100000;
  •   hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  •   hi2c1.Init.OwnAddress1 = 0;
  •   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  •   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  •   hi2c1.Init.OwnAddress2 = 0;
  •   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  •   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  •   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  •   {
  •     Error_Handler();
  •   }
  •   /* USER CODE BEGIN I2C1_Init 2 */
  •   /* USER CODE END I2C1_Init 2 */
  • }








回帖(1)

蔡表胤

2023-1-4 10:01:00
如果设备没有响应,HAL_I2C_IsDeviceReady 返回 HAL_ERROR。
从地址应该是左对齐的。所以改用 0x52 (0x29 << 1)。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分