第3章 CHAPTER 3 STM32单片机的最小系统 STM32单片机应用系统由硬件和软件两部分构成。本章简要概述STM32系列单片机的总体特性,STM32F103C8T6单片机内部资源、引脚,并针对STM32F103C8T6单片机最小系统构成展开介绍,使读者能轻松利用STM32某个具体型号的单片机构建最小系统,进行具体应用的开发。 3.1STM32F103C8T6单片机 STM32单片机目前有16个系列,每个系列又有不同性能特性的型号以适应不同应用的选择。不同型号STM32单片机内部资源存在差异,但相同功能单元的使用方法是相同的。本书以STM32F103C8T6单片机为例对STM32单片机各功能单元的具体使用展开讲解。为便于后续章节知识点的学习,本节对STM32F103C8T6单片机引脚、复位、启动模式等进行概述,使读者能掌握STM32F103C8T6芯片的具体细节,为后续各功能单元的学习奠定基础。 3.1.1STM32F103系列概述 基于ARM CortexM3内核的STM32F1系列单片机属于主流STM32单片机,其中增强型STM32F103子系列单片机的CPU主频高达72 MHz,片内Flash容量高达1MB,芯片引脚数量多达144个,有QFN、LQFP、CSP、BGA等多种芯片封装形式,并具有多种片内外设、USB接口和CAN接口。根据STM32F103单片机片内Flash容量的不同,ST公司将其分为小容量(16~32KB)、中等容量(64~128KB)、大容量(256KB~1MB)3种。由于芯片片内Flash容量的不同,能实现的片内外设、内部资源也存在一定的差异,如表3.1所示。 小容量和大容量MCU是中等容量MCU的延伸,小容量MCU具有较小的Flash存储器、RAM空间,较少的定时器和片内外设,而大容量MCU则具有较大的Flash存储器、RAM空间和更多的片上外设,如SDIO、FSMC、I2S和DAC等。不同容量的STM32F103单片机根据片上外设及内部资源,提供包括36~144引脚的不同封装形式,同时保持与其他同系列MCU的兼容。根据MCU片内Flash容量、引脚数量、芯片封装的不同,STM32F103单片机又细分为多个具体型号,如图3.1所示。 表3.1STM32F103子系列MCU容量划分及片内资源 引脚 数目 小容量MCU中等容量MCU大容量MCU 16KB内存 32KB内存 64KB内存 128KB内存 256KB内存 384KB内存 512KB内存 6KB RAM 10KB RAM 20KB RAM 20KB RAM 48KB RAM 64KB RAM 64KB RAM 144 100 64 48 36 —— —— 2个USART 2个16位定时器 1个SPI、1个I2C、USB、CAN、1个PWM定时器 2个ADC —— 2个USART 3个16位定时器 2个SPI、2个I2C、USB、CAN、1个PWM定时器 1个ADC —— 5个USART+2个UART 4个16位定时器、2个基本定时器 3个SPI、2个I2S、2个I2C USB、CAN、2个PWM定时器 3个ADC、1个DAC、1个SDIO FSMC(100脚和144脚封装) ——— ——— 图3.1STM32F103子系列单片机 STM32F103子系列单片机之间引脚是完全兼容的,其软件和功能也是兼容的,为应用开发MCU选择提供了更大的自由度。丰富的外设配置使得增强型STM32F103系列微控制器适用于电机驱动和应用控制、医疗和手持设备、PC游戏外设和GPS平台、变频器、打印机、扫描仪、警报系统、视频对讲和暖气通风空调系统等多种应用场合。 3.1.2STM32F103C8T6引脚定义 STM32F103C8T6是基于ARM CortexM3内核的32位增强型单片机,片内Flash为64KB、RAM为20KB,引脚数为48,采用LQFP封装,工作温度为-40~+85℃。芯片封装外形如图3.2(a)所示,各引脚信号定义如图3.2(b)所示。 图3.2STM32F103C8T6封装及引脚信号定义 STM32F103C8T6单片机的主频为72MHz,总线宽度为32位,输入/输出端口为37个,供电电源电压为2.0~3.6V,各引脚信号的具体定义如表3.2所示。 表3.2STM32F103C8T6单片机引脚信号的具体定义 引脚 LQFP48引 脚 名 称类型I/O电平主功能 (复位后)可选的复用功能 默认复用功能重定义功能 1VBATS—VBAT—— 2PC13TAMPERRTCI/O—PC13TAMPERRTC— 3PC14OSC32_INI/O—PC14OSC32_IN— 4PC15OSC32_OUTI/O—PC15OSC32_OUT— 5PD0OSC_INI—OSC_IN—PD0 6PD1OSC_OUTO—OSC_OUT—PD0 7NRSTI/O—NRST—— 8VSSAS—VSSA—— 9VDDAS—VDDA—— 10PA0WKUPI/O—PA0WKUP/USART2_CTS/ADC12_IN0/TIM2_CH1_ETR— 11PA1I/O—PA1USART2_RTS/ADC12_IN1/TIM2_CH2— 12PA2I/O—PA2USART2_TX/ADC12_IN2/TIM2_CH3— 13PA3I/O—PA3USART2_RX/ADC12_IN3/TIM2_CH4— 14PA4I/O—PA4SPI1_NSS/USART2_CK/ADC12_IN4— 15PA5I/O—PA5SPI1_SCK/ADC12_IN5— 续表 引脚 LQFP48引 脚 名 称类型I/O电平主功能 (复位后)可选的复用功能 默认复用功能重定义功能 16PA6I/O—PA6SPI1_MISO/ADC12_IN6/TIM3_CH1TIM1_BKIN 17PA7I/O—PA7SPI1_MOSI/ADC12_IN7/TIM3_CH2TIM1_CH1N 18PB0I/O—PB0ADC12_IN8/TIM3_CH3TIM1_CH2N 19PB1I/O—PB1ADC12_IN9/TIM3_CH4TIM1_CH3N 20PB2I/OFTPB2/BOOT1—— 21PB10I/OFTPB10I2C2_SCL/USART3_TXTIM2_CH3 22PB11I/OFTPB11I2C2_SDA/USART3_RXTIM2_CH4 23VSS_1S—VSS_1—— 24VDD_1S—VDD_1—— 25PB12I/OFTPB12SPI2_NSS/I2C2_SMBAI/USART3_CK/TIM1_BKIN— 26PB13I/OFTPB13SPI2_SCK/USART3_CTS/TIM1_CH1N— 27PB14I/OFTPB14SPI2_MISO/USART3_RTS/TIM1_CH2N— 28PB15I/OFTPB15SPI2_MOSI/TIM1_CH3N— 29PA8I/OFTPA8USART1_CK/TIM1_CH1/MCO— 30PA9I/OFTPA9USART1_TX/TIM1_CH2— 31PA10I/OFTPA10USART1_RX/TIM1_CH3— 32PA11I/OFTPA11USART1_CTS/USBDM/CAN_RX/TIM1_CH4— 33PA12I/OFTPA12USART1_RTS/USBDP/CAN_TX/TIM1_ETR— 34PA13I/OFTJTMS/SWDIO—PA13 35VSS_2S—VSS_2—— 36VDD_2S—VDD_2—— 37PA14I/OFTJTCK/SWCLKPA14 38PA15I/OFTJTDITIM2_CH1_ETR/PA15/SPI1_NSS 续表 引脚 LQFP48引 脚 名 称类型I/O电平主功能 (复位后)可选的复用功能 默认复用功能重定义功能 39PB3I/OFTJTDOPB3/TRACESWO/TIM2_CH2/SPI1_SCK 40PB4I/OFTNJTRSTPB4/TIM3_CH1/SPI1_MISO 41PB5I/O—PB5I2C1_SMBAITIM3_CH2/SPI1_MOSI 42PB6I/OFTPB6I2C1_SCL/TIM4_CH1USART1_TX 43PB7——PB7I2C1_SDA/TIM4_CH2USART1_RX 44BOOT0I—BOOT0—— 45PB8I/OFTPB8TIM4_CH3I2C1_SCL/CAN_RX 46PB9I/OFTPB9TIM4_CH4I2C1_SDA/CAN_TX 47VSS_3S—VSS_3—— 48VDD_3S—VDD_3—— 说明: (1) I表示输入,O表示输出,S表示电源。 (2) FT表示引脚兼容5V电平。 (3) “主功能(复位后)”列的标识符表明芯片复位完成后引脚的默认功能,“默认复用功能”列的标识符表明该引脚可以复用为片内外设的引脚功能(注意,多个复用功能在同一时刻仅可使能一个复用功能),“重定义功能”列的标识符表明该引脚可以通过软件重新定义该引脚的功能为重定义标识符的功能。 (4) PC13、PC14和PC15引脚通过片内的电源开关进行供电,且只能够吸收有限的电流(3mA)。因此这3个引脚作为输出引脚时有以下限制: 在同一时间只有一个引脚能作为输出,作为输出引脚时只能工作在2MHz模式下,最大驱动负载为30pF,并且不能作为电流源(如驱动LED)。 (5) PC13、PC14和PC15引脚在备份区域第一次上电时处于“主功能(主功能(复位后))”状态下。之后即使复位,这些引脚的状态均由备份区域寄存器控制(这些寄存器不会被主复位系统所复位)。 (6) 在芯片复位后第5和第6引脚默认配置为OSC_IN和OSC_OUT功能引脚,可以在软件中重新设置这两个引脚为PD0和PD1功能引脚。在输出模式下,PD0和PD1只能配置为50MHz输出模式。 (7) 第20引脚在系统复位后的前4个系统时钟SYSCLK周期作为BOOT1功能引脚,用于确定系统的启动模式。在复位完成后该引脚作为PB2功能引脚。 (8) 第34、37、38、39、40引脚在上电复位时默认作为JTAG/SWD编程功能引脚,可以在软件中重新设置这些引脚作为其他功能引脚。 (9) 默认复用功能引脚名称标注中出现的ADC12_INx(x表示0~15的整数),表示这个引脚可以是ADC1_INx或ADC2_INx。例如,ADC12_IN9表示这个引脚可以配置为ADC1_IN9,也可以配置为ADC2_IN9。 (10) 表中第10引脚PA0对应的“默认复用功能”中的TIM2_CH1_ETR, 表示可以配置该功能为TIM2_CH1或TIM2_ETR。同理,表中第38引脚PA15对应的“重定义功能”中的TIM2_CH1_ETR具有相同的意义。 STM32F103C8T6的48个功能引脚大体可以分为3类。 (1) 电源引脚。STM32F103C8T6单片机共有9个电源引脚,分别是第1、8、9、23、24、35、36、47、48引脚,如表3.2中浅色阴影部分引脚所示。其中,VBAT是备用电源引脚,接1.8~3.6V电池电源,为RTC时钟提供电源; VDDA是接模拟电源,为芯片中模拟电路部分提供电源; VSSA是接模拟电源地; VSS_x(x=1,2,3)接芯片供电电源地; VDD_x(x=1,2,3)接2.0~3.6V电源,一般接3.3V电源,为芯片的数字电路部分供电。 (2) 特殊功能引脚。STM32F103C8T6单片机有2个特殊功能引脚,分别是第7引脚NRST和第44引脚BOOT0,如表3.2中深色阴影部分引脚所示。其中,NRST是芯片复位引脚,低电平有效(该引脚为低电平时将使芯片复位); BOOT0是芯片启动模型功能选择引脚,复位时,该引脚与BOOT1功能引脚(第20引脚)共同决定系统的启动模式。有关系统启动模式说明见2.1.3节。 (3) 输入/输出(I/O)端口引脚。剩余37个引脚为STM32F103C8T6的I/O端口引脚,其默认主功能可以分为时钟功能引脚、编程功能引脚和通用输入输出(GPIO)引脚。时钟功能引脚为第5(OSC_IN)和第6(OSC_OUT)引脚,用于外接有源时钟或时钟晶振。编程功能引脚为第34、37、38、39、40引脚,支持标准JTAG编程或SWD串行编程。 3.1.3STM32F103C8T6片内资源 STM32F103C8T6单片机内部集成了多个片上功能单元,为实时控制应用设计提供了灵活性。片上集成的内部资源如下所述。 (1) 内嵌8MHz高速RC振荡器、40kHz低速RC振荡器,可为芯片提供高速时钟(为芯片提供系统时钟)、低速时钟(为实时时钟RTC、独立看门狗IWDG提供时钟)。 (2) 内嵌4~16MHz晶体振荡器,可外接4~16MHz无源晶振,为芯片提供外部高速系统时钟。 (3) 内嵌32kHz RTC振荡器,可外接32.768kHz无源晶振,为芯片实时时钟RTC单元提供时钟。 (4) 集成了PLL时钟倍频单元,可对低速时钟进行倍频,产生所需的高速系统时钟。 (5) 集成了上电/断电复位(POR/PDR)功能单元,可以对供电进行监测复位。 (6) 集成了7个定时器: 1个16位带死区控制及紧急刹车的高级定时器,3个16位的通用定时器,1个24位自减型系统嘀嗒定时器,2个看门狗定时器(独立门狗和窗口门狗)。 (7) 集成了2个12位模数转换器,最快1μs转换时间,多达16个模拟输入通道。 (8) 集成了片上温度传感器和实时时钟RTC。 (9) 集成了9个外部通信接口: 3个USART、 2个I2C、2个SPI(18Mb/s)、1个CAN(2.0B)、1个USB 2.0全速接口。 (10) 集成了循环冗余校验(CRC)计算单元,可进行硬件CRC计算。 (11) 集成了嵌套中断向量控制器NVIC,支持16级中断优先级、60个中断和10个异常处理。 (12) 集成了7通道DMA控制器,支持定时器、ADC、I2C、SPI和USART进行DMA。 (13) 具有37个高速通用输入/输出(GPIO)端口,可从其中任选16个作为外部中断/事件输入端口,几乎全部GPIO可兼容5V输入。 (14) 具有睡眠、停止、待机3种低功耗工作模式。 (15) 具有串行单线调试SWD接口和标准JTAG接口。 (16) 具有96位全球唯一编号。 3.2STM32单片机最小系统构成 单片机最小系统就是让单片机能正常运行并发挥其功能所必需的硬件组成部分,也可理解为单片机正常运行的最小环境。STM32单片机应用系统一般由硬件和软件两部分构成,硬件是实现的基础,软件是在硬件基础上对资源进行合理调用,从而完成应用系统所要求的任务。STM32单片机硬件一般由功能应用电路和最小系统电路构成。功能应用电路是实现具体应用所需的功能电路,与具体应用相关。不同应用涉及的功能应用电路也存在差异,一般涉及输入/输出控制电路、信号采集电路、存储电路、人机接口电路、显示电路等。最小系统电路是STM32单片机正常运行的必要电路,是STM32单片机应用系统硬件的核心部分,包括电源电路、复位电路、时钟电路、启动模式设置电路和编程接口电路。最小系统电路在任意应用系统硬件电路中都存在,本节以STM32F103C8T6单片机为例,对其最小系统电路构成进行详细的讲解。 3.2.1电源电路 电源对电子设备的重要性不言而喻,它是保证系统稳定运行的基础,而保证系统能稳定运行后,又有低功耗的要求。在很多应用场合都对电子设备的功耗有非常苛刻的要求,STM32单片机有专门的电源管理单元监控内部电源并管理片上外设的运行,确保系统正常运行,并尽量降低功耗。为了方便进行电源管理,STM32单片机根据功能将内部电源区域划分为数字、模拟、后备域、内核等供电区域,其内部电源结构框图如图3.3所示。 图3.3STM32单片机内部电源结构 在图3.3中,VBAT是后备域供电引脚,为32kHz外部低速时钟振荡器LSE、实时时钟RTC和后备寄存器供电。VDD和VSS是数字部分供电引脚。VDDA和VSSA是模拟部分供电引脚,且必须分别连接到VDD和VSS; VREF+和VREF-是A/D转换器(AnalogtoDigital Converter,ADC)外部参考电压供电引脚,为其提供精确参考电压。如果芯片提供引脚VREF-(根据封装而定),那么它必须连接到VSSA引脚。 注意: 100引脚和144引脚封装的MCU提供引脚VREF+和VREF-,64引脚或更少引脚封装的MCU未提供引脚VREF+和VREF-,在芯片内部与ADC的电源引脚VDDA和地引脚VSSA相连。 STM32单片机的工作电压VDD为2.0~3.6V,通过内置的电压调节器提供内核所需的1.8V电源。当主电源VDD掉电后,通过VBAT为32kHz外部低速时钟振荡器LSE、实时时钟RTC和后备寄存器提供电源。为了提高ADC转换的精确度,ADC使用独立电源VDDA供电,过滤和屏蔽来自印制电路板上的毛刺干扰。STM32单片机的供电方案如图3.4所示,其中的4.7μF电容必须连接到VDD3。VREF+引脚电压范围为2.4V~VDDA,可以直接连接到VDDA引脚。如果VREF+采用单独的外部参考电源供电,则必须在VREF+引脚上连接一个10nF和一个1μF的电容。 图3.4STM32单片机供电方案 STM32F103系列单片机的工作电压为2.0~3.6V,一般采用3.3V供电。由于常用电源为5V,必须采用转换电路将5V电压转换为2.0~3.6V。电源转换芯片ASM11173.3是一款正电压输出的低压降三端线性稳压电路,输入5V电压,输出固定的3.3V电压,其电路如图3.5所示。转换得到的3.3V电源直接与STM32单片机的VDD引脚连接,为MCU提供工作电源。3.3V和VSS分别经电感L1、L2滤波后得到VDDA和VSSA,分别连接到单片机的VDDA和VSSA引脚,为模拟单元供电。 图3.55V转3.3V电路 VBAT是后备域供电引脚,为LSE、RTC和后备寄存器供电,备用电源供电电路如图3.6所示。一般选择纽扣电池作为备用电池,其电压低于主电源3.3V。当主电源VDD掉电后,外部备用电池BAT1通过D1为VBAT引脚供电; 当主电源VDD未掉电时,主电源3.3V经D2为VBAT引脚供电,节省备用电池BAT1的电源。若系统无备用电池,则VBAT引脚必须和100nF的瓷片电容一起连接到主电源VDD上。 图3.6VBAT备用电源供电电路 3.2.2复位电路 当单片机在正常运行中,由于外界干扰等因素可能会使单片机程序陷入死循环状态或“跑飞”。要使其进入正常状态,唯一的办法是将单片机复位,以重新启动。复位就是把单片机当前的运行状态恢复到起始状态的操作,其作用是复位单片机的程序计数器PC,使单片机从代码存储器的0x00000000单元重新开始执行程序,并将相关寄存器复位到默认初始值。STM32单片机的程序计数器初始值为00000004H,00000000H留给主堆栈指针MSP。STM32单片机支持3种形式的复位,分别是系统复位、电源复位和备份区域复位,其复位电路结构如图3.7所示。 图3.7STM32单片机复位电路结构 1. 系统复位 除了复位和时钟控制(Reset and Clock Control,RCC)的控制状态寄存器RCC_CSR(Control/Status Register,RCC_CSR)的复位标志位和后备域寄存器外,系统复位将复位所有的寄存器。当发生以下任一事件时,都将产生系统复位。 (1) NRST引脚上出现低电平(外部复位); (2) 窗口看门狗计数终止(WWDG复位) ; (3) 独立看门狗计数终止(IWDG复位); (4) 软件复位(SW复位); (5) 低功耗管理复位。 当发生系统复位时,可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。 2. 电源复位 STM32单片机内部集成了一个上电复位(POR)电路和掉电复位(PDR)电路,形成电源复位电路。当工作电源VDD达到2V时,系统就能正常工作; 当工作电源VDD低于指定的阈值VPOR/PDR时,系统保持为复位状态,而无需外部复位电路。电源复位能复位除后备域寄存器以外的所有寄存器,当发生上电/掉电复位(POR/PDR复位)或从待机模式中返回时,将产生电源复位。 图3.7中任意一个复位源发生复位事件时,脉冲发生器输出有效,最终作用于NRST引脚。在复位过程中保持NRST低电平,使复位入口向量被固定在地址0x00000004。芯片内部的复位信号会在NRST引脚上输出,且脉冲发生器保证每一个(外部或内部)复位源都能有至少20μs的脉冲延时; 当NRST引脚被拉低产生外部复位时,它也将产生复位脉冲。 3. 备份区域复位 备份区域拥有两个专门的复位,它们只影响备份区域寄存器。当发生下列事件之一时,产生备份区域复位。 (1) 软件复位: 后备区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST位产生。 (2) 电源复位: 在VDD和VBAT两者均掉电的前提下,VDD或VBAT上电将引发备份区域复位。 图3.8外部复位电路 最简单、最常用的复位电路是在NRST引脚上产生一个低电平信号(外部复位)引发系统复位,它由电容串联电阻构成,如图3.8所示。当按键RESET被按下时,NRST引脚和地相接,从而被拉低,产生一个低电平信号,实现复位。在系统上电瞬间,电容开始充电,由于电容电压不能突变,导致NRST引脚在上电瞬间被拉成低电平,这个低电平持续的时间由复位电路的电阻、电容值决定(t=1.1RC= 1.1×10000Ω×0.0000001F=0.011s=11000μs)。STM32单片机的NRST引脚检测到持续20μs以上的低电平后,会对单片机进行复位操作。所以,适当选择RC的值就可以保证可靠的复位。 3.2.3时钟电路 时钟电路是单片机系统中用于产生并发出原始“嘀嗒”节拍信号的、必不可少的信号源电路,常常被视为单片机系统的心脏。时钟节拍是处理器、存储器、I/O接口等正常工作的必备条件,它的每一次跳动(振荡节拍)都控制着单片机执行代码的工作节奏。振荡得慢时,系统工作速度就慢; 振荡得快时,系统工作速度就快。 为简化STM32单片机系统时钟电路,在单片机内部集成了8MHz高速RC振荡器(HSI RC)、40kHz低速RC振荡器(LSI RC)、4~16MHz晶体振荡器(HSE OSC)和32.768kHz RTC晶体振荡器(LSE OSC),其时钟单元及接口框图如图3.9所示。当利用STM32单片机内部集成的HSI RC、LSI RC(又称为内部时钟)作为单片机内部功能单元的时钟信号源时,HSE OSC和LSE OSC被禁用,外部OSC_OUT、OSC_IN、OSC32_IN和OSC32_OUT引脚可以作为其他功能引脚使用。当使用HSE OSC、LSE OSC(又称为外部时钟)作为单片机内部功能单元的时钟信号源时,HSI RC和LSI RC被禁用,可从OSC_OUT、OSC_IN、OSC32_IN和OSC32_OUT引脚输入外部时钟信号或外接石英晶体产生所需的时钟信号。 图3.9STM32单片机的时钟接口 内部时钟单元HSI RC、LSI RC虽然可以产生时钟信号供单片机内部功能单元使用,但时钟精度不高,仅适用于时钟精度要求不高的应用场合。为了获取稳定、精确的时钟信号,可以使用外部无源石英晶体配合单片机内部的振荡电路(HSE OSC或LSE OSC)来产生时钟信号,也可以从单片机外部直接输入有源时钟信号作为单片机的时钟信号,外部时钟电路框图如图3.10所示。 图3.10外部时钟电路框图 当外接外部时钟源时,必须连到OSC_IN和OSC32_IN引脚,同时保证OSC_OUT和OSC32_OUT引脚悬空,如图3.10(a)所示。负载电容推荐使用高质量的陶瓷电容,其值须根据所选择的振荡器来调整,取值范围为10~40pF,典型值为20pF或30pF。对于晶体振荡器的电容来说,电容值越小越容易起振,但振荡器相对不稳定; 电容值越大振荡器越稳定,但会增加起振时间,不容易起振。为减少时钟输出的失真和缩短启动稳定时间,石英晶体/陶瓷谐振器和负载电容器必须尽可能地靠近振荡器引脚。根据如图3.10所示的外部时钟电路框图,外部时钟电路原理图如图3.11所示。 图3.11外部时钟电路 内嵌的HSI RC或HSE OSC可为单片机提供高速时钟,为MCU的系统时钟SYSCLK提供时钟。内嵌的LSI RC或LSE OSC可单片机提供低速时钟,为MCU的实时时钟RTC、独立看门狗IWGD提供时钟。当不使用LSI RC或LSE OSC时,可以禁用,OSC32_IN和OSC32_OUT引脚可以作为其他功能引脚使用。 3.2.4启动模式设置电路 STM32单片机启动时需要根据BOOT0和BOOT1引脚的状态来确定系统的启动模式,启动模式设置详见2.1.4节启动模式的详细描述, 图3.12启动模式设置电路 此处不再赘述。为方便根据需要调整STM32单片机的启动模式,设计的模式设置电路如图3.12所示。 若需要从Flash存储区启动,需要设置BOOT1=X,BOOT0=0,因此可以用跳线帽同时短接BOOT接口的35和46; 若需要从系统存储区启动(ISP串口下载程序时),需要设置BOOT1=0,BOOT0=1,因此可以用跳线帽同时短接BOOT接口的35和42; 若需要从内部SRAM存储区启动,需要设置BOOT1=1,BOOT0=1,因此可以用跳线帽同时短接BOOT接口的31和42。STM32单片机一般工作在闪存存储区启动模式,上电启动时运行Flash存储区中保存的用户程序。 3.2.5编程接口电路 1. JTAG/SWD编程接口 STM32单片机支持标准JTAG协议编程和串行调试SWD(Serial Wire Debug)编程,STM32F103C8T6芯片的编程引脚如表3.3所示。PA13和PA14引脚既作为JTAG编程引脚,又作为SWD编程引脚。 表3.3JTAG /SWD编程引脚 引脚(LQFP48)引脚名称类型I/O电平主功能(复位后) 34PA13I/OFTJTMS/SWDIO 37PA14I/OFTJTCK/SWCLK 38PA15I/OFTJTDI 39PB3I/OFTJTDO 40PB4I/OFTNJTRST STM32单片机上电复位时,引脚PA13、PA14、PA15、PB3、PB4默认作为JTAG/SWD编程功能引脚。JTAG编程时需要JTMS、JTCK、JTDI、JTDO和NJTRST 5个信号引脚,SWD编程时仅需要SWDIO和SWCLK两个信号引脚。在Flash存储器启动模型下,可以通过JLink、ULink、STLink、CMSISDAP等仿真器将用户程序代码编程到单片机的Flash存储器中,也可以通过仿真器对程序进行单步调试。标准JTAG编程接口和SWD编程接口电路图如图3.13所示。在实际应用时,JTAG和SWD编程接口选择其中一种即可。一般选择SWD编程接口,以节约引脚和减小接口面积。 图3.13JTAG/SWD编程接口 2. ISP编程接口 STM32单片机内嵌ISP Bootloader自举程序存放在系统存储区,由ST公司在生产线上写入,用于通过串行通信接口对Flash存储器进行重新编程。对于小容量、中容量和大容量STM32单片机而言,可以通过USART1串行通信接口启用自举程序进行编程; 对于互联型STM32单片机而言,可以通过USART1 、USART2(重映射的)、CAN2(重映射的)或USB OTG全速接口的设备模式(通过设备固件更新DFU协议)启用自举程序进行编程。 使用内嵌的ISP Bootloader自举程序进行Flash存储器重新编程时,STM32单片机需要工作在系统存储器启动模式,随后通过USART1进行编程。编程成功后若需要让单片机运行Flash存储器中的用户程序,则需要将启动模式重新设置为Flash存储器启动模式,这样上电启动时才能运行Flash存储器中保存的用户程序。另外,新型台式计算机或笔记本电脑很少有串行通信接口,但有USB通信接口,因此可以利用USB转UART接口芯片CH340G设计ISP编程接口电路。鉴于反复设置启动模式会给USART1串行ISP编程带来不便,可以将启动模式固定设置成Flash存储器模式,再利用CH340G芯片的#RST和#DTR引脚在ISP编程时自动设置启动模式,设计的一键ISP编程电路原理图如图3.14所示。 图3.14一键ISP编程电路图