Как перенести чтение Arduino Wire (I2C) на STM32 HAL? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь перевести библиотеку Arduino для платы STM32F4 Nucleo (NFC-контроллер PN532 для записей).

Я застрял со следующим кодом:

void NFC_Module::read_dt(uint8_t *buf, uint8_t len)
{
  delay(2);

  // Start read (n+1 to take into account leading 0x01 with I2C)
  Wire.requestFrom((u8)PN532_I2C_ADDRESS, (uint8_t)(len+2));
  // Discard the leading 0x01
  receive();
  for (uint8_t i=0; i<len; i++) {
    delay(1);
    buf[i] = receive();
  }
}

И это моя текущая 'HAL версия':

static uint8_t i2c_read(uint8_t reg)
{
  uint8_t ret = 0;
  HAL_I2C_Mem_Read(&hi2c2, PN532_I2C_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, &ret, 1, 1000);
  return ret;
}

void read_dt(uint8_t *buf, uint8_t len)
{
    HAL_Delay(10);

    // Start read (n+1 to take into account leading 0x01 with I2C)
    //Wire.requestFrom((uint8_t)PN532_I2C_ADDRESS, (uint8_t)(len+2));
    // Discard the leading 0x01
        i2c_read((len+2));     //receive();

    for (uint8_t i=0; i<len; i++)
    {
        HAL_Delay(1);
        buf[i] = i2c_read((len+2));     //receive();
    }
}

, что, вероятно, неправильно, так как я не понимаю, что в Arduino Wire нет параметра 'register'.

AnyПомощь и / или исправления будут с радостью приняты, большое спасибо!

...