第3章〓STM32F103学习平台 本书使用的STM32F103学习平台如图31所示,包括1台ULINK2仿真器、1根USB转串口线和1台正电原子STM32F1战舰V3开发板,板载1片STM32F103ZET6微控制器、1MB大小的SRAM存储器IS62WV51216和1块800×480点阵TFT LCD屏等资源。在图31的基础上,将+5V电源适配器连接到STM32F1战舰V3开发板上,将ULINK2仿真器的另一端连接到计算机的一个USB口,同时,将USB转串口线的另一端连接到计算机的另一个USB口上。本书使用的笔记本电脑配置为Intel Core i7 9750H处理器、24GB内存、1TB硬盘、15.6寸液晶显示屏和Windows 10操作系统,现有流行的计算机配置均可实现本书的学习与实验工作。在计算机上, 需要安装Keil MDK v5.37(截至本书收稿时的最新版本,由于软件系统具有向下兼容性, 图31STM32F103学习平台 建议使用Keil公司最新发布的版 本)集成开发环境和串口调试助手等软件。这样,STM32F103ZET6微控制器的学习实验环境就建立起来了。 为了教学方便,本章将展示后续章节中用到的STM32F1战舰V3开发板的各个硬件模块的原理图,包括STM32F103核心电路模块、电源电路与按键电路模块、LED灯模块与蜂鸣器驱动电路模块、串口通信电路模块、Flash与EEPROM电路模块、温/湿度传感器电路模块、LCD屏接口电路模块、JTAG仿真接口与复位电路模块以及扩展SRAM电路模块等。需要说明的是,本章给出的这些电路原理图也是完整的,可组合成一个简易的STM32F103ZET6教学实验平台,考虑到与STM32F1战舰V3开发板完全兼容,使用了与其完全相同的器件名称和网络标号。 本章的学习目标: 了解嵌入式系统通用硬件电路的结构; 熟悉STM32F103核心电路与常用外设电路; 掌握STM32F103最小系统。 3.1STM32F103核心电路◆ STM32F103ZET6有144个引脚,其中,通用目的输入/输出口有7组,记为GPIOA~GPIOG,或记为PA~PG,有时也被称为PIOA~PIOG,每组有16位,即占用16个引脚,因此,全部GPIOA~GPIOG占用了112个引脚,绝大部分GPIO口都复用了多个功能。其余的32个引脚为电源管理和时钟管理等相关的引脚。 STM32F103核心电路如图32~图39所示。 图32为PA口的连接电路,其中,第36脚和第37脚借助于网络标号U2_TX和U2_RX分别与3.4节图314的SP3232芯片相连接,用作标准异步串行口的发送与接收数据线,实现与上位机的串口通信功能。图32中的第105、109和110脚与图33中的第133、134脚,通过网络标号JTMS、JTCK、JTDI、JTDO、JTRST与3.8节的图319相连接,实现在线仿真功能。 图32STM32F103ZET6芯片PA口 图33为PB口的连接电路,其中,第46脚通过网络标号LCD_BL与3.7节的图318的LCD4.3模块的第23脚相连,实现LCD屏背光亮度的控制; 第47、48脚和图37的第21、22、49脚通过网络标号T_SCK、T_MISO、T_MOSI、T_PEN和T_CS与图318的LCD4.3模块第34、29、30、31和33脚相连,通过串行数据接口控制触摸屏; 第135脚通过网络标号LED0与3.3节图312的电路相连接,用于控制LED0灯的闪烁; 第136、137脚通过网格标号IIC_SCL和IIC_SDA与3.5节的图316中的AT24C02芯片相连接,作为I2C总线通信的时钟与数据线路; 第139脚的网络标号BEEP与图313相连接,用于控制蜂鸣器; 第73、74、75和76脚的网格标号F_CS、SPI2_SCK、SPI2_MISO和SPI2_MOSI与图315中的Flash芯片W25Q128的第1、6、2和5脚相连,借助SPI通信总线实现对Flash存储器的数据读/写操作。 图33STM32F103ZET6芯片PB口 图34为PC口的连接电路。在图34中,第8和9脚外接32.768kHz晶体振荡器,用于为片内实时时钟RTC模块提供高精度的时钟信号。 图34STM32F103ZET6芯片PC口 图35为PD口的连接电路,其中,第85、86、114、115脚和图36中的第58~67脚以及图35中的第77~79脚的网络标号为FSMC_D0~FSMC_D15,它们与图318中的LCD4.3模块的DB0~DB15相连接,用于访问LCD屏的显存数据,同时,也与图321的SRAM芯片的数据总线I/O0~I/O15相连,用于读/写SRAM数据; 图37中的第10~15脚与第50、53、54、55脚和图38中的第56、57、87、88、89、90脚以及图35中的第80~82脚的网络标号依次为FSMC_A0~FSMC_A18,共19根线,连接到图321的SRAM芯片的地址总线A0~A18处,其中,FSMC_A10也连接到图318的LCD4.3模块的RS脚,用于LCD显示控制; 图35中的第118、119脚的网络标号FSMC_NOE和FSMC_NWE以及图38中的第127脚的网络标号FSMC_NE4与图318中LCD4.3模块的第4、3和1脚相连,用于LCD屏显示控制,其中FSMC_NOE和FSMC_NWE还与图38中第125脚的网络标号FSMC_NE3、图36中第141、142脚的网络标号FSMC_NBL0、FSMC_NBL1连接到图321的SRAM芯片的第41、17、6、39、40脚,用于SRAM芯片的数据读/写控制。 图35STM32F103ZET6芯片PD口 图36为PE口的连接电路,其中,第4脚通过网络标号LED1与图312中的LED1相连接,用于控制LED1灯; 第3、2和1脚通过网络标号KEY0、KEY1和KEY2与图311中的3个用户按键相连接。 图36STM32F103ZET6芯片PE口 图37STM32F103ZET6芯片PF口 图37为PF口的连接电路,图38为PG口的连接电路。在图38中,第126脚通过网络标号1WIRE_DQ与3.6节图317的温/湿度传感器相连接,用于读取温度和湿度值。 图38STM32F103ZET6芯片PG口 图39为STM32F103ZET6电源与时钟管理相关的电路部分,其中,第17、39、52、62、72、84、95、108、121、131和144脚的Vdd_x(x=1,2,…,11)连接VCC3.3网格标号,表示芯片工作在3.3V电压下; 第16、38、51、61、71、83、94、107、120、130和143脚的Vss_x(x=1,2,…,11)与网络标号GND相连接,即接地; 第138脚的BOOT0接地,表示从片内Flash启动; 第6脚的VBAT是内部RTC时钟专用电源供给端,同时连接了VCC3.3和电池BAT,用两个二极管1N4148隔离它们,当STM32F103电路板掉电时,电池BAT通过VBAT端口给RTC时钟模块提供能量,使得电路板的时间和日期正常计时。 图39STM32F103ZET6芯片电源与时钟管理部分 在图39中,第23脚和第24脚外接了高精度的8MHz晶体振荡器,为整个系统提供时钟源。STM32F103ZET6片内集成了8MHz的RC振荡器,精度可达到1%,当对振荡频率精度要求不高时,可省略外部晶振电路。 在图39中,第106脚为悬空脚。第25脚为外部复位输入脚,通过网络标号RESET与3.8节图320的复位电路相连接。此外,STM32F103ZET6芯片带有上电复位电路,外部复位电路可以省略。这里的网络标号RESET同时与图318中LCD4.3模块的第5脚RST相连接,用于复位LCD屏,同时还与图319中JTAG模块的RESET脚相连接,在JTAG仿真时,JTAG模块的RESET为输出端。 图39中的第32和31脚为片内ADC模块的参考电压输入端Vref+和Vref-,这里Vref-接地,而Vref+与模拟电源VDDA相连接。VDDA通过一个10Ω的电阻与VCC3.3(电压为+3.3V)相连接。第33和30脚分别为芯片模拟电源(VDDA)和模拟地(VSSA)的输入端,分别与网络标号VDDA和GND相连。一种推荐的做法是,模拟电源VDDA与数字电源VCC3.3之间以及模拟地VSSA和数字地GND之间,分别用滤波电路进行隔离。 图39中有11个0.1μF的滤波电容,这些电容被用在第17、39、52、62、72、84、95、108、121、131和144脚的Vdd_x(x=1,2,…,11)附近,当制作印制电路板(PCB)时,每个滤波电容应放置在对应的电源引脚附近,从而起到电源滤波的效果。 本节将STM32F103ZET6微控制器的核心电路原理图分成了8个子图,即7个GPIO口对应7个子图,以及1个电源和时钟管理相关的电路子图。在图32~图39中,使用网络标号与3.2节~3.9节的其他电路模块进行电气连接,从而形成完整的STM32F103学习与实验硬件电路原理图。 3.2电源电路与按键电路◆ STM32F103实验电路板的外部输入电源电压为+5V,网络标号为VCC5,由图310中的K2接口输入,通过直流电源调压芯片AMS1117后输出+3.3V直流电源,网络标号为VCC3.3,用作整个电路板上的数字电源,经过10Ω的电阻R42后的电源用作电路板上的模拟电源,用网络标号VDDA表示。在STM32F103学习实验电路板上,没有区分数字地和模拟地,均用网络标号GND表示,在做印制电路板时,数字地和模拟地应分开布线和敷铜,最后在一个焊盘处相连接。 图310电源电路 图311按键电路 图311为按键电路,按键直接与STM32F103ZET6芯片的引脚相连(参看图36),3个按键均为常开按键,当按键被按下时,输入低电平; 当按键弹出后,相应的引脚被内部上拉电路拉高,相当于输入高电平。 按键是最重要的外部输入设备之一,可以通过按键阵列支持更多的按键输入,或者通过扩展ZLG7289B芯片,支持高达64个按键输入(和64个LED灯显示)。 3.3LED与蜂鸣器驱动电路◆ 图312为LED灯驱动电路,其中,名称为PWR的LED灯为电源指示灯,当+3.3V电源工作正常时,该LED灯常亮。名称为DS0和DS1的两个LED灯为用户控制LED灯,直接与STM32F103ZET6芯片相连接(参考图33和图36),当网络标号LED0连接的引脚为低电平时,LED0灯亮; 当网络标号LED0连接的引脚为高电平时,LED0熄灭。LED1的工作原理与LED0相同,即网络标号LED1为低电平时,LED1灯点亮; 当网络标号LED1为高电平时,LED1灯熄灭。 需要特别指出的是,图32~图312可视为STM32F103ZET6微控制器的最小系统(这时,图32~图39中仅包含网络标号KEY0~KEY2和LED0~LED1以及电源和地相关的网络标号),即STM32F103ZET6微控制器的最小系统应包括电源电路、用户按键电路、LED灯指示电路、复位电路(内部复位)、晶体振荡器电路和相应的核心电路。 图313为蜂鸣器驱动电路,这里使用了有源蜂鸣器(即内部有振荡器和发声器,只需要 图312LED灯电路 图313蜂鸣器电路 施加电源输入就能以固定频率鸣叫),通过网络标号BEEP与STM32F103ZET6相连(参考图33),当BEEP为高电平时,NPN型三极管S8050导通,蜂鸣器鸣叫; 当BEEP为低电平时,三极管S8050截止,蜂鸣器关闭。 3.4串口通信电路◆ 图314为串口通信电路模块。 图314串口通信电路 在图314中,通过电平转换芯片SP3232实现STM32F103ZET6与上位机的串行通信,SP3232具有两个通道,这里仅使用了通道1。STM32F103ZET6微控制器的串口外设(参考图32)通过网络标号U2_RX和U2_TX按RS232标准与上位机进行异步串行通信。 3.5Flash与EEPROM电路◆ 图315为STM32F103ZET6微控制器外接的128Mb(16MB)大小的Flash存储器W25Q128电路,通过SPI方式与芯片STM32F103ZET6相连接(参考图33)。图316为2Kb(256字节)大小的EEPROM存储器AT24C02电路,通过I2C方式与芯片STM32F103ZET6相连接(参考图33)。 图315Flash芯片W25Q128电路 图316EEPROM芯片AT24C02电路 3.6温/湿度传感器电路◆ 常用的单线读/写式温/湿度传感器DHT11如图37所示,其通过一根总线1WIRE_DQ与STM32F103ZET6微控制器相连接(参考图38)。 图317温/湿度传感器DHT11接口电路 3.7LCD屏接口电路◆ 图318为LCD屏的接口电路,其端口包括3部分,即数据读/写端口、控制端口以及触摸屏数据与控制端口。这里的LCD屏是指LCD显示模块,LCD显示模块包括4部分,即LCD屏显示部分、LCD屏驱动部分、LCD屏控制部分和LCD屏显示存储器(简称显存)。对于一些高级微控制器,例如基于CortexM3内核的LPC1788芯片,片内集成了LCD控制器,它可以直接与LCD屏相连接,此时的LCD屏只含有LCD显示面板和LCD驱动器。由于STM32F103ZET6中没有集成LCD显示控制器,所以它只能连接LCD显示模块(简称LCM模块)。而图318的接口是专门针对星翼电子设计的4.3英寸(1英寸≈3.33厘米)TFT LCD显示模块的接口,其中LCD_CS为选通信号输入端,RS为命令或数据选择输入端,WR和RD为读、写信号输入端,DB15~DB0为数据输入/输出端。 图318TFT LCD屏接口电路 在图318中,MISO、MOSI、T_CS和CLK为触摸屏的数据读入、数据输出、片选和时钟端,T_PEN是触摸屏的中断输出端。 3.8JTAG与复位电路◆ ARM CortexM3内核的全部微控制器芯片,甚至几乎ARM系列的全部芯片,都支持JTAG(或SW)在线仿真调试,这使得学习ARM CortexM3微控制器只需要一套仿真器(与单片机多种多样的编程与仿真环境不同)。常用的仿真器有ULINK2和JLINK V8等,本书使用了ULINK2仿真器。图319为标准的20脚JTAG接口电路,可直接与ULINK2仿真器相连接。 图319JTAG接口电路 图320为复位电路。STM32F103ZET6微控制器为低电平复位芯片,在图320所示的RC电路中,上电以后,网络标号RESET将由0V逐渐抬升到3.3V,实现STM32F103ZET6微控制器复位。实际上,在STM32F103ZET6微控制器内部的NRST引脚(参考图39第25脚)接有约40kΩ的上拉电阻,因此,图320中的R3可以省略。在图320中,由于添加了一个按键RESET,因此支持手动复位操作。 图320带按键功能的上电复位电路 3.9SRAM电路◆ STM32F103ZET6学习实验板上还扩展了一个1MB大小的SRAM存储器IS62WV51216,该高速静态SRAM的访问速度可达55ns,其电路连接如图321所示。 图321SRAM存储器IS62WV51216电路 如图321所示,IS62WV51216芯片的I/O15~I/O0为16位数据输入/输出总线,A18~A0为19根地址输入总线,选址能力为219=524288=512K(1K=1024)的地址空间,每个地址空间的大小为半字(16位)。IS62WV51216芯片支持半字读/写和字节读/写方式,读/写指令的要求如表31所示。CS1、OE、WE、UB和LB引脚分别表示片选、输出有效、写入有效、高字节有效和低字节有效输入控制端。 表31IS62WV51216芯片读/写指令要求 序号方式CS1WEOEUBLBI/O[7:0]I/O[15:8] 1无效HXXXX高阻态高阻态 2无效LHHXX高阻态高阻态 3读低字节LHLLH低字节数据高阻态 4读高字节LHLHL高阻态高字节数据 5读半字LHLLL低字节数据高字节数据 6写低字节LLXLH低字节数据高阻态 7写高字节LLXHL高阻态高字节数据 8写半字LLXLL低字节数据高字节数据 注: H、L分别表示高电平、低电平,X表示任意电平 3.10本章小结◆ 本章详细介绍了以STM32F103ZET6微控制器为核心电路的学习实验板电路原理图,这些原理图是完整的,可以做成一块简易的STM32F103学习实验板,并且保持了与正电原子STM32F103战舰V3电路板的完美兼容。这些电路原理图使用Altium Designer 15制作,共分为STM32F103核心电路、电源电路与按键电路、LED灯与蜂鸣器驱动电路、串口通信电路、Flash与EEPROM存储器电路、温/湿度传感器电路、LCD屏接口电路、JTAG与复位电路以及SRAM电路等13个电路模块,要求读者结合各个硬件模块的芯片资料进一步加强对电路原理的认识,这需要一定的学习时间,这些电路是后续章节程序设计内容的硬件基础。第4章将介绍LED灯闪烁控制的工程程序设计方法。 习题 1. 设计一个STM32F103ZET6最小电路系统。 2. 简要阐述本章给出的学习平台实现的功能。 3. 简要阐述SRAM存储器IS62WV51216的访问方法。 4. 说明LED驱动电路的工作原理。 5. 借助Altium Designer软件设计本章给出的学习平台,并制作PCB板进行焊装、调试。