STM32 HAL SPI ошибка или глюки IAR

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Pasa
Родился
Сообщения: 1
Зарегистрирован: Чт июл 28, 2016 02:05:14

STM32 HAL SPI ошибка или глюки IAR

Сообщение Pasa »

STM32F051, IAR, CubeMX

Читаю через SPI два байта - ответ правильный. Добавляю чтение 3-его байта - в приемном буфере ерунда.
На осциллографе картинка нормальная - все диаграммы и ответы красивые и правильные...

В параметрах функции пробовал и 3 сразу читать и в цикле по одному байту - не получается....

И вот так уже попробовал:

Код: Выделить всё

uint8_t localRxBuf[4];
uint8_t data1,data2,data3;

HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
data1 = localRxBuf[0];
HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
data2 = localRxBuf[0];
//HAL_SPI_Receive(&hspi1, (uint8_t*)&localRxBuf[0], 1, 10000);
//data3 = localRxBuf[0];
при добавлении третьего чтения портятся data1,data2,data3......мистика какая-то. Повторюсь - на осциллографе все красиво и правильно

SPI проинициализирован вот так:

Код: Выделить всё


  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_MASTER;
  hspi1.Init.Direction = SPI_DIRECTION_2LINES;
  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi1.Init.NSS = SPI_NSS_SOFT;
  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 7;
  hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
  hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
В инициализации SPI в HAL:

Код: Выделить всё

  if(hspi->Init.DataSize > SPI_DATASIZE_8BIT)
  {
    frxth = SPI_RXFIFO_THRESHOLD_HF;
  }
  else
  {
    frxth = SPI_RXFIFO_THRESHOLD_QF;
  }
похоже тут надо наоборот.....может быть ?
Реклама
Ответить

Вернуться в «ARM»