STM32F1 SPI-slave without CS
The approach is:

Configure SPI to use software slave select (bit SSM on SPI_CR1 register)
Trigger the slave select (internally) by setting and clearing the internal slave select (bit SSI on SPI_CR1 register)

If you like to, you can permanently set the internal slave select. The SPI peripheral will send and receive data as long as SSI bit is set, driven by the external clock (SCLK).
Using HAL/LL, it looks like so:
Initialization
hspi.Instance = SPI2;
hspi.Init.Mode = SPI_MODE_SLAVE;
...
hspi.Init.NSS = SPI_NSS_SOFT;
...
HAL_SPI_Init(&amp;hspi);

Setting Slave Select
LL_SPI_SetMode(&amp;hspi, SPI_CR1_SSI);

Clearing Slave Select
LL_SPI_SetMode(&amp;hspi, 0);

It can be quite a challenge to provide and consume the SPI data in time as the time and speed of the transmission is driven from the outside. Depending on the speed, a triggered interrupt can be sufficient to miss data. So you probably want to think about using DMA, possibly with a circular buffer.