单片机最小系统是指用最少的电路组成单片机并能工作的系统。通常最小系统包括:电源电路、时钟电路、复位电路、调试/下载电路,对于STM32来说,还需要有启动选择电路。
电源电路
不同MCU的工作电压可能有所不同,例如51单片机的工作电压通常为5V,而STM32单片机的工作电压通常为3.3V,因此通常需要参考MCU的数据手册来确定工作电压和规格。
打开“2_官方文档”中的“1_STM32F103xE数据手册[重要].pdf”(以下简称“数据手册”),找到“5.1.6Power supply scheme”电源方案摘要,即可看到如图5.2.1所示的框图。
结合数据手册中“5.3.1一般工作条件”表5.2.1,我们可以知道上图中各个电压的数值。
VDD-VSS:标准工作电压;电压范围:2V~3.6V;从VDD1~VDD11共有11组VSS1~VSS11;需要11个100nF和1个4.7uF的去耦电容;经过MCU内部Regulator电源管理后,给CPU、内存等供电; VDDA-VSSA:模拟工作电压;电压范围:2V~3.6V(不使用ADC)2.4V~3.6V(使用ADC);需要1个10nF和1个1uF的去耦电容;从VDDA输入给ADC、DAC等供电; VREF±VREF-:参考电压;电压范围:2.4V~ VDDA;可以使用独立的参考电压VREF(需要10nF+1uF高频滤波电容),也可以将VDDA输入作为ADC、DAC等的参考电压; VBAT:RTC备用电源;电压范围:1.8V~3.6V;通常由纽扣电池供电。当主电源VDD断电时,VBAT给实时时钟(RTC)和备用寄存器供电(此时功耗超低);
从数据手册中学习了以上知识之后,我们再来看看原理图第三页的MCU电源部分。左侧的U1B(U1A和U1B共同组成U1,即MCU)是MCU所有电源相关的引脚。可以看到VDDA、VDD1~VDD11、VREF+直接连接到VDD_3V3(3.3V),VSSA、VSS1~VSS11、VREF-全部连接到GND,VBAT连接到VDD_BAT。右侧是一系列的去耦电容,在Layout(PCB布局布线)时需要均匀分布在各组电源引脚附近。至此,MCU电源部分满足数据手册的要求。
上面提到,VDD_3V3需要外部提供给MCU,也就是通过电源适配器。一般的电源适配器通常为5V或者12V,所以还需要一个电源转换电路,将外部输入的12V或者5V转换为3.3V。下面的图5.2.3、5.2.4、5.2.5分别是12V电源输入电路、12V转5V电路、5V转3.3V电路。5V转3.3V电路中有一个红色的LED灯,用来提醒用户整个系统电源工作正常,读者只要理解这部分电路就可以了。
最后我们来看RTC供电电路,当外部12V输入时,VDD_3V3为3.3V,而J5的纽扣电池电压约为3V,D5为肖特基二极管,此时VDD_3V3大于纽扣电池电压,所以由VDD_3V3供电。当没有外部12V输入时,VDD_3V3为0V,而J5的纽扣电池电压约为3V,此时VDD_3V3小于纽扣电池电压,由纽扣电池供电,保证RTC持续运行。电路如图5.2.6所示。
时钟电路
MCU 是一个集成芯片,由非常复杂的数字电路和其他电路组成,需要稳定的时钟脉冲信号才能保证正常工作。时钟就好比人体内部的心脏,心脏跳动带动血液流动,时钟每产生一次,就带动处理器执行一条指令。除了 CPU 之外,芯片上的所有外设(GPIO、I2C、SPI 等)都需要时钟,可见时钟的重要性。
芯片的时钟频率越高,芯片处理速度越快,但同时功耗也较高。为了平衡功耗和性能,微处理器一般具有多个时钟源,并将时钟分成多种大小,以适应不同需求的外设。
从数据手册中,我们可以得到如图5.2.7所示的时钟树。这里我们只关注时钟源,时钟的分配和使用将在后面讲解。
可以看到有四个时钟源:
①HSI(高速内部时钟信号):
HSI是内部高速时钟信号,频率为8MHz,由于内部提供,可以降低成本,但缺点是精度较差。
②HSE(高速外部时钟信号):
HSE为外部高速时钟信号,需要外部电路晶振,要求输入频率范围为4-16MHz。因为需要外部电路提供,所以成本会增加,但精度较好。
③LSE(低速外部时钟信号):
LSE为外部低速时钟信号,需外部电路晶振,输入频率范围为32.768KHz,一般用于RTC实时时钟。
④LSI(低速内部时钟信号):
LSI内部有一个低速RC振荡器,频率为40KHz。一般用于看门狗、RTC实时时钟等。
对于STM32F103系列MCU来说,需要一个高速时钟和一个低速时钟,这两个时钟可以选择使用内部时钟源以节省成本,也可以选择外部时钟源输入以提高精度。如果使用内部时钟源,则不需要设计外部电路。否则,需要设计时钟电路。
继续查看《Data Sheet》,可以看到图5.2.8和图5.2.9所示的外部时钟输入参考电路。手册中提到,对于HSE,晶振为8MHz时,CL1和CL2的电容范围为5pF~25pF。REXT用于产生负反馈,保证放大器工作在高增益线性区。同时还起到限流的作用,一般在兆欧级,具体由晶振决定。
对于LSE来说,晶振为32.768KHz时,CL1、CL2电容范围为5pF~15pF,之所以选择32.768KHz是因为32768=215,而分频设置寄存器通常都是2n的形式,这样经过15次分频就很容易得到1Hz的频率。
从数据手册中了解了以上知识之后,我们再来看一下原理图第三页的时钟电路,如图5.2.10所示,既可以对外提供高速时钟,也可以对外提供低速时钟,电路设计与数据手册一致。
晶振旁边的负载电容应采用高品质陶瓷电容(NPO),以满足高频应用。在PCB布局时,晶振和负载电容应尽可能靠近MCU,以减少启动时输出失真和稳定时间,确保晶振可靠工作。
复位电路
在嵌入式系统中,由于外界干扰,难免会出现程序跑飞或者卡死的情况,这时候就需要复位单片机才能重新运行。查看《参考手册》,可以看到如图5.2.11所示的复位电路。这个电路将一个按钮接在NRST引脚上,一旦按下按钮,NRST就会接地,拉低NRST,实现复位。
我们先来看一下原理图上的复位电路,如图5.2.12所示。开发板正常工作时,VDD_3V3将NRST拉高,POWER_EN为前面12V转5V电源芯片的使能脚,被电源芯片钳位在6.5V。当SW1按下时,D1为肖特基二极管,NRST和POWER_EN会导通并接地,拉低NRST和POWER_EN,复位MCU,断开系统电源。
调试/下载电路
不同的 MCU 调试/下载方式可能有所不同,例如 51 系列 MCU 使用串口下载程序,同时也使用仿真调试;对于 STM32,可以使用串口下载程序,也可以使用串口打印进行简单调试,但 STM32 支持更高效的 JTAG(Joint Test Action Group)调试接口和 SWD(Serial Wire Debug)调试接口。
该电路比较简单,涉及的引脚如表3.4.1所示,原理图如图5.2.13所示。
启动选择电路
不同的 MCU 可能有不同的启动方式类型,例如 51 系列 MCU 只能从内置存储器读取数据启动,因此无需选择启动方式。对于 STM32 来说,可以从内置存储器启动(默认)、从系统存储器启动(用于从 USART1 下载程序)、从内部 SRAM 启动(上电消失,可用于调试)。如果有多种启动方式,则需要选择启动方式。
STM32通过BOOT1、BOOT2引脚的电平组合来选择启动,组合方法及电路设计如图5.2.14所示。
当J1拨码开关第1、4脚断开(开发板对应1号红色拨码开关朝下),第2、3脚任意(开发板对应2号红色拨码开关任意)。此时BOO1为0,BOOT1任意,开发板上电,单片机将从内部主存读取数据启动,是最常用的启动方式。
当J1拨码开关第1、4针连接(开发板对应红色拨码开关第1针朝上),第2、3针断开(开发板对应红色拨码开关第2针朝下)时,此时BOO1为1,BOOT1为0,开发板上电启动,单片机将从系统存储器读取数据启动,此时可以将厂家烧录在系统存储器中的串口下载程序通过USART1烧录到主存储器中。
当J1拨码开关第1、4脚连通(开发板对应红色拨码开关第1脚朝上),第2、3脚连通(开发板对应红色拨码开关第2脚朝上)时,则BOO1为1,BOOT1为1,开发板上电,MCU会直接从内部SRAM启动,SRAM比Flash编程寿命长,可以用来调试。
各启动方式示意图如图5.2.15所示。通常我们只使用主内存启动,从系统内存启动、从串口下载程序等方式已经逐渐被淘汰,STM32高端MCU已经不支持这种下载方式,没有必要从SRAM启动,目前的Flash编程寿命已经远远超过用户实际编程次数。
【总结】
这篇小结教会了读者如何看懂原理图,也对STM32的最小系统有了一些了解,后面的电路会比较多,在分析某个电路的时候,结合相关手册中的参考电路和说明,通过不断的积累,相信读者也能够灵活地分析原理图。