How to use level-triggered interrupts with STM32F1xx?
Using an STM32F407 (which appears to have a similar EXTI approach), I have in the past attacked a similar problem by using a combination of RTOS task management and edge-triggered interrupts.

The core of it was a high priority task running at high priority to service unsolicited comms from the the SoC.

The task spent most of its time blocked, waiting for a signal generated by an edge-triggered interrupt.  It also timed out periodically to check whether it had missed an interrupt edge by checking the interrupt line's level, then blocked again.

If the interrupt line remained asserted after a pass of the service routine then the level check would catch that and the service routine would execute again.