Connecting 2 NUCLEO32f411RE with SPI
Hi, I have this configuration on my master Nucleoboard
void MX_SPI2_Init(void)
{
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_2LINES;
  hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_HIGH;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_HARD_OUTPUT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  HAL_SPI_Init(&hspi2);
  __HAL_SPI_ENABLE(&hspi2);
}
when I receive an ASCII-character from the PC: I send it over to the slave
void USART2_IRQHandler(void)
{
  HAL_UART_IRQHandler(&huart2);
   HAL_UART_Receive_IT(&huart2,&data1,sizeof(data1));
data1++; //’A’ is echoed back, and transferred to slave as ‘B’
   HAL_SPI_Transmit(&hspi2,&data1,(uint16_t)sizeof(data1),HAL_MAX_DELAY);
   HAL_UART_Transmit(&huart2,&data1,(uint16_t)sizeof(data1),HAL_MAX_DELAY);
}
-----------------------
On my slave board I have:
void MX_NVIC_Init(void)
{
  /* SPI2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SPI2_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(SPI2_IRQn);
  SPI_1LINE_RX(&hspi2);
  __HAL_SPI_ENABLE_IT(&hspi2, SPI_IT_RXNE);
  __HAL_SPI_ENABLE(&hspi2);
  /* USART2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(USART2_IRQn);
  __HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
  __HAL_UART_HWCONTROL_RTS_ENABLE(&huart2);
}
void MX_SPI2_Init(void)
{
  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_HIGH;
  hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
  hspi2.Init.NSS = SPI_NSS_HARD_INPUT;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 10;
  HAL_SPI_Init(&hspi2);
}
And my slave interrupt handler looks like this:
void SPI2_IRQHandler(void)
{
  HAL_SPI_IRQHandler(&hspi2);
    uint8_t data1;
    HAL_SPI_Receive_IT(&hspi2,&data1,sizeof(data1));
    HAL_UART_Transmit(&huart2,&data1,(uint16_t)sizeof(data1),HAL_MAX_DELAY);
}
Could anybody please tell me, why this doesn’t work?
Kindest regards,
Lasse Karagiannis


