我使用 SWD 在 stm32 芯片中加载固件和调试。它使用 3 个引脚SWCLK(TCK)
:SWDIO(TMS)
和GND
。
我可以使用 SWD 接口中未使用的其他 JTAG 引脚:( TDI, TDO, TRST
) 用于自己的目的,同时保留在芯片中刷新固件的可能性吗?
实际上 SWD 只使用两个引脚 SWD 和 SCLK。GND 很常见,不能用于任何其他目的。SWO - 仅当您使用(并且需要)半主机等功能时
如果您运行 CubeMx - 您将看到,如果您选择 SWD,则所有其他 JTAG 引脚都可用于一般用途。
好吧,这可能取决于你的调试器的能力......
但总的来说:是的,您可以仅通过 SWD 进行闪存编程,并将剩余的 JTAG 引脚用于其他目的。例如,劳特巴赫调试器可以做到这一点。
但是,如果您的调试器工具支持跟踪记录,我不会将 TDO 引脚用于您的应用程序,因为该引脚通常可以用作 SWD 模式下的 SWO 跟踪引脚。(使用 Cortex-M3/M4 或 M7)
我只是想补充一点,如果您在调试器设置中选择在重置下连接,您始终可以使用 JTAG 或 SWD 连接到 stm32。
当您有意或无意地重新配置 JTAG 或 SWD 引脚时,这是必要的。但是,它也取决于连接到这些引脚的硬件,因此有时它不起作用。
尽管如此,它应该足以加载固件。
重置后,uC 将准备好通过 SWD 或 JTAG 连接,这完全取决于您的调试器(因为所有引脚都将在默认配置中),但是当您的应用程序重新配置调试接口使用的 IO 之一时,您会松动通过此接口连接到核心的能力。
如果您不使用任何 SWD 引脚(CLK 和 DIO),您将能够随时连接到您的目标,甚至无需重置 uC,因为这些引脚随时可以连接
但是,如果您将其中一个引脚重新配置为例如读取按钮,则需要在代码运行之前重置目标并连接到它,在这种情况下,您需要将连接添加到调试接口RESET 引脚,因此调试器会重置目标并在之后立即连接到它。(显然,在调试期间您不能按下按钮) 这就是为什么将 RESET 添加到调试器连接总是有用的
是的,您可以使用其他 JTAG 引脚。如果您不需要调试,您也可以在闪存芯片后使用 SWD 引脚,但在这种情况下,您很可能需要从系统内存引导以进行芯片重新编程。