(1)实验平台:普中STM32精灵开发板
(2)平台购买地址:普中STM32精灵开发板
(3)资料下载:普中科技-各型号产品资料下载链接
在前面章节,我们已经认识了 STM32 芯片,STM32 单片机要工作,光靠一个芯片肯定是不行的,它必须搭配相应的外围电路,我们把能使STM32 工作的最简单基础的电路统称为 STM32 最小系统。相信很多学完 STM32 单片机的朋友在后期可能会自己做一些具体的综合项目,在项目中涉及到的硬件电路各种各样,但唯一不变的是 STM32 最小系统,因此有些朋友就会自己去制作最小系统。本章就来介绍 STM32 最小系统构成,通过本章的学习,让大家能够掌握STM32 最小系统的构成,为后期自己搭建最小系统提供理论基础。本章分为如下几部分内容:
4.1 STM32 最小系统构成
若要使系统正常运行,必须确保 STM32 最小系统稳定工作。STM32 最小系统由以下几部分组成:
(1)晶振电路
(2)复位电路
(3)电源电路
(4)下载电路
第(4)是我们添加进来的,实际上最小系统只由前面3 个部分组成。为什么要加入第(4)部分呢?仅靠前面 3 个部分电路只能使单片机正常运行,但如果我们要给系统更新程序即烧入程序时就没有办法了,所以我们将第(4)部分电路也加入到最小系统当中,这时候我们就可以给系统任意烧入程序了。
晶振电路提供时钟给单片机工作,犹如人的心脏。复位电路提供系统复位操作,当系统出现运行不正常或者死机等情况时,可以通过复位按键重新启动系统。电源电路也是非常关键的一个部分,因为单片机对供电电压是有要求的,如果电压过大将烧坏芯片,如果电压过小系统将运行不了。所以选择一个合适稳定的电源电路是非常关键的。
下面就来介绍下这 4 部分的电路。
4.1.1 晶振电路
由于单片机正常工作需要一个时钟,对于 STM32 这种高级单片机来说,其内部自带高速时钟/低速时钟源。但通常我们不使用内部时钟源,而是在单片机主晶振引脚上外接一个晶振(STM32F103C8T6 芯片的主晶振管脚在5、6 脚位),至于需要多大晶振这就取决于你所使用的单片机,我们使用的是STM32F103C8T6,其时钟频率可在 0-72MHZ 上运行,一般情况下我们建议选择8MHz(适合 STM32 内部其他外设时钟的计算)。若直接将此晶振接入单片机晶振引脚,会发现系统工作不稳定,这是因为晶振起振的一瞬间会产生一些电感,为了消除这个电感所带来的干扰,可以在此晶振两端分别加上一个电容,电容的选取需要无极性的,另一端需要共地。根据选取的晶振大小决定电容值,通常电容可在10-33PF 值范围内选取。我们使用的是 22PF 电容。这样一来就构成了晶振电路。只有保证晶振电路稳定,单片机才能继续工作。其电路如下所示:
STM32 芯片上还有一个外设需要晶振,它是 RTC,这个在后面章节实验我们会专门介绍,这里先不用管它。要让 RTC 工作,通常外接一个32.768KHz 的晶振,其电路如下:
4.1.2 复位电路
前面我们已经将晶振电路搭建完成,我们知道晶振犹如人的心脏,需要无时无刻给单片机提供运行周期。但即使时钟周期在不停的运行,系统也有可能会出现崩溃或者瘫痪状态。这就好比人会生病一样,人一生病就得看医生,服用医生开的药后重新获得正常状态。那么单片机呢,它是如何获取重生的?这就需要设计一个复位电路来实现此功能。我们知道 STM32 引脚中有一个NRST 复位引脚,而 STM32 是低电平复位,所以需要让这个引脚保持一段时间低电平就可以。要实现此功能通常有两种方式,一种是通过按键进行手动复位,还有一种是上电复位,即电源开启后自动复位。手动复位是通过一个按键及电容电阻所组成,利用按键的开关功能实现复位,按键按下后 GND 直接接入到单片机NRST 引脚,松开后GND断开,NRST 被电阻拉为高电平。这一合一开就实现了手动复位。而自动复位主要是利用 RC 充放电功能,电源开启,由于电容隔直,GND 直接进入NRST,然后电容开始慢慢充电,直到充电完成,此时 NRST 被电阻拉为高电平。这样就起到上电复位的效果。这里我们采用手动复位。不到系统崩溃,我们几乎不会操作复位。复位电路如下图所示:
4.1.3 电源电路
任何电子器件都需要有一个合适的电源进行供电,这就好比人要吃饭一样,没有电源,系统是不会工作的。STM32 的工作电压是 1.8-3.3V 范围,通常我们使用 3.3V 直流。将电源接入到芯片电源引脚即可。
核心板电源电路如下图所示:
核心板上使用一个 USB 接口输入 5V 直流,经过 3.3V 稳压芯片输出直流3.3V给核心板上整个系统。同时核心板供电后与底板连接也可提供5V 和3.3V 给底板工作。
底板电源电路如下图所示:
使用一个 USB 接口 USB1 作为电源输入端,插入电源后只需打开电源开关POWER 即可获得 5V 电源,同样 5V 电源通过 V1 稳压芯片转换成直流3.3V 供STM32系统及外部器件使用。开发板上还预留了 J7(5V)和J8(3.3V)端子,这些端子可以很方便的给外部模块连接电源。同时底板供电后也可给核心板供电。
板上有 2 个 USB 接口,即核心板电路图中的 USB1 和底板电路图中USB1,其中核心板 USB1 接口有 2 种作用,第一种是当做 5V 电源输入口,第二种是STM32Slave USB 接口使用。底板 USB1 接口也有 2 种作用,第一种是当做5V 电源输入口,第二种是程序下载口(USB 转串口)。
它们的网络标号都是 VCC,经过电源开关出来后是VCC5,经过3.3V 稳压芯片转换为 3.3V 供系统及外围电路使用。所以使用任何一个接口供电均可。
4.1.4 下载电路
在前面小节中已经介绍了为什么要加下载电路到最小系统中,这里就不再重复。程序要烧写到单片机内是通过上位机(PC 机)及对应的软件将编译器生成的 xxx.HEX 文件通过单片机串口写入进去。
我们知道现在的笔记本电脑没有 RS232 接口,所以要使用USB 转TTL 串口电平芯片来建立 PC 机和单片机数据传输通路。通常使用CH340G 或者CH340C 芯片来完成电平转换。CH340G 需外接 12M 晶振,而 CH340C 内部自带晶振,所以可以不接外部 12M 晶振。我们使用的是 CH340C 电路。
下载电路如下图所示:
从上图可以知道,USB1 接口即为程序下载接口,D-和D+连接到CH340 芯片的 D-和 D+,然后 CH340 芯片的串口 TXD 和 RXD 管脚就连接到STM32 的串口1(PA9、PA10)上,这里不是直接连接到单片机串口,而是通过P4 端子进行转接。这样做不仅可以让开发板 USB 接口下载程序,还可以当成 USB 转TTL 模块使用,用来给其他单片机下载程序或调试外部串口设备,比如 WIFI、蓝牙、GPS 等。而且还有一点比较重要的是可以让 STM32 串口 1 不受 CH340 干扰。
USB1 接口不仅可以作为程序下载口,还可以作为串口通信口,因为它本身就是实现串口下载。同时还可以作为电源供电口,可以看到USB1 的管脚1 就是5V电源脚,所以开发板可以直接使用 USB 线来供电,如果提供的USB 线有问题,可以使用安卓手机数据线,接口都是兼容的。当电源开关打开后,电源指示灯即会点亮,表明系统电源正常。
在上图中我们还可以看到 BOOT0 和 RESET 管脚通过三极管连接到CH340的RTS 和 DTR 脚,这样设计是方便我们上位机软件在下载程序时,自动复位运行。这就需要了解 STM32 的启动模式。这个在后面会介绍到。
STM32 除了支持串口下载,还支持 JTAG/SWD 模式下载。STM32 芯片自带JTAG/SWD 管脚,通过相应的仿真器可实现程序下载、在线仿真调试等功能。JTAG模式管脚占用 5 个,而 SWD 模式管脚只占用 2 个,JTAG 模式管脚内已经包含了SWD 模式的 2 个管脚,所以我们开发板上使用的是 SWD 接口。如下图所示:
上图 SWD 接口为 2.5mm 间距的排针,与 STM32 的 SWD 接口连接。SWD 接口管脚排列顺序是按照普中 ARM 仿真器来的,可以非常方便对接。
至此,我们就把 STM32 最小系统介绍完,大家在制作最小系统时,可以参考我们的电路,这样成功率会更高。
4.2 STM32 启动模式
在 STM32F1 中,可以通过 BOOT[1:0]引脚选择三种不同启动模式,如下所示:
一般情况下如果我们想用串口下载程序,则必须配置BOOT0 为1,BOOT1为0,而如果想让 STM32 一按复位键就开始跑代码,则需要配置BOOT0 为0,BOOT1 随便设置都可以。我们开发板专门设计了一键下载电路,通过串口的DTR和 RTS 信号,来自动配置 BOOT0 和 RST 信号,因此不需要用户手动切换它们的状态,直接串口下载软件自动控制,非常方便的下载代码。这个在前面下载电路中已经介绍。
要实现对 BOOT 电平的切换,我们核心板上做了一个切换电路,如下所示:
出厂时,我们已经默认将 BOOT1 短接到 GND,BOOT0 短接到GND。这样STM32默认就从 FLASH 中运行程序。当使用我们自动下载软件下载时,CH340 会使RTS管脚输出高电平,控制 BOOT0 为高电平,从而进行串口下载,下载完成后CH340的 RTS 管脚恢复为低电平,BOOT0 则为低电平,从而实现从FLASH 运行。