タイム オブ フライト センサーVL53L0x - 200 cm
とVL6180x - 60 cm
. 私は 2 つの st ボードを持ってい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
もちろん in vl6180.h
i はfor を使用している間に に変更#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;
}
}
よろしく。