Допилил и
выложил на гитхаб код, где и прием, и передача реализованы на круговых буферах. Теперь уже не нужно проводить постоянный поллинг USB, чтобы считать новый кусок данных + передача новой порции тоже происходит в прерывании. Правда, на скорость это особо не повлияло (буквально немного увеличилась): скорей всего, сказываются накладные расходы на извлечение очередных 64 байт из буфера передачи. Надо будет на F303 проверить: там-то мощей побольше будет, возможно, что и все 12Мбит/с получится вытащить.
А пока вот какая зависимость от размера кругового буфера получается: 5154639 @ 512, 5235602 @ 2048 и 5167958
@ 4096. Общий размер оперативки на F042C6T6 - всего лишь 6кБ, так что с буфером в 8кБ не испытать. Видно, что, в принципе, скорость одна и та же, т.к. у меня достаточно неточный метод подсчета (я вычисляю, сколько миллисекунд требуется для передачи данных, а потом делю 2 миллиона переданных бит на это время; а т.к. время, естественно, получается ±1мс, а то и хуже, то и такие кривые числа выходят).