STM32复位、BOOT、下载调试电路详解
STM32复位、BOOT、下载调试电路详解
本文详细介绍了STM32微控制器的复位、BOOT和下载调试电路。从硬件复位电路的工作原理,到不同复位方式的比较,再到BOOT启动模式的配置和下载调试工具的使用,内容全面且深入,适合从事嵌入式系统开发的技术人员阅读。
一、复位电路
1.1 定义
外部硬件复位电路:单片机的复位电路,是指单片机具有一个复位引脚,该引脚可通过高/低电平产生复位信号,使单片机中,除备份区域以外的所有寄存器恢复为默认值,且程序从头执行。
在STM32F103VE芯片中:
引脚名称 | 说明 |
---|---|
nRST | NRST 复位电路用于硬件复位STM32,保持低电平需保持在0.8V以下MCU才可复位 |
其中,n表示是低电瓶有效。
1.2 复位电路
1.2.1 上电复位
(1)定义
上电复位就是单片机通电后启动复位。
(2)电容作用和复位过程
- 去掉电容:上电的瞬间,NRST这个引角电压也拉到了3.3伏,达不到保持低于0.8伏以下的复位条件。
芯片直接供电,没有复位成默认的状态,那么单片机的状态有可能就是混乱的。 - 加上电容:上电的瞬间,电源的电压为3.3伏,而复位引角NRST的电压等同于电容两端的电压。
根据电容电压不能突变的原理,因此NRST引角也是跟随电容充电在一定的时间后再上升到3.3伏。
电容充电的时间可以根据计算公式,这样一来,NRST引角的电平经过内部斯密特触发器整形,满足低于0.8伏的要求,将信号再输入到复位电路,这样就可以使的我单片机复位。
1.2.2 按键复位
上电之后,按下复位按键,此时复位引角直接接地就产生了低电平复位信号。
二、STM32F1x的几种复位方式(初步了解)
2.1 系统复位
2.1.1 NRST引脚上的低电平复位(外部复位)
上面已经介绍过了。
2.1.2 看门狗复位
单片机中有两条狗,每当狗饿了就会叫,喂的狗粮是单片机中的递减计数器。
(1)独立看门狗IWDG复位
- 狗粮:12位的计数器,最大值0xFFF=4095。
- 大致过程:每来一个时钟信号,狗就会吃一颗狗粮,计数器减一。当计数器减到一就代表没有狗粮了,狗就会叫。
这个独立看门狗比较暴力,它在计数器为0的时候就会直接把单片机重启了。 - 触发计数器递减的时钟信号:触发计数器递减的时钟信号来源于时钟源中40KHz的内部低速时钟LSI。它是内部独立的时钟源,即使主时钟发生故障,也不影响看门狗的运行。
该40KHz不是特别的精准的,它会在30KHz和60KHz之间波动。 - 详细过程:如果按照40KHz字来算,也就是说如果启用了独立开门狗,并且使用默认装载值0xFFF,那么在4095除以40KHZ,也就是约为100ms之内没有喂狗,它就会重启单片机。
为了不被它复位,得每隔一段时间就喂狗一次,也就是让看门狗计数器的这个计数值恢复到重装载值上。
独立看门狗还是比较暴力的,当程序在某个时刻在中断中耗费了比较长的时间,就可能被独立开门狗复位了。
(2)窗口看门狗WWDG复位
- 狗粮:7位的计数器,最大值:0x7F。其倒计时到0x40的时候就会产生复位信号。
- 大致过程:产生的复位信号可以通过设置先通知内核:“我的狗粮不够了,只有0x40了,你要不要来加一下狗粮?不加我就重启单片机喽。”内核收到消息后就可以及时恢复计数器的值,防止被它复位了。
- 触发计数器递减的时钟信号:来源于PCLK,APB1外设时钟。对于F1系列来说,它的最大是支持36兆赫兹的计数频率,也就是说主时钟停止之后,窗口开门狗就会失效。
2.1.3 软件SW复位
软件software复位相对于其他的复位方式比较灵活,它是通过代码编程,在软件中设置某个寄存器的值,让单片机复位,这样复位的时间就是比较可控。
2.1.4 低功耗管理复位
通过写选项字节完成在待机或停机模式下的复位,这个用的比较少。
2.2 电源复位
电源复位,分为:
- 上电复位 power on RESET:POR
- 掉电复位 power drop RESET:PDR
- 从待机模式中返回复位
可以从它的复位电路看到,电源复位信号最终其实还是作用于RESET引角触发系统复位的。
2.3 后备区域复位
STM32F1系列的备份区包含RTC寄存器、RTC备份寄存器和备份SRAM,是专门开辟的一块数据存储区,有自己独立的电源电路,它不会因为系统复位电源复位而数据丢失。
为防止单片机主控电源意外掉电而数据丢失的情况,可以将一些重要的数据写到该备份的SRAM中,以便上电恢复。
二、BOOT启动电路
STM32在重启芯片时会在系统的第四个上升沿锁定,并根据两个引角:BOOT0和BOOT1,选择从哪块存储区开始启动。
2.1 存储区
STM32有三块区域存储系统代码,如下图:
第一块是内置闪存模块中的主存储模块。
第二块是闪存模块中的系统存储区域模块。系统存储器区域中存放着出厂自带的BOOTLOADER(boot loader)程序,用户可以通过BOOTLOADER的引导将程序烧录至,比如主存储器中,比如ISP烧录方式。
第三块是可以存储程序代码的内置SRAM。但SRAM具有掉电数据丢失的特性,所以这种从SRAM启动系统的方式用的就比较少,一般是用在平时进行代码调试的时候。
因为经常频繁的对flash进行读写程序代码,就会降低flash的使用寿命,所以说在调试时将程序烧录到SRAM中。
2.2 BOOT0和BOOT1
STM32是通过设置BOOT0和BOOT1两个引脚的高低电平状态来配置三种启动方式,如下图:
2.2.1 BOOT0=0,BOOT1=X
当BOOT0=0时,不管BOOT1为任何的状态,都是从主闪存flash存储器中启动,即从主闪存flash的起始地址0X0800000启动。
2.2.2 BOOT0=1,BOOT1=0
从系统存储器中启动,比如芯片最原始的状态是主闪存中是没有程序,需要从系统存储区引导下载程序到主闪存中。
2.2.3 BOOT0=1,BOOT1=1
从SRAM中启动。
2.3 硬件
2.3.1 引脚
在STM32F103系列中BOOT0为94号引脚,BOOT1为37号PB2角。
2.3.2 电路
外接BOOT设计电路
上图是最简单的利用三针座端子外接BOOT设计电路。
BOOT0默认是通过电阻接到了地,即默认是低电瓶。如果想要切换模式,可以用跳线帽将BOOT0和V33电源相连即可。
这个是一个最简单的设计,还需要手动的进行跳线。一般复杂的开发板都会设计一键下载电路,完成这个启动模式的切换,那具体在购买使用开发板时就可以查看相关的原理图。
三、下载调试电路
3.1 定义
通过一个特殊的电路设计,能够将在电脑中所编写的单片机程序代码下载到单片机的指定区域中,那么对于STM32来说,通常就是下载到内置主闪存中。
它最大的两个作用
- 下载已经编译好的程序文件到单片机中
- 可以在线硬件调试单片机
3.2 下载调试模式
3.2.1 JTAG模式
支持下载烧录程序和在线硬件调试程序。
采用了国际标准的测试协议,不仅仅是针对STM32芯片,在其他很多单片机上都是支持JTAG下载模式,它需要占用的这个引脚比较多。
- TCLK:时钟信号角
- TDI :数据输入角
- TDO :数据输出角
- TRST:复位角
- JTMS:模式选择角
3.2.2 SWD模式
支持下载烧录程序和在线硬件调试程序。
SWD(serial wire debug,串行线调试)是arm公司专门为了使用arm芯片的设备而设计的一种协议,用于微控制器进行编程和调试,它仅在arm架构的设备上才能用。
使用的引脚数比JTAG的要少,必须角只需要SWDIO,SWCLO两个引角就可以。
3.2.3 串口下载模式
只支持程序下载,不支持在线调试。
对应就是之前介绍的BOOT启动电路时,从系统存储器BOOTLOADER启动烧录的方法。
3.3 对比总结
3.4 下载调试工具
(1)STLINK
(2)JLINK
(3)USB下载器(部分开发板试用)
四、总结
本文详细介绍了STM32微控制器的复位、BOOT和下载调试电路。从硬件复位电路的工作原理,到不同复位方式的比较,再到BOOT启动模式的配置和下载调试工具的使用,内容全面且深入,适合从事嵌入式系统开发的技术人员阅读。