闪光吧 闪烁是将程序移动到微控制器(持久)存储器的过程。一旦闪烁,微控制器将在每次上电时执行闪存程序。

    在这种情况下,我们的led-roulette程序将是微控制器内存中唯一的程序。我的意思是微控制器上没有其他东西在运行:没有操作系统,没有“守护进程”,没有。led-roulette完全控制设备。

    在实际闪烁。我们需要做的第一件事就是启动OpenOCD。我们在上一节中做了这个,但这次我们将在临时目录(在Windows /tmp上的* nix; %TEMP%上)运行命令。

    确保F3已连接到笔记本电脑,并在新终端上运行以下命令。

    $ # *nix $ cd /tmp

    $ # Windows $ cd %TEMP%

    $ # Windows: remember that you need an extra -s %PATH_TO_OPENOCD%\share\scripts $ openocd \ -f interface/stlink-v2-1.cfg \ -f target/stm32f3x.cfg 注意董事会的旧版本需要传递稍微不同的参数 openocd。有关详细信息,请查看此部分。

    该计划将阻止; 离开那个终点站。

    现在是解释这个命令实际做什么的好时机。

    我提到F3实际上有两个微控制器。其中一个用作程序员/调试器。用作编程器的电路板部分称为ST-LINK(这是STMicroelectronics决定称之为的)。该ST-LINK使用串行线调试(SWD)接口连接到目标微控制器(该接口是ARM标准,因此在处理其他基于Cortex-M的微控制器时会遇到它)。该SWD接口可用于闪存和调试微控制器。ST-LINK连接到“USB ST-LINK”端口,当您将F3连接到笔记本电脑时,它将显示为USB设备。

    板载ST-LINK

    至于OpenOCD,它的软件在USB设备之上提供一些服务,如GDB服务器,这些服务公开了SWD或JTAG之类的调试协议。

    在实际命令上:.cfg我们使用的那些文件指示OpenOCD寻找ST-LINK USB设备(interface/stlink-v2-1.cfg)并期望STM32F3XX微控制器(target/stm32f3x.cfg)连接到ST-LINK。

    OpenOCD输出如下所示:

    Open On-Chip Debugger 0.9.0 (2016-04-27-23:18) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport “hla_swd”. To override use ‘transport select ‘. adapter speed: 1000 kHz adapter_nsrst_delay: 100 Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD none separate Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : Unable to match requested speed 1000 kHz, using 950 kHz Info : clock speed 950 kHz Info : STLINK v2 JTAG v27 API v2 SWIM v15 VID 0x0483 PID 0x374B Info : using stlink api v2 Info : Target voltage: 2.919073 Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints “6个断点,4个观察点”部分表示处理器可用的调试功能。

    我提到OpenOCD提供了一个GDB服务器,所以我们现在就连接到它:

    $ arm-none-eabi-gdb -q target/thumbv7em-none-eabihf/debug/led-roulette Reading symbols from target/thumbv7em-none-eabihf/debug/led-roulette…done. (gdb) 这只会打开一个GDB shell。要实际连接到OpenOCD GDB服务器,请在GDB shell中使用以下命令:

    (gdb) target remote :3333 Remote debugging using :3333 0x00000000 in ?? () 默认情况下,OpenOCD的GDB服务器侦听TCP端口3333(localhost)。此命令正在连接到该端口。

    输入此命令后,您将在OpenOCD终端中看到新输出:

    Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints +Info : accepting ‘gdb’ connection on tcp/3333 +Info : device id = 0x10036422 +Info : flash size = 256kbytes 差不多了。要刷新设备,我们将使用loadGDB shell中的命令:

    (gdb) load Loading section .vector_table, size 0x188 lma 0x8000000 Loading section .text, size 0x38a lma 0x8000188 Loading section .rodata, size 0x8 lma 0x8000514 Start address 0x8000188, load size 1306 Transfer rate: 6 KB/sec, 435 bytes/write. 就是这样。您还将在OpenOCD终端中看到新输出。

    Info : flash size = 256kbytes +Info : Unable to match requested speed 1000 kHz, using 950 kHz +Info : Unable to match requested speed 1000 kHz, using 950 kHz +adapter speed: 950 kHz +target state: halted +target halted due to debug-request, current mode: Thread +xPSR: 0x01000000 pc: 0x08000194 msp: 0x2000a000 +Info : Unable to match requested speed 8000 kHz, using 4000 kHz +Info : Unable to match requested speed 8000 kHz, using 4000 kHz +adapter speed: 4000 kHz +target state: halted +target halted due to breakpoint, current mode: Thread +xPSR: 0x61000000 pc: 0x2000003a msp: 0x2000a000 +Info : Unable to match requested speed 1000 kHz, using 950 kHz +Info : Unable to match requested speed 1000 kHz, using 950 kHz +adapter speed: 950 kHz +target state: halted +target halted due to debug-request, current mode: Thread +xPSR: 0x01000000 pc: 0x08000194 msp: 0x2000a000 我们的程序加载了,让我们调试吧!