0

タイム オブ フライト センサーVL53L0x - 200 cmVL6180x - 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.hi は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;
  }
}

よろしく。

4

0 に答える 0