Problem with SPI communication between the two SPI modules of a board STM32L053R8
Hello everyone,
I am trying to test the communication between the two SPI modules of my board. The master (SPI1) must sent an command to the slave (SPI2). If the command is 0x31 the slave must send back 15 Bytes of data.
My code for the server is:
uint8_t dataTxMaster[15]={3,3,3,3,3,3,3,3,3,3,3,3,3,3,3};
uint8_t dataRxMaster[15]={0}; uint8_t dataTxSlave[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; uint8_t dataRxSlave[1]={0}; HAL_SPI_Receive_IT(&hspi2, (uint8_t*) dataRx, 1);//Register event for the first RX
uint8_t commandMaster = 0x31;
while (1)
{ SpiEn; //Macro to enable slave HAL_SPI_Transmit(&hspi1, (uint8_t*) &commandMaster, 1,2000); //Send command HAL_SPI_TransmitReceive(&hspi1, (uint8_t*) dataTxMaster, (uint8_t*) dataRxMaster, 15,2000); //Send dummy data while(HAL_SPI_GetState(&hspi1) != HAL_SPI_STATE_READY); SpiDis; //Macro to disable slave }and for the slave I used a call back function after a RX interruption :
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{ if(hspi->Instance == hspi2.Instance) {if(dataRxSlave[0] == 0x31)
{ //Send data to master
HAL_SPI_Transmit(&hspi2, (uint8_t*) dataTxSlave, 15, 2000);
while(HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY);}
//Register event for next RX
HAL_SPI_Receive_IT(&hspi2, (uint8_t*) dataRxSlave, 1);
}
}I found that the code crashes when I try to send data from the slave in the call back function, more exactly because of the line:
HAL_SPI_Transmit(&hspi2, (uint8_t*) dataTxSlave, 15, 2000);
Esentially what I am trying to do is to send the data to the master through an interrupt.
Does anyone know what the problem is? Any help is really appreciated!
Best regards,
Diego