6.
\$\begingroup\$

我正在尝试遵循本指南“在GNU / Linux上为Cortex-M3 / STM32安装工具箱”(可用:https://www.olimex.com/products/arm/st/stm32-h103/)使用Olimex的STM32-H103开发板。一切正常工作,直到我需要将编译程序复制到Flash的点,使用Openocd。

遵循指令我启动OpenoCD服务器('Openocd -f Openocd.cfg')然后telnet('telnet localhost 4444')。最初启动OpenoCD服务器无法开始提供输出:

信息:此适配器不支持可配置的速度信息:STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748信息:目标电压:2.038896错误:过程“init”中的过程“transport”中的init模式失败

再次尝试似乎有效。。。但是,0断点和观察点似乎可疑。

信息:此适配器不支持可配置速度信息:STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748信息:目标电压:2.054665信息:stm32f1x.cpu:硬件有0个断点,0个观察点

在这种状态下,我无法停止或探测设备。

>程序“reset'>闪存探针0中的reset halt无法将目标识别为程序“flash”中失败的stm32x自动探针

然后我在果实网站上发现了这篇文章(http://nuttx.org/doku.php?id=wiki:howtos:jtag-调试)这似乎对我有点帮助(但我没有使用NuttX RTOS,只是裸机)。通过跟随文章并按住重置按钮直到“reset halt”命令超时,我可以成功探测设备。还要注意,现在有6个断点和4个观察点。

信息:此适配器不支持可配置速度信息:STLINK v2 JTAG v23 API v2 SWIM v4 VID 0x0483 PID 0x3748信息:目标电压:2.047244信息:stm32f1x.cpu:硬件有6个断点,4观察点>重置暂停在等待目标暂停时超时目标:stm32f1x.cpu-在过程“重置”目标状态中未暂停:由于调试请求而暂停目标,当前模式:线程xPSR:0x01000000 pc:0x08000250 msp:0x2000000>闪存探测器0设备id=0x20036410闪存大小=128KB设备id=0x20036410闪存大小=128KB闪存“stm32f1x”在0x08000000处找到

但是,当我编程并运行设备时,我会得到以下错误输出。。

> STM32F1X Mass_Erase 0 STM32X质量擦除完整>闪存Write_Bank 0 main.bin 0从文件main.bin写入9704字节,以0x000000在0.719990s(13.162 kib / s)>重置运行过程中的闪存库0(13.162 kib / s)中的“重置”JTAG状态包含无效模式值 - 通信故障轮询目标STM32F1x.cpu失败,GDB将被停止。再次轮询100MS JTAG状态包含无效模式值 - 通信故障轮询目标STM32F1x.cpu失败,GDB将停止。在300ms中再次轮询,JTAG状态包含无效模式值 - 通信故障轮询目标STM32F1x.cpu失败,GDB将停止。再次在700ms中再次投票,JTAG状态包含无效模式值 - 通信故障轮询目标STM32F1x.cpu失败,GDB将停止。再次在1500ms中再次投票,JTAG状态包含无效模式值 - 通信故障轮询目标STM32F1x.cpu失败,GDB将被停止。在3100ms中再次投票

在这个阶段,我看不到电路板上的LED闪烁,如指南建议会发生。有没有人有任何想法出现问题?

[编辑]我发现闪烁main.elf文件(而不是main.bin)不会导致在“重置运行”后输出上述错误,但是我仍然没有看到LED闪烁。

然后将gdb与命令“arm none-eabi-gdb-tui--eval command=“target remote localhost:3333”main.elf”一起使用。

如果我输入'c'继续我得到

(gdb)c继续。程序收到信号SIGINT,中断。0x0000100英寸??()

如果我输入“s”作为步骤,我得到

(GDB)S无法找到当前功能的界限
\$\endgroup\$
6.
  • \$\begingroup\$ 您的代码对JTAG I/O引脚有什么作用吗? \$\endgroup\$
    Markt.
    2015年1月4日10:40
  • \$\begingroup\$ 我简单地将代码复制出了指南。它应该只能切换LED引脚(PC12)。 \$\endgroup\$ 2015年1月4日10:42
  • \$\begingroup\$ 对MCU进行编程后,如果断开ST-LINK(可能复位或重启MCU),加载的程序是否执行,即LED是否闪烁? \$\endgroup\$
    Markt.
    2015年1月4日11:07
  • \$\begingroup\$ 不,它不眨眼。我即将使用一些新信息更新原始问题(关于闪烁.Eld,而不是使用GDB)。 \$\endgroup\$ 2015年1月5日9:11
  • \$\begingroup\$ 你可能会看看你是否有更好的运气github.com/texane/stlink \$\endgroup\$ 2015年1月5日9:59

2个答案2.

6.
\$\begingroup\$

所以我想出了我的问题......

天真地相信JTAG连接器(通过ST-Link V2)足以为电路板供电。我猜测尝试运行代码(并闪烁LED),同时只通过JTAG引脚为电路板供电无法提供足够的电流,电路板保留重置(因此JTAG连接会破坏)。

长话短说,确保USB电缆插入电路板(和电源)以供电电路板。

\$\endgroup\$
1.
  • \$\begingroup\$ 我要补充的是,Nucleo也不足以为外部电路板供电(尝试使用“Arduino”连接器电源引脚)。插入外部电源和bam,问题已解决 \$\endgroup\$ 2016年5月16日17:49
0
\$\begingroup\$

我想你就快到了,在我的测试系统上有一些警告:

  • 软件:Win7,Openocd 0.8.0,GDB
  • 硬件:STM32F4发现(带集成的ST-Link V2)
  • 固件:CoOS RTOS,非常简单的LED闪存任务

我发现,如果我刷新.bin文件,然后发出“重置”,我会得到LED活动。

我认为你可能会有一个问题。

\$\endgroup\$

    你的回答

    点击“发布您的答案”,您同意我们的建议服务条款,隐私政策Cookie政策

    不是你想要的答案?浏览已标记的其他问题问你自己的问题.