Se puede usar DMA, pero tiene sentido solo si reúne las muestras en "bloques". Por ejemplo, DMA toma 100 muestras de ADC y las coloca en alguna área de la memoria. Una vez hecho esto, envía el bloque completo a través del UART, utilizando otro canal DMA y, simultáneamente, el primer canal DMA toma otras 100 muestras de ADC a otra área de la memoria. Repetir.
Sin embargo, no funciona igual con la interfaz USB en STM32F107. DMA no interactúa directamente con USB, porque USB tiene un búfer de paquetes dedicado. Sin embargo, podría usar DMA para transferir datos a este paquete de búfer.
Sin embargo, todavía debes tener un bucle principal, obviamente. Solo se llamará cada 100 muestras en lugar de para cada muestra, lo que liberará algo de potencia de CPU. Pero el compromiso es que hay una latencia adicional para obtener las muestras.
Ahora, para estimar la velocidad de datos máxima, hay tres factores limitantes: la CPU, el ADC y la interfaz de comunicación de salida. Creo que la CPU, a menos que la ejecute a una frecuencia muy baja, no será el cuello de botella. El cuello de botella serán los periféricos. El ADC realiza la conversión en aproximadamente 1µS, por lo que está bien para las tasas que menciona en su pregunta. Ahora, el periférico de salida: si es el UART, todo depende de la velocidad en baudios que se pretenda utilizar, y la matemática se realiza rápidamente: a 4,5 Mbit / s (velocidad máxima para USART1), con 16 bits por muestra (ADC es de 12 bits, pero tiene que redondear el tamaño de la muestra a un byte completo), hace aproximadamente 280 ksamples / segundos. Tal vez tengas algo de sobrecarga debido al protocolo, así que hazlo un poco menos. Para USB, la matemática es la misma, excepto que la velocidad de comunicación es de 12 MBit / s, pero la sobrecarga del protocolo será mayor. Al final, podrás ir al menos tan rápido como con el USART.
Editar : Lo siento, me acabo de dar cuenta de que el ADC es externo. Pero no cambia lo que dije, excepto que las muestras provienen de SPI (y DMA debería interactuar con SPI, entonces). Entonces, el factor limitante aquí será el ADC en sí, a 100kps.