你好!
我正在为 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 */
- }