项目简介
本项目是一个在STM32F407G - DISC1微控制器上的示例,主要配置ARM Cortex - M的内存保护单元(MPU)。通过用户按钮(蓝色按钮),可以切换LED内存区域(GPIOD)的访问权限,从而控制4个LED的闪烁情况。
项目的主要特性和功能
- MPU灵活配置:能够对MPU进行设置,允许或禁止对GPIOD区域的访问权限,以此控制LED闪烁。
- 用户交互控制:通过按下用户按钮,可改变LED内存区域的访问权限,操控LED闪烁状态。
- 异常精准处理:当尝试向MPU保护的内存区域写入数据时,会触发MemManage_Handler异常处理程序。
安装使用步骤
前提条件
此项目需在STM32F4 Discovery开发板上运行,同时需合适的调试软硬件环境,且要对STM32F4系列微控制器的硬件抽象层(HAL)库有一定了解。
操作步骤
- 硬件连接:将开发板连接到PC,保证硬件连接正确。
- 开启调试服务器:打开一个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
- 编译项目:打开另一个MSYS2 shell窗口,进入项目目录,运行以下命令进行编译:
bash cd /C/Users/ricci/Desktop/LaboratorioSE/Progetti_Esame/P1/codice/MPU_2 make
- 启动调试:在上述shell窗口运行
make debug
命令启动调试,若使用MSYS2调试,可能需通过pacman -S gnu-netcat
命令安装nc
。 - 操作体验:按下用户按钮,观察LED状态的变化。可进行如下调试操作:
- 设置硬件断点:
b MemManage_Handler
- 启动程序执行:
c
- 等待LED闪烁后按用户按钮
- 程序因断点停止时,可使用以下命令深入分析异常原因:
p/x *(unsigned int*) 0xE000ED34
查看MemManage Fault Address Registerp/x *(unsigned int*) 0xE000ED28
查看Configurable Fault Status Registerp/x *(unsigned long*) 0x40020C10
读取GPIODxIDR寄存器
- 设置硬件断点:
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】