我正在尝试遵循本指南“在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无法找到当前功能的界限