|
发表于 2019-11-20 21:23:48
|
显示全部楼层
有同样的问题,不额外开贴了,请楼主不要介意。
我使用的是H743VIT6,目前想使用SPI1的DMA功能传输,DMA配置代码贴出来了
- /* SPI1 DMA Init */
- /* SPI1_RX Init */
- hdma_spi1_rx.Instance = DMA2_Stream0;
- hdma_spi1_rx.Init.Request = DMA_REQUEST_SPI1_RX;
- hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
- hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
- hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;
- hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- hdma_spi1_rx.Init.Mode = DMA_NORMAL;
- hdma_spi1_rx.Init.Priority = DMA_PRIORITY_LOW;
- hdma_spi1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
- if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK)
- {
- __NOP();
- }
- __HAL_LINKDMA(hspi,hdmarx,hdma_spi1_rx);
- /* SPI1_TX Init */
- hdma_spi1_tx.Instance = DMA2_Stream3;
- hdma_spi1_tx.Init.Request = DMA_REQUEST_SPI1_TX;
- hdma_spi1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
- hdma_spi1_tx.Init.PeriphInc = DMA_PINC_DISABLE;
- hdma_spi1_tx.Init.MemInc = DMA_MINC_ENABLE;
- hdma_spi1_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
- hdma_spi1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
- hdma_spi1_tx.Init.Mode = DMA_NORMAL;
- hdma_spi1_tx.Init.Priority = DMA_PRIORITY_LOW;
- hdma_spi1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
- if (HAL_DMA_Init(&hdma_spi1_tx) != HAL_OK)
- {
- __NOP();
- }
- __HAL_LINKDMA(hspi,hdmatx,hdma_spi1_tx);
- /* SPI1 interrupt Init */
- HAL_NVIC_SetPriority(SPI1_IRQn, 1, 0);
- HAL_NVIC_EnableIRQ(SPI1_IRQn);
- HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 1, 0);
- HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
- HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 1, 0);
- HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);
复制代码 工程开启了Cache,MPU配置代码也贴出来- int mpu_init(void)
- {
- MPU_Region_InitTypeDef MPU_InitStruct;
- /* Disable the MPU */
- HAL_MPU_Disable();
- /* Configure the MPU attributes as WT for AXI SRAM */
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.BaseAddress = 0x24000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER0;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
- MPU_InitStruct.SubRegionDisable = 0X00;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /* Enable the MPU */
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- return 0;
- }
复制代码 目前的状态是使用SPI的DMA发送正常(有一个lcd屏同样挂载在SPI1,只给lcd发送指令和数据,屏幕正常显示了),但是SPI的DMA接收功能读取时数据一直是0,关闭Cache测试了一遍还是0,不开DMA模式读取回来数据正常。
想请问一下可能是什么原因?
|
|