ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
557534
Apтём (04.11.2014 15:54, просмотров: 12600)
Пытаюсь запустить передачу данных по SPI на STM32F4 - не получается. Инициализация DMA: INLINE static bool SpiDmaReady() { return (DMA2_Stream3->CR&DMA_SxCR_EN) ? false : true; } INLINE static void SpiDmaDisable() { DMA2_Stream3->CR=~DMA_SxCR_EN; } INLINE static void StartSpiDmaTransfer(uint32_t * spi_data_address, uint16_t transfer_size) { DMA2->LIFCR=0 | DMA_LIFCR_CTCIF3 | DMA_LIFCR_CHTIF3 | DMA_LIFCR_CTEIF3 | DMA_LIFCR_CDMEIF3 | DMA_LIFCR_CFEIF3 ; DMA2_Stream3->PAR=(uint32_t)&SPI1->DR; DMA2_Stream3->M0AR=(uint32_t)spi_data_address; DMA2_Stream3->NDTR=transfer_size/sizeof(uint16_t); // channel DMA2_Stream3->CR=0 | DMA_SxCR_CHSEL_0 | DMA_SxCR_CHSEL_1 ; // priority DMA2_Stream3->CR|=0 | DMA_SxCR_PL_0 | DMA_SxCR_PL_1 ; // FIFO // data transfer direction DMA2_Stream3->CR|=0 | DMA_SxCR_DIR_0 ; // peripheral and memory incremented mode DMA2_Stream3->CR|=0 | DMA_SxCR_MINC ; // single or burst transactions // peripheral and memory data widths DMA2_Stream3->CR|=0 | DMA_SxCR_MSIZE_0 | DMA_SxCR_PSIZE_0 ; // Circular mode // Double buffer mode // interrupts DMA2_Stream3->CR|=0 | DMA_SxCR_TCIE ; // enable transfer DMA2_Stream3->CR|=0 | DMA_SxCR_EN ; } Инициализация SPI: INLINE static void InitLedSpi() { SPI1->CR1=0 | SPI_CR1_DFF | SPI_CR1_SSM | SPI_CR1_SSI | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0 | SPI_CR1_SPE | SPI_CR1_MSTR ; SPI1->CR2=0; } Запуск передачи: if (SpiDmaReady()) { StartLedTimer(15); SpiWordCounter=0; StartSpiDmaTransfer((uint32_t *)spi_data_ptr, 32); // LedSpiSend(*spi_data_ptr++); } else { send_divider=9; SpiWordCounter=0; SpiDmaDisable(); } Ничего не передаётся - что же я забыл? Спасибо.