[应用相关] 使用 openocd 调试 STM32F103

[复制链接]
2043|35
 楼主| 工程师犹饿死 发表于 2021-8-4 15:48 | 显示全部楼层 |阅读模式
使用 openocd 调试 STM32F103
背景
AWTK 在 STM32 上运行时,默认是使用的 Keil 管理工程。一般买开发板时,厂家提供的都是 keil 工程,移植起来比较方便,上手简单,但是后续维护比较麻烦:

AWTK 经常增加新的文件(比如新控件),同步到 keil 很麻烦,每个工程都要修改,文档也需要同步更新。

AWTK 的注释是中文,为了保证每个编译器都能正常编译,AWTK 源文件一般使用 UTF-8 With BOM 的编码。如果用 Keil 修改了代码,保存后它把 BOM 给去掉了,之后还得用其它工具把 BOM 加回去。

另外,我个人也不太喜欢在 Windows 下工作。一直希望用 gcc 来编译,用 gdb 来调试。以前尝试过,没有成功。最近看 rust-embedded,发现可以用 openocd 来调试,亲测可以使用。

我手上有块 stm32f103ze 板子,和 rust-embedded 提供的例子有些不同,需要做些改进。这里先做个笔记,供以后改造 AWTK 编译脚本时使用。

kiwis66 发表于 2021-8-4 15:52 | 显示全部楼层
这是什么高级货,截个图,亮个相啊
 楼主| 工程师犹饿死 发表于 2021-8-4 16:00 | 显示全部楼层
1. 安装相关软件包
Mac 下的安装方法如下:
  1. # Rust
  2. brew install rust

  3. # GDB
  4. brew install armmbed/formulae/arm-none-eabi-gcc

  5. # OpenOCD
  6. brew install openocd

  7. # QEMU
  8. brew install qemu
 楼主| 工程师犹饿死 发表于 2021-8-4 16:00 | 显示全部楼层
安装之后需要把 cargo 的 bin 目录加入到环境变量 PATH 中。
 楼主| 工程师犹饿死 发表于 2021-8-4 16:01 | 显示全部楼层
  1. export PATH="$HOME/.cargo/bin:$PATH""
 楼主| 工程师犹饿死 发表于 2021-8-4 16:03 | 显示全部楼层
这一步很重要,否则出现找不到 rustup,或者编译时出现下面的错误:
 楼主| 工程师犹饿死 发表于 2021-8-4 16:03 | 显示全部楼层
error[E0463]: can't find crate for `core`
  |
  = note: the `thumbv7m-none-eabi` target may not be installed
 楼主| 工程师犹饿死 发表于 2021-8-4 16:05 | 显示全部楼层
装 cargo-generate
  1. cargo install cargo-generate
 楼主| 工程师犹饿死 发表于 2021-8-4 16:06 | 显示全部楼层
2. 生成一个 rust 工程
运行下列命令,项目名输入 app
 楼主| 工程师犹饿死 发表于 2021-8-4 16:08 | 显示全部楼层
  1. cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
 楼主| 工程师犹饿死 发表于 2021-8-4 16:09 | 显示全部楼层
进入 app
  1. cd app
 楼主| 工程师犹饿死 发表于 2021-8-4 16:14 | 显示全部楼层
3. 修改配置
设置 target,STM32F103 使用的是 thumbv7m-none-eabi
 楼主| 工程师犹饿死 发表于 2021-8-4 16:15 | 显示全部楼层
  1. rustup target add thumbv7m-none-eabi
 楼主| 工程师犹饿死 发表于 2021-8-4 16:16 | 显示全部楼层
直接修改 .cargo/config 也可以。
 楼主| 工程师犹饿死 发表于 2021-8-4 16:18 | 显示全部楼层
4. 修改 memory.x
MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  /* TODO Adjust these memory regions to match y**ice memory layout */
  /* These values correspond to the LM3S6965, one of the few devices QEMU can emulate */
  FLASH : ORIGIN = 0x00000000, LENGTH = 256K
  RAM : ORIGIN = 0x20000000, LENGTH = 64K
}
 楼主| 工程师犹饿死 发表于 2021-8-4 16:18 | 显示全部楼层
stm32f103ze 的 flash 的地址是 0x8000000,大小是 512K,改成如下内容:
 楼主| 工程师犹饿死 发表于 2021-8-4 16:19 | 显示全部楼层
MEMORY
{
  /* NOTE 1 K = 1 KiBi = 1024 bytes */
  /* TODO Adjust these memory regions to match y**ice memory layout */
  /* These values correspond to the LM3S6965, one of the few devices QEMU can emulate */
  FLASH : ORIGIN = 0x8000000, LENGTH = 512K
  RAM : ORIGIN = 0x20000000, LENGTH = 64K
}
 楼主| 工程师犹饿死 发表于 2021-8-4 16:21 | 显示全部楼层
5. 编译
  1. cargo build
 楼主| 工程师犹饿死 发表于 2021-8-4 16:21 | 显示全部楼层
文档中,提供的几个命令,用来查看生成的可执行文件,貌似不能用:
 楼主| 工程师犹饿死 发表于 2021-8-4 16:24 | 显示全部楼层
cargo readobj --bin app -- -file-headers
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

967

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部