准备工作
硬件准备:
JTAG调试器:支持STM32F4的调试器(如ST-Link、J-Link)。
开发板:STM32F4开发板(如STM32F4 Discovery)。
连接线:JTAG调试器与开发板的连接线。
软件准备:
交叉编译工具链:ARM GCC工具链(如arm-none-eabi-gcc)。
OpenOCD:开源的JTAG调试工具。
GDB:GNU调试器(如arm-none-eabi-gdb)。
应用程序镜像:编译好的固件文件(如firmware.elf)。
2. 连接JTAG调试器
将JTAG调试器连接到STM32F4开发板的JTAG接口。
STM32F4的JTAG接口通常包括以下引脚:TDI、TDO、TCK、TMS、NRST和GND。
确保JTAG调试器与PC的连接正常。
3. 配置OpenOCD
OpenOCD是用于与JTAG调试器通信的工具。
安装OpenOCD:
bash
复制
sudo apt-get install openocd
创建OpenOCD配置文件:
为STM32F4创建一个配置文件(如stm32f4.cfg),内容如下:
tcl
复制
source [find interface/stlink.cfg] # 使用ST-Link调试器
source [find target/stm32f4x.cfg] # STM32F4目标配置
启动OpenOCD:
bash
复制
openocd -f stm32f4.cfg
启动后,OpenOCD会监听GDB的连接(默认端口为3333)。
4. 启动GDB调试
使用GDB连接到OpenOCD,加载应用程序镜像和符号表。
启动GDB:
bash
复制
arm-none-eabi-gdb firmware.elf
连接到OpenOCD:
在GDB中运行以下命令:
bash
复制
target remote :3333
加载应用程序镜像:
bash
复制
load
设置断点:
在应用程序的关键函数(如main)设置断点:
bash
复制
break main
开始调试:
运行以下命令启动调试:
bash
复制
continue
5. 调试应用程序
通过GDB可以逐步调试应用程序,查看寄存器和内存状态。
常用GDB命令:
break <function>:在指定函数设置断点。
step:单步执行。
next:执行下一行代码。
print <variable>:打印变量值。
info registers:查看寄存器状态。
backtrace:查看函数调用栈。
6. 调试RTOS(如FreeRTOS)
如果运行的是RTOS(如FreeRTOS),可以使用RTOS-aware的GDB插件(如pyocd或OpenOCD的RTOS支持)来调试任务和调度器。
启用RTOS支持:
在GDB中加载RTOS插件:
bash
复制
monitor arm semihosting enable
monitor arm semihosting_fileio enable
查看任务状态:
bash
复制
info threads
|