littlebot
Published on 2025-04-16 / 0 Visits
0

【源码】基于ARM CortexM的LED内存访问权限控制示例

项目简介

本项目是一个在STM32F407G - DISC1微控制器上的示例,主要配置ARM Cortex - M的内存保护单元(MPU)。通过用户按钮(蓝色按钮),可以切换LED内存区域(GPIOD)的访问权限,从而控制4个LED的闪烁情况。

项目的主要特性和功能

  1. MPU灵活配置:能够对MPU进行设置,允许或禁止对GPIOD区域的访问权限,以此控制LED闪烁。
  2. 用户交互控制:通过按下用户按钮,可改变LED内存区域的访问权限,操控LED闪烁状态。
  3. 异常精准处理:当尝试向MPU保护的内存区域写入数据时,会触发MemManage_Handler异常处理程序。

安装使用步骤

前提条件

此项目需在STM32F4 Discovery开发板上运行,同时需合适的调试软硬件环境,且要对STM32F4系列微控制器的硬件抽象层(HAL)库有一定了解。

操作步骤

  1. 硬件连接:将开发板连接到PC,保证硬件连接正确。
  2. 开启调试服务器:打开一个MSYS2 shell窗口,执行以下命令: bash cd /C/Users/ricci/Desktop/LaboratorioSE/librerie_usate/xpack-openocd-0.11.0-1-win32-x64/xpack-openocd-0.11.0-1/bin ./openocd -f ../scripts/board/stm32f4discovery.cfg
  3. 编译项目:打开另一个MSYS2 shell窗口,进入项目目录,运行以下命令进行编译: bash cd /C/Users/ricci/Desktop/LaboratorioSE/Progetti_Esame/P1/codice/MPU_2 make
  4. 启动调试:在上述shell窗口运行make debug命令启动调试,若使用MSYS2调试,可能需通过pacman -S gnu-netcat命令安装nc
  5. 操作体验:按下用户按钮,观察LED状态的变化。可进行如下调试操作:
    • 设置硬件断点:b MemManage_Handler
    • 启动程序执行:c
    • 等待LED闪烁后按用户按钮
    • 程序因断点停止时,可使用以下命令深入分析异常原因:
    • p/x *(unsigned int*) 0xE000ED34 查看MemManage Fault Address Register
    • p/x *(unsigned int*) 0xE000ED28 查看Configurable Fault Status Register
    • p/x *(unsigned long*) 0x40020C10 读取GPIODxIDR寄存器

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】