如何使用 openOCD 和 gdb 对 STM32 闪存进行编程

发布于 2024-10-11 17:30:12 字数 533 浏览 9 评论 0原文

我使用带有 openOCD 和 GDB 的 Olimex ARM-USB-OCD 加密狗来编程和调试 stm32f103 微控制器。我使用的 IDE 来自 Olimex 开发套件 CD,并使用 eclipse ganymede。

我可以将一个小程序加载到 RAM 中并毫无问题地单步执行代码。

我现在有一个更大的程序,不适合 RAM(只有 20K),所以我想从闪存(128K)运行它。

我修改了链接描述文件,指示程序代码应放入闪存部分(地址 0x8000000),但 gdb 无法加载程序。

(gdb) 
20 load main.out
&"load main.out\n"
load main.out
~"Loading section .text, size 0xb0e6 lma 0x8000000\n"
Loading section .text, size 0xb0e6 lma 0x8000000
&"Load failed\n"
Load failed

我应该怎么做才能让gdb将程序加载到flash中?

I'm using an Olimex ARM-USB-OCD dongle with openOCD and GDB to program and debug an stm32f103 micro. The IDE I'm using came from the Olimex dev-kit CD and makes use of eclipse ganymede.

I can load a small program into the RAM and step through the code without any problems.

I now have a much larger program which doesn't fit into RAM (which is only 20K) and so I'd like to run it from flash (which is 128K).

I've modified the linker script indicating the program code should go in the flash section (address 0x8000000), but gdb fails to load the program.

(gdb) 
20 load main.out
&"load main.out\n"
load main.out
~"Loading section .text, size 0xb0e6 lma 0x8000000\n"
Loading section .text, size 0xb0e6 lma 0x8000000
&"Load failed\n"
Load failed

What should I do to get gdb to load the program into flash?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

并安 2024-10-18 17:30:12

有考虑过直接用openocd刷机吗?我正在类似的设置中执行此操作,但使用 ARM7 微控制器。

 openocd -f flash.cfg

这是我的 flash.cfg

set CHIPNAME at91sam7x512

source [find interface/olimex-arm-usb-ocd.cfg]
source [find target/at91sam7sx.cfg]

init    
halt

flash probe 0
flash probe 1

flash erase_sector 0 0 15
flash erase_sector 1 0 15

flash write_image my-image.elf

at91sam7 gpnvm 0 set
at91sam7 gpnvm 1 set
at91sam7 gpnvm 2 set
shutdown

GPNVM 内容是 Atmel SAM7 特定的,但我认为这个脚本应该为您制作 STM32 版本提供一个良好的起点。 Openocd 一开始可能会有点令人困惑,但是文档很好并且值得阅读(http://openocd.berlios.de/)。当前的稳定版本(0.4.0)相当旧,因此如果您遇到问题,请下载最新的源代码并编译自己的源代码。

Have you considered flashing directly with openocd? I am doing this in a similar setup, but with an ARM7 microcontroller.

 openocd -f flash.cfg

Here is my flash.cfg

set CHIPNAME at91sam7x512

source [find interface/olimex-arm-usb-ocd.cfg]
source [find target/at91sam7sx.cfg]

init    
halt

flash probe 0
flash probe 1

flash erase_sector 0 0 15
flash erase_sector 1 0 15

flash write_image my-image.elf

at91sam7 gpnvm 0 set
at91sam7 gpnvm 1 set
at91sam7 gpnvm 2 set
shutdown

The GPNVM stuff is Atmel SAM7 specific, but I think this script should give you a good starting point for making a STM32 version. Openocd can be a bit confusing in the beginning, but the documentation is good and worth reading (http://openocd.berlios.de/). The current stable version (0.4.0) is quite old, so if you have problems, download the latest source code and compile your own.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文