¿Por qué stm32 envía datos no válidos por spi?

Dos placas: arduino nano y stmvldiscovery. Las placas están conectadas por interfaz spi. Arduino es el dispositivo maestro. Stm32vldiscovery es un dispositivo esclavo. En el txBuf (búfer de transmisión), ambas placas tienen los mismos datos: matriz uint8_t (1, 2, 3, 4, 5, 6, 7, 8, 9, 10).

Ambos tableros envían los mismos datos. El analizador lógico capturó datos incorrectos de stm32vldiscovery. no se porque...

Ambas placas tienen configuraciones spi: arduino: msbfirst, freq = 1Mhz, spi_mode_0, datos de 8 bits; stm32: msbfirst, cpol = 0, cpha = 0, formato de marco motorola, misma frecuencia;

Intenté configurar el control NSS de hardware/software para stm32. Tiene el mismo resultado. El mismo resultado que obtuve con dos placas: stm32f4-discovery y stm32vldiscovery. stm32vldiscovery era el mismo dispositivo esclavo.

¿Por qué? ¿Qué ocurre?

El amarillo es arduino. El verde es stm32.ingrese la descripción de la imagen aquí

código stm32:

#include "main.h"
SPI_HandleTypeDef hspi1;

uint8_t txBuff[10];
uint8_t rxBuff[10];

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void);

int main(void)
{

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_SPI1_Init();

  for(int i = 0; i < 10; i++)
  {
    txBuff[i] = i+1;
    rxBuff[i] = 0;
  }

  while (1)
  {
    HAL_SPI_TransmitRecieve(&hspi1, txBuff, rxBuff, 10, 10000);
  }

}
...
static void MX_SPI1_Init(void)
{
  hspi1.Instance = SPI1;
  hspi1.Init.Mode = SPI_MODE_SLAVE;
  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_4;
  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi1.Init.CRCPolynomial = 10;
  if (HAL_SPI_Init(&hspi1) != HAL_OK)
  {
    Error_Handler();
  }
}

codigo arduino:

#include <SPI.h>


void setup()
{
    SPI.begin();
}

void loop()
{
    delay(5000);
    SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
    byte arr[10];
    for (int i = 0; i < 10; i++)
        arr[i] = i + 1;

    digitalWrite(SS, LOW);

    for (int i = 0; i < 10; i++)
        SPI.transfer(arr[i]);

    digitalWrite(SS, HIGH);
    SPI.endTransaction();
}
En cuanto a cualquier pregunta de depuración, debe incluir código suficiente para demostrar el problema.
Parece que tiene su STM32 configurado para un modo SPI diferente al de Arduino.
brhan, tal vez, pero ¿por qué dos stm32 con la misma configuración tienen los mismos problemas?

Respuestas (1)

¡Hoy reemplacé la placa stm32vldiscovery por stm32f4-discovery y funciona bien! Creo que el problema estaba en la placa de descubrimiento stm32vld. La placa Stm32vldiscovery funciona mal en este modo. No puedo encontrar otras razones.ingrese la descripción de la imagen aquí