Жесть просто какая-то! Чего только ни перепробовал: при блокирующем чтении буфер опустошается, а при работе с DMA - нет.
В общем, как в интернете и рассказывали, единственным однозначным вариантом считать данные с SPI через DMA оказалось перезапускать SPI перед каждым чтением!
Хотя, конечно, возможно, здесь порылась собака где-то еще - ведь я перед чтением еще и команду пишу… Но почему тогда четырехкратное чтение SPI2->DR перед блокирующей операцией превращает чтение в детерминированное, а перед DMA - нет?
В еррате вообще ничего.
Я, кстати, пользуюсь-то F302. Он хоть де-факто и тот же 303, но мало ли. С точки зрения SPI полностью все одинаково. Еррата молчит на этот счет (у меня же не packing mode!).