You configured with &hspi1 but your receive code you wrote was &hspi2.
if (HAL_SPI_Init(&hspi1) != HAL_OK)
HAL_SPI_Receive(&hspi2, (uint8_t *)spi_rx, 3,100);
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi){
HAL_GPIO_TogglePin(output_GPIO_Port, output_Pin);
HAL_SPI_Receive(&hspi2, (uint8_t *)spi_rx, 3,100);
}
Calling this function in the interrupt callback doesn't make sense. Please decide which method to use, and look at the sample projects for IT or for polling mode in the HAL examples.
HAL_SPI_Receive is a polling function:
* @brief Receive an amount of data in blocking mode.
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
Also, for your SPI transmit test, is it possible to transmit in slave mode without an input clock? Are you supplying that?