一、复位电路
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 时,不管 BOOT 1为任何的状态,都是从主闪存 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设计电路。
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下载器(部分开发板试用)
四、总结
本文参考:
喵咕噜11