W806 SPI DMA數據不正確

發布於 2024-08-26 22:59:47

SPI驅動的屏幕,不使用DMA屏幕有內容;開啟DMA後,屏幕沒顯示,采集的數據也不對
用的是SDK的相關代碼

void spi_init(void)
{
    hspi.Instance = SPI;
    hspi.Init.Mode = SPI_MODE_MASTER;
    hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
    hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
    hspi.Init.NSS = SPI_NSS_SOFT;
    hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
    hspi.Init.FirstByte = SPI_LITTLEENDIAN;
    
    if (HAL_SPI_Init(&hspi) == HAL_OK)
    {
        
    }
}

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
    __HAL_RCC_SPI_CLK_ENABLE();

     __HAL_AFIO_REMAP_SPI_CS(GPIOB, GPIO_PIN_4);
    __HAL_AFIO_REMAP_SPI_CLK(GPIOB, GPIO_PIN_2);
    __HAL_AFIO_REMAP_SPI_MISO(GPIOB, GPIO_PIN_3);
    __HAL_AFIO_REMAP_SPI_MOSI(GPIOB, GPIO_PIN_5);
    
    hdma_spi_tx.Instance = DMA_Channel0;
    hdma_spi_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
    hdma_spi_tx.Init.DestInc = DMA_DINC_DISABLE;
    hdma_spi_tx.Init.SrcInc = DMA_SINC_ENABLE;
    hdma_spi_tx.Init.DataAlignment = DMA_DATAALIGN_WORD;
    hdma_spi_tx.Init.Mode = DMA_MODE_NORMAL_SINGLE;
    hdma_spi_tx.Init.RequestSourceSel = DMA_REQUEST_SOURCE_SPI_TX;
    
    __HAL_LINKDMA(hspi, hdmatx, hdma_spi_tx);
    if (HAL_DMA_Init(&hdma_spi_tx) == HAL_OK)
    {
        
    }
    
    HAL_NVIC_SetPriority(SPI_LS_IRQn, 1);
    HAL_NVIC_EnableIRQ(SPI_LS_IRQn);
}
void dma_init(void)
{
    __HAL_RCC_DMA_CLK_ENABLE();
    
    HAL_NVIC_SetPriority(DMA_Channel0_IRQn, 0);
    HAL_NVIC_EnableIRQ(DMA_Channel0_IRQn);
}

{{0826.png(uploading...)}}

查看更多

關注者
0
被浏覽
1.2k
1 個回答
zhihang9122
zhihang9122 2024-08-26
這家夥很懶,什麼也沒寫!

0826.png

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽