ADC имеет приоритет, поэтому невозможна ситуация, чтобы DMA был
занятым. А чтобы его не было на STM32, ну, это вообще сказка
какая-то! И с какого перепуга прерывание "бесплатное", если при
этом тратится уйма тактов на сохранение контекста, переключение в
другой, а потом возврат предыдущего контекста? Даже если прерывание
тупо инкрементирует счетчик (хотя, да: бывает, что по-другому
никак: тот же SysTick не умеет автоматом что-нибудь
инкрементировать, вот и приходится в прерывании миллисекунды считать)…