Лови. Это старенький код для железки-прототипа, задачей которой было переключение каналов ВЧ-коммутатора в заданной последовательности. Сделано в Segger Embedded Studio. На основе была сделана "боевая" версия, код от которой я выложить не могу. В этой версии есть бага - в прерывании rdma необходимо очищать буфер при срабатывании прерывания Transmit Complete, которое служит аппаратной защитой от переполнения буфера:
USART->CR1 &= ~USART_CR1_RE;
RDMA->CR &= ~DMA_SxCR_EN;
rbuf->payload = 0;
RDMA->NDTR = rbuf->size;
RDMA->CR |= DMA_SxCR_EN;
USART->CR1 |= USART_CR1_RE; // Я обычно включаю через некоторое время
Коду этому с полгода, в папке lib есть довольно старая версия моей либины. Сейчас в ней много чего переделано и исправлено, вплоть до sturtup'ов на c++.