打印
[应用相关]

使用 openocd 调试 STM32F103

[复制链接]
1618|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用 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 下的安装方法如下:
# Rust
brew install rust

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

# OpenOCD
brew install openocd

# QEMU
brew install qemu

使用特权

评论回复
地板
工程师犹饿死|  楼主 | 2021-8-4 16:00 | 只看该作者
安装之后需要把 cargo 的 bin 目录加入到环境变量 PATH 中。

使用特权

评论回复
5
工程师犹饿死|  楼主 | 2021-8-4 16:01 | 只看该作者
export PATH="$HOME/.cargo/bin:$PATH""

使用特权

评论回复
6
工程师犹饿死|  楼主 | 2021-8-4 16:03 | 只看该作者
这一步很重要,否则出现找不到 rustup,或者编译时出现下面的错误:

使用特权

评论回复
7
工程师犹饿死|  楼主 | 2021-8-4 16:03 | 只看该作者
error[E0463]: can't find crate for `core`
  |
  = note: the `thumbv7m-none-eabi` target may not be installed

使用特权

评论回复
8
工程师犹饿死|  楼主 | 2021-8-4 16:05 | 只看该作者
装 cargo-generate
cargo install cargo-generate

使用特权

评论回复
9
工程师犹饿死|  楼主 | 2021-8-4 16:06 | 只看该作者
2. 生成一个 rust 工程
运行下列命令,项目名输入 app

使用特权

评论回复
10
工程师犹饿死|  楼主 | 2021-8-4 16:08 | 只看该作者
cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart

使用特权

评论回复
11
工程师犹饿死|  楼主 | 2021-8-4 16:09 | 只看该作者
进入 app
cd app

使用特权

评论回复
12
工程师犹饿死|  楼主 | 2021-8-4 16:14 | 只看该作者
3. 修改配置
设置 target,STM32F103 使用的是 thumbv7m-none-eabi

使用特权

评论回复
13
工程师犹饿死|  楼主 | 2021-8-4 16:15 | 只看该作者
rustup target add thumbv7m-none-eabi

使用特权

评论回复
14
工程师犹饿死|  楼主 | 2021-8-4 16:16 | 只看该作者
直接修改 .cargo/config 也可以。

使用特权

评论回复
15
工程师犹饿死|  楼主 | 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
}

使用特权

评论回复
16
工程师犹饿死|  楼主 | 2021-8-4 16:18 | 只看该作者
stm32f103ze 的 flash 的地址是 0x8000000,大小是 512K,改成如下内容:

使用特权

评论回复
17
工程师犹饿死|  楼主 | 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
}

使用特权

评论回复
18
工程师犹饿死|  楼主 | 2021-8-4 16:21 | 只看该作者
5. 编译
cargo build

使用特权

评论回复
19
工程师犹饿死|  楼主 | 2021-8-4 16:21 | 只看该作者
文档中,提供的几个命令,用来查看生成的可执行文件,貌似不能用:

使用特权

评论回复
20
工程师犹饿死|  楼主 | 2021-8-4 16:24 | 只看该作者
cargo readobj --bin app -- -file-headers

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

886

帖子

1

粉丝