Связь Arduino и STM32 по SPI

Arduino Leonardo выступает в качестве мастера, засылая по SPI команды на STM32F4-Discovery, STM настроена на Receive Only Slave, при приеме приходят не коррелируемые с отправляемыми значения, при связке Leonardo и Uno все так, как и должно быть. SPI на STM выглядит так:

  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_SLAVE;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES_RXONLY;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi2) != HAL_OK)
  {
    Error_Handler();
  }
.
.
.
HAL_SPI_Receive_IT(&hspi2, &voice_cmd, sizeof (voice_cmd));

А так дело выглядит на Leonardo

SPI.begin();
.
.
.
SPI.beginTransaction(SPISettings(10000, MSBFIRST, SPI_MODE0));
SPI.transfer(CMD);
SPI.endTransaction();

Вроде полярность и фаза соблюдены, думал на то, что разные уровни, 5В и 3.3В, делитель ситуацию не исправил, в чем может быть проблема?


Ответы (0 шт):