Спасибо. Похоже оно самое и есть - в периферии тоже разрешение ДМА надо выставить. Добавил:
SPI1->CR2=0
| SPI_CR2_TXDMAEN
;
Вроде данные начали передаваться. Завтра посмотрю осцилографом - правильно ли передаётся. Но прогресс наличиствует.
"DMA2_Stream3->CR=~DMA_SxCR_EN;" по идеи должно быть "DMA2_Stream3->CR&=~DMA_SxCR_EN;"
Да, наверное так правильнее - я думал что во время транзакции все биты кроме ENABLE read only, но нет - не все. Так что &= конечно правильнее будет.
P.S. SPI_I2S_DMAReq из какого хидера? Я такого у себя не нашёл.