使用 arm-none-eabi-gdb 和 openocd 轻松访问外围设备

Get easy access to peripherals using arm-none-eabi-gdb and openocd

我使用openocdarm-none-eabi-gdbSTLinkV2-1来调试STM32F411CE芯片。我还使用 LL 和 CMSIS 库。问题是要检查例如的值我必须在数据表中查找特定 GPIO 端口的寄存器边界地址的引脚(例如 0x4002 0000 - 0x4002 03FF 对应 GPIOA),然后检查我要读取的寄存器的偏移量是多少(例如 0x10 对于 GPIOx_IDR)。然后要检查特定位,我必须在数据表中再次检查它在寄存器中的偏移量是多少,并根据十六进制值计算该位的值。所以对于 gdb 它将是:

(gdb) x 0x40020010
0x40020010: 0xa8280000 

是否有更简单的方法来获取值,通过键入类似的内容:

get bit value in register GPIOA IDR

我在 openocd 数据表或互联网上找不到任何可以回答我问题的内容。

我找到了解决办法。

CMSIS定义了所有外设,所以我们可以利用它:

  1. 使用 -gdwarf-4 -g3 gcc 标志编译项目以在 gdb
  2. 中使用预处理器宏
  3. 运行 gdb:

    arm-none-eabi-gdb -nw program.elf
    
  4. 利用 CMSIS 定义:检查例如PORTB 上的第 3 个引脚用作输入:

    (gdb) p (GPIOB->IDR & GPIO_BSRR_BS_3)