【问题标题】:Get easy access to peripherals using arm-none-eabi-gdb and openocd使用 arm-none-eabi-gdb 和 openocd 轻松访问外围设备
【发布时间】:2018-02-04 11:22:46
【问题描述】:

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

(gdb) x 0x40020010
0x40020010: 0xa8280000 

有没有更简单的方法来获取价值,通过输入类似的内容:

get bit value in register GPIOA IDR

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

【问题讨论】:

  • 像您一样查看芯片文档是 IMO 最简单的方法...您可以使用大量标头并编写一个小函数 unsigned int fun ( void ) { return(GPIOA_IDR);编译然后反汇编它会显示。 openocd 没有连接到 CMSIS(谢天谢地)这是它自己的交易,如果这种事情发生在它能够连接的所有可能的芯片上,那将是一场噩梦。 telnet/gdb 接口已记录在案,您可以轻松编写自己的程序来连接它们以及您希望创建的任何表。

标签: debugging gdb stm32 openocd


【解决方案1】:

我找到了解决办法。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 2011-10-26
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多