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.
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();
}
chris stratton
brahans
ruidoso88