STM32烧录程序的多种方式及调试工具介绍

1.烧录程序方式

STM32现在烧录程序的主流方式包括JTAG、SWD和ISP,JTAG和SWD除了可以烧录程序之外还可以实现硬件仿真的,说白了就是可以在Keil MDK上实现在线仿真,调试断点之类的,但是ISP只用于实现程序的烧录,分别说明如下。

1.1 JTAG

JTAG(Joint Test Action Group,联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。多数的高级器件都支持JTAG协议,如DSPFPGA器件等。JTAG 接口的连接有两种标准,即 14 针接口和 20 针接口。

1.2 SWD

SWD串行调试(Serial Wire Debug),是ARM内核调试器的一种通信协议。相比于JTAG协议,占用更少的端口资源。一般只用四个接口即可:SWDIO、SWCLK、VCC、GND。一般SWD电路如下图所示。

1.3 ISP

ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。ISP通过芯片内部的自举程序(即Bootloader,由芯片厂家烧写好,不得更改)来选定一种串行的外设,对芯片内部的FLASH进行编程。最常用的ISP方式就是通过串口下载,最主要的优点就是成本低,缺点是只能用于下载程序,不能用Keil MDK硬件仿真。一般ISP电路如下图所示。

2 烧录程序工具

以上说的JTAG、SWD和ISP都是一种调试协议,各有优缺点,但是协议毕竟是软件层面的意思,实际烧录程序需要硬件去连接的,这就是烧录程序的工具,一般STM32常用的有ST-LINK、JLINK和USB转TTL模块。

2.1 ST-LINK

ST-LINK是ST公司推出的调试工具,ST-LINK现在最新的是V3版本,它的价格大约在300美元左右,当然某宝上几十块钱就能买到一个仿的ST-LINK,大多数国内开发者用的都是这种。从外观上来看,ST-LINK的体积小,方便携带。ST-LINK 支持所有带JTAG/SWD接口的STM32系列单片机。

2.2 JLINK

JLINK是德国SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器,很多ARM芯片的接口协议是JTAG,JLINK一端接电脑USB接口,一端接CPU的JTAG接口,JLINK充当的作用就是USB转JTAG,支持JTAG和SWD两种模式。价格也不便宜,正版的也要几千马内,我之前咨询过一个国内的代理商,V11版本的要7500,某宝上仿的V11几百块,不过相比于STLINK的体积,JLINK要大很多。

2.3 USB转TTL模块

有的STM32开发板自带了ISP下载电路,就不需要USB转TTL模块去烧录程序,但是有的没有带,比如在某宝买的比较便宜的STM32C8T6最小系统,这个时候想烧录程序如果没有STLINK和JLINK那么就需要用USB转TTL模块去烧录了,这个某宝十几块钱就能买到。

STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 3)SRAM = 芯片内置的RAM区,就是内存啦。            在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x   BOOT0=0   从用户闪存启动,这是正常的工作模式。 BOOT1=0   BOOT0=1   从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1   BOOT0=1   从内置SRAM启动,这种模式可以用于调试。         在系统复位后, SYSCLK的第4个上升沿, BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。         在从待机模式退出时, BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后, CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。        因为固定的存储器映像,代码区始终从地址0x0000 0000开始(通过ICode和DCode总线访问),而数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。 Cortex-M3的CPU始终从ICode总线获取复位向量,即启动仅适合于从代码区开始(典型地从Flash启动)。 STM32F10xxx微控制器实现了一个特殊的机制,系统可以不仅仅从Flash存储器或系统存储器启动,还可以从内置SRAM启动。         根据选定的启动模式,主闪存存储器、系统存储器或SRAM可以按照以下方式访问: ● 从主闪存存储器启动:主闪存存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(0x0800 0000)访问它,即闪存存储器的内容可以在两个地址区域访问, 0x0000 0000 或 0x0800 0000。 ● 从系统存储器启动:系统存储器被映射到启动空间(0x0000 0000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFF B000,其它产品原有地址为0x1FFF F000)访问它。(可用于串口下载) ● 从内置SRAM启动:只能在0x2000 0000开始的地址区访问SRAM。 注意: 当从内置SRAM启动,在应用程序的初始化代码中,必须使用NVIC的异常表和偏移寄存器,从新映射向量表之SRAM中。 ————————————————
### STM32烧写器的接线方法 对于STM32系列微控制器而言,使用专门的编程器/调试器进行程序烧录是一种常见做法。这种工具不仅具备下载功能和调试能力,还能与集成开发环境(IDE)相结合,提供一键式的便捷操作体验[^4]。 #### SWD模式下的接线说明 SWD(Serial Wire Debug)是ARM Cortex-M架构下的一种调试接口标准,它通过减少引脚数量来简化硬件设计的同时保持高效的调试性能。具体到STM32芯片上: - **GND (Ground)**:连接至目标板的地线; - **SWCLK**:对应于STM32的PA14管脚,用于传输时钟信号; - **SWDIO**:对应于STM32的PA13管脚,负责双向的数据交换; - **NRST (Reset)**:可选连接,通常接到STM32的复位引脚(如NRST),以便允许外部重置MCU; 这些连线应当尽可能短而稳固,以确保良好的电气特性。此外,某些情况下可能还需要额外接入VCC供电线路给JTAG/SWD适配器供电,但这取决于具体的编程器型号及其工作原理。 ```c // 示例代码展示如何初始化SWD接口配置 void init_swd_interface(void){ // 配置GPIO作为SWD接口使用的引脚 GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); // 开启GPIOA时钟 /* 设置PA13(SWDIO), PA14(SWCLK)为复用推挽输出 */ GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值