硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1247|回复: 3
收起左侧

[SPI/QSPI] 请教STM32H750 SPI DMA双机通信开Cache就收不到数据

[复制链接]

44

主题

564

回帖

701

积分

金牌会员

积分
701
发表于 2021-9-26 17:50:41 | 显示全部楼层 |阅读模式
调试STM32H750 SPI DMA程序,参考STM32H7库例程的SPI DMA双机通信的例子。只在一个板子调试把MISO和MOSI连接到一起。现在问题是不开Cache能正常收到数据,开了Cache就收不到数据,MPU也配置了。


收发数据函数调佣:
        if(HAL_SPI_TransmitReceive_DMA(&hspi1, (uint8_t*)buffer_tx, (uint8_t *)buffer_rx, 64) != HAL_OK)
        {
                /* Transfer error in transmission process */
                Error_Handler();
        }



MPU配置如下:
void MPU_Config(void)
{
  MPU_Region_InitTypeDef MPU_InitStruct = {0};

  /* Disables the MPU */
  HAL_MPU_Disable();
  /** Initializes and configures the Region and the memory to be protected
  */
  MPU_InitStruct.Enable                         = MPU_REGION_ENABLE;
  MPU_InitStruct.Number                         = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress                 = 0x24000000;
  MPU_InitStruct.Size                                 = MPU_REGION_SIZE_512KB;
  MPU_InitStruct.SubRegionDisable         = 0x0;
  MPU_InitStruct.TypeExtField                = MPU_TEX_LEVEL1;
  MPU_InitStruct.AccessPermission         = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec                 = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable                 = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsCacheable                 = MPU_ACCESS_CACHEABLE;
  MPU_InitStruct.IsBufferable                 = MPU_ACCESS_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);
  /* Enables the MPU */
  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
}


DMA配置:
    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_PDATAALIGN_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)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(spiHandle,hdmatx,hdma_spi1_tx);

    /* SPI1_RX Init */
    hdma_spi1_rx.Instance                                         = DMA2_Stream2;
    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_HIGH;
    hdma_spi1_rx.Init.FIFOMode                                 = DMA_FIFOMODE_DISABLE;


  /* DMA interrupt init */
  /* DMA2_Stream2_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 1, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
  /* DMA2_Stream3_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream3_IRQn, 1, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream3_IRQn);


回复

使用道具 举报

7

主题

56

回帖

77

积分

初级会员

积分
77
发表于 2021-9-26 18:26:15 | 显示全部楼层
收发前后对cache的操作正确么
回复

使用道具 举报

7

主题

56

回帖

77

积分

初级会员

积分
77
发表于 2021-9-26 18:26:34 | 显示全部楼层
还要看下用的buffer是什么区域的ram
回复

使用道具 举报

1

主题

13

回帖

16

积分

新手上路

积分
16
发表于 2021-9-26 22:02:22 | 显示全部楼层
如果可以手动清缓存的话 用这个
SCB_InvalidateDCache_by_Addr
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 17:12 , Processed in 0.256983 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表