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...)}}
如果不是用的最新的SDK,那先更新下SDK試試吧,https://gitee.com/w800/wm_sdk_w806
@abcd 你這SDK SPI例程的代碼和之前的一樣啊
@zhihang9122 那就不清楚了,我這邊測試demo用dma發送是正常的。