STM32H7串口DMA只能接收一次数据,不能访问接收数组

前两天在转战STM32H7,项目中要用到串口,要求用DMA接收,但是遇到了一个问题,就是我的接收数组,但我不去访问它,它接收起来都是正确的,但是一旦我要对这个接受数组做处理了,它就出现问题了,DMA寄存器都正常,外设地址储存器地址数据量等都正常,但是接收数组再也没数据了。
后面在网上找到一篇文章,遇到了相同的情况HAL库的STM32F767的DMA通过IDLE中断接收数据但不能访问
看到这个一个答案,在这里插入图片描述
但是也懵了,之前都没搞过这些Cache什么的啊,博客也没给一个示范代码啥的,网上关于STM32这方面的只是也还少,怎么办呢。
前思后想,接触的只有MPU了,于是找了关于MPU的知识,很巧,正点原子有例程,STM32CubeMX也能直接生成,那就好办了,立即用CubeMX配置了这么一段代码

void MPU_Config(void)
{
  MPU_Region_InitTypeDef MPU_InitStruct;

  /* 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_NUMBER1;
  MPU_InitStruct.BaseAddress = 0x24000000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

  /* Enables the MPU */
  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

}

再调试时,OK搞定。

你可能感兴趣的:(STM32)