这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » NUCLEO-U083RC学习历程12-MPU的学习调试

共5条 1/1 1 跳转至

NUCLEO-U083RC学习历程12-MPU的学习调试

助工
2024-12-16 20:34:21     打赏

前言:在STM32U0微控制器中,ST公司提供了一个内存保护单元(MPU),个人觉得这个一个非常重要的特性,允许开发者自行定义内存区域的访问权限,以防止不受信任的应用程序访问或修改受保护的内存区域。

对于MPU的基本配置,可以使用STM32CubeMX软件工具来完成,该开发工具可以使我们的学习变得更加轻松便捷。

一:使能STM32U0的MPU功能,如下图所示:

1.png在CubeMX中配置MPU涉及到设置内存地址、访问权限和Cache规则,以实现对AXISRAM的高速访问。以下是配置MPU的基本步骤:

设置MPU控制模式: MPU控制模式有四种,可以通过配置MPU_CTRL寄存器来选择。例如,可以选择“Background Region Privileged access only + MPU Enable during hard fault, NMI and FAULTMASK handlers”,这意味着在硬件故障、NMI和FAULTMASK处理程序期间,只有特权软件可以访问默认内存映射。

配置MPU区域: 在MPU区域设置中,需要使能MPU区域,并设置基地址(例如0x1000)和区域大小(例如512KB)。此外,还需要配置子区域禁用、TEX域等级、访问权限、指令访问等等;

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 = 0x1000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_512B;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
  MPU_InitStruct.AccessPermission = MPU_REGION_NO_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);

}

在主函数中,直接执行之前编写好的串口输出代码

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    /* Insert delay 500ms */
    HAL_Delay(500);
		printf("Hello STM32! Hello keyboard007! Hello STM32U083RC!\r\n");


//      if (HAL_RNG_GenerateRandomNumber(&hrng, &aRandom32bit) != HAL_OK)
//      {
//        /* Random number generation error */
//        Error_Handler();
//      }
//		printf("aRandom32bit=%16d\r\n",aRandom32bit);

  }

可以看到程序运行状态:

1 00_00_00-00_00_30.gif




关键词: NUCLEO-U083RC     串口输出     MPU    

专家
2024-12-16 21:14:33     打赏
2楼

感谢分享


专家
2024-12-16 21:16:14     打赏
3楼

感谢分享


专家
2024-12-16 21:19:02     打赏
4楼

感谢分享


高工
2024-12-17 07:39:36     打赏
5楼

感谢楼主分享


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]