ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
983760 Топик полностью
SciFi (03.03.2020 21:35, просмотров: 358) ответил Aleksey_75 на Вы о чем ?? "Почему в коде как бы сначала ждём окончания передачи, потом пытаемся что-то принять?" это почему поздно то ? в DR принятый байт и он будет там лежать пока мы не поместим туда данные для отправки! Короч! я не одинок! похоже глюк
Виноват, не дочитал. Всё-таки CCR_EN надо ждать (про это в доке не написано, это да). У меня так: static void transfer(int len) { static DMA_TypeDef* const dma = DMA1; static DMA_Channel_TypeDef* const rx_stream = DMA1_Channel2; static DMA_Channel_TypeDef* const tx_stream = DMA1_Channel3; rx_stream->CMAR = (int)dmabuf; tx_stream->CMAR = (int)dmabuf; rx_stream->CPAR = (int)&SPI1->DR; tx_stream->CPAR = (int)&SPI1->DR; rx_stream->CNDTR = len; tx_stream->CNDTR = len; rx_stream->CCR = DMA_CCR1_MINC | DMA_CCR1_EN; tx_stream->CCR = DMA_CCR1_MINC | DMA_CCR1_DIR | DMA_CCR1_EN; while ((dma->ISR & DMA_ISR_TCIF2) == 0) ; // wait for Rx DMA transfer complete rx_stream->CCR = 0; tx_stream->CCR = 0; while ((rx_stream->CCR & DMA_CCR1_EN) || (tx_stream->CCR & DMA_CCR1_EN)) ; // wait for stream disable dma->IFCR = DMA_IFCR_CGIF2 | DMA_IFCR_CHTIF2 | DMA_IFCR_CTCIF2 | DMA_IFCR_CGIF3 | DMA_IFCR_CHTIF3 | DMA_IFCR_CTCIF3; }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้