单片机最小系统是指用最少的电路组成单片机可以工作的系统,通常最小系统包含:电源电路、时钟电路、复位电路、调试/下载电路,对于STM32还需要启动选择电路。
电源电路
不同的MCU的工作电压可能是不一样的,比如51单片机通常为5V,而STM32单片机通常为3.3V。因此,通常需要查阅该MCU的数据手册才能确定工作电压和规范。
打开“2_官方资料”的《1_STM32F103xE数据手册【重要】.pdf》(后简称,《数据手册》),找到“5.1.6Power supply scheme”电源方案小结,可以看到如图 5.2.1 框图。
结合《数据手册》“5.3.1 General operating conditions”的表 5.2.1 ,可得知上图中的各电压值大小。
- VDD-VSS:标准工作电压;电压范围:2V~3.6V;从VDD1 ~ VDD11,VSS1 ~VSS11共有11组;需要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为实时时钟(Real-Time Clock,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(High Speed Internal clock signal):
HSI是内部的高速时钟信号,频率8MHz。因为是内部提供,可以降低成本,缺点是精度较差。
②HSE(High Speed External clock signal):
HSE是外部的高速时钟信号,需要外部电路晶振,输入频率范围要求为4-16MHz。因为需要外部电路提
供,成本会增加,但精度较好。
③LSE(Low Speed External clock signal):
LSE是外部的低速时钟信号,需要外部电路晶振,输入频率范围要求为32.768KHz。一般用于RTC实时
时钟。
④LSI(Low Speed Internal clock signal):
LSI是内部的低速RC振荡器,频率40KHz。一般用于看门狗、RTC实时时钟等。
对于STM32F103系列的MCU,都需要一个高速时钟和一个低速时钟,而这两个时钟可以选择使用内部时钟源节约成本,也可以选择外部时钟源输入提高精度。如果使用内部时钟源,则无需设计外部电路,反之,则需要时钟电路。
继续查看《数据手册》,可以看到如图 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),以满足高频率场合。在Layout(PCB布局走线)时,晶振和负载电容,应尽可能的靠近MCU,以减少输出失真和启动时的稳定时间,保证振荡器可靠工作。
复位电路
嵌入式系统中,由于外界环境干扰,难免出现程序跑飞或死机,这时就需要复位让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系列单片机,使用串口下载程序,同时也使用仿真调试。对于STM32,可以使用串口下载程序,也能使用串口打印进行简单调试,但STM32支持更高效的JTAG(Joint Test Action Group)调试接口和SWD(Serial Wire Debug)调试接口。
该电路比较简单,所涉及的引脚参考表 3.4.1,原理图如图 5.2.13 所示。
启动选择电路
不同的MCU,启动的方式的种类可能不一样。比如51系列单片机,只能从内置存储器读取数据启动,因此没有启动选择的必要。对于STM32,可以从内置存储器启动(默认),可以从系统存储器(用于从USART1下载程序),可以从内部SRAM启动(调电消失,可用于调试),出现多个启动方式,就需要启动选择。
STM32通过BOOT1和BOOT2引脚的电平组合进行启动选择,组合方式和电路设计如图 5.2.14 所示。
当J1拨码开关的1、4脚断开(对应开发板红色拨码开关的1号拨码朝下),2、3脚任意(对应开发板红色拨码开关的2号拨码任意)。此时BOO1为0,BOOT1任意,开发板上电,MCU将从内部主存储器读取数据启动,是最常用的启动方式。
当J1拨码开关的1、4脚连接(对应开发板红色拨码开关的1号拨码朝上),2、3脚断开(对应开发板红色拨码开关的2号拨码朝下)。此时BOO1为1,BOOT1为0,开发板上电,MCU将从系统存储器读取数据启动,在系统存储器里面厂家烧写的串口下载程序,此时可以通过USART1烧写新程序到主存储器。
当J1拨码开关的1、4脚连接(对应开发板红色拨码开关的1号拨码朝上),2、3脚连接(对应开发板红色拨码开关的2号拨码朝上)。此时BOO1为1,BOOT1为1,开发板上电,MCU将直接从内部SRAM启动,SRAM的烧写次数寿命比Flash更多,可用于调试。
各启动模式的启动示意图如图 5.2.15 所示。通常,我们只使用主存储器启动即可。从系统存储器启动,实现从串口下载程序也逐渐被淘汰,STM32的高端MCU已经不支持该方式下载。从SRAM启动也没什么必要,目前Flash的烧写寿命次数也远远超过用户实际烧写次数。
【总结】
本小结带领读者学习了如何读原理图,也对STM32的最小系统有了一些了解。后面的电路众多,在分析某个电路时,结合相关手册的参考电路和说明, 加上不断积累,相信读者也能灵活分析原理图。
技术交流群(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
QQ群:869222007
单片机-嵌入式Linux交流群:
QQ群:536785813