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搞定。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值