STM32F103简介
自从大学毕业之后,已经很久没有接触STM32控制器了,最近打算学习一下LVGL,控制芯片计划使用STM32F103RTC6,因此这里我们会简单介绍有关STM32F103RTC6的知识。
一、STM32F103RTC6介绍
1.1 命名规则
我从网上买了一块STM32F103RTC6开发板,STM32F103RCT6 各个字段的含义:
STM32(芯片系列):STM32代表ARM Cortex-M内核的32位微控制器;103(芯片子系列):101基本型,102USB基本型(USB2.0),103代表增强型系列,105或107互联型;F(产品类型):F代表通用系列 ;R(引脚数量):T=36,C=48,R=64,V=100,Z =144;C(闪存容量):4=16K,6=32K,8=64K,B=128K,C=256K,D=384K,E=512K;T(表封装):H代表BGA封装、T代表LQFP封装 、U代表VFQFPN封装 、Y代表WLCSP64;6(工作温度范围):6代表-40~85℃,7代表-40~105℃;
更多细节可以参考下图:

1.2 原理图
接下来我们看一下这块开发板的完整电路原理图,后续我们会一一介绍各个组成部分;

STM32F103RCT6核心板丝印尺寸图:
1.2.1 MCU部分
MCU采用的STM32F103RTC6,一共64个引脚;
由于引脚比较多,我们不可能一一介绍,这里我们仅仅介绍比较重要的引脚;
- 电源引脚,包括:
VDD(13、19、32、48、64):供电电源引脚,D=device表示器件的意思,即器件内部的工作电压,通常连接到3.3V电源;VSS(12、18、31、47、63):接地引脚,S=series表示公共连接的意思,通常指电路公共接地端电压;VBAT(1):RTC的电池供电引脚,当使用电池或其他电源连接到VBAT脚上时,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池,VBAT引脚应接到VDD引脚上;
- 复位与时钟引脚,包括:
NRST(7):复位引脚,外部低电平触发复位。若外部复位被激活,MCU会重新启动;BOOT0/1(28、60):启动引脚,选择MCU启动方式,用于选择从闪存或外部设备启动;
RTC引脚:RTC(2):RTC实时时钟的输出引脚,可以配置为1Hz信号输出,通常用于提供精确的时间基准;
- 通信引脚,
STM32F103RTC6提供了多种通信接口,其中包括:USART(通用同步异步收发器,42和43、16和17、29和30):例如,TX(发送)和RX(接收)引脚;SPI(串行外设接口,21、22、23):例如,MOSI(主输出从输入)、MISO(主输入从输出)等引脚;I2C(52和53):SCL(时钟线)、SDA(数据线)引脚。
GPIO引脚:STM32F103RTC6提供了多个通用输入输出引脚(GPIO),这些引脚可以用于多种不同的外设功能,如数字输入、输出、高低电平控制、外部中断等;- 外部中断引脚:
EXTI(外部中断)引脚,用于从外部设备(如按钮、传感器等)接收中断信号; - 模拟引脚:
ADC(模拟数字转换器)引脚,用于接收模拟信号并进行数字化处理。这些引脚通常与外部传感器连接; - 调试引脚:
SWDIO(46)和SWCLK(49):用于调试的串行线(Serial Wire Debug)接口引脚,用于与调试器连接; PWM输出引脚:TIMx:定时器模块的输出引脚,用于生成脉宽调制(PWM)信号,通常用于电机控制、亮度调节等应用。
1.2.2 复位引脚NRST原理图

STM32的NRST是异步复位脚。 复位就是让单片机重启,使其恢复到一个缺省的状态。
- 当
NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM。; - 当
NRST从低电平变高时,PC指针从0开始。 但是复位的时候不会将STM32F片内RTC的寄存器以及后备存储器重置,因为它们是用电池通过专门的VBAT脚供电。
STM32中的NRST有施密特功能。大概在输入电压低于1.0V的时候将芯片复位。
开发板上电的瞬间,电容C4两端电压可以认为是0,刚上电的时候电流会通过R1和C4到地,为C4充电,RESET会输出低电平,STM32处于复位状态,VCC3.3通过电阻R1给电容充电,当电容C4的电压升高到0.8V以上,STM32退出复位状态进入运行状态。
1.2.3 晶振引脚原理图

1.2.3.1 8MHz晶振
高速晶振8MHz作为系统时钟的来源,可以由芯片内部的HSI RC时钟源或芯片外部的独立时钟源提供。
在STM32最小系统板上,8M晶振是用于提供系统时钟的外部晶体振荡电路之一。
高速晶振8MHz作为系统时钟的来源,可以由芯片内部的HSI RC时钟源或芯片外部的独立时钟源提供。由于芯片内部的HSI RC时钟源不够精准,我们通常采用外部独立时钟源来为芯片提供系统时钟。
具体计算方法如下:
如果需要一个1秒的周期,需要多少个晶振周期?
因此,如果使用8MHz晶振,系统需要运行8000000个晶振周期才能完成一个1秒的周期。
1.2.3.2 32.768k晶振
低速晶振32.768kHz连接LSE(low-speed external clock signal),最终到达RTC(real-time clock)。
RTC是一个独立的定时器 。从real-time clock(实时时钟)四字可以理解,RTC可以为系统实时记录当前系统时间和日期,不管芯片有没有掉电。如果想要使用RTC实时记录系统时间,芯片需要接入额外备用电源,通常为纽扣电池。这样以来,RTC在芯片掉电后,可以由电池供电继续运行。
对于掉电后不需要记录系统时间的电路板,我们将低速晶振32.768kHz舍去,节约板子空间,精简电路设计。
2的15次方正好等于32768,反过来讲,如果要把32.768K的时钟频率经过15次分频的话,得到的频率正好是1Hz。
1.2.3.3 电容介绍
晶振旁的俩个电容到底有啥作用?
主要作用是平衡晶振引脚的电感的。因为晶振在高频工作时有寄生电感,为了平衡电感起到谐振的作用。所以要用两个小电容来平衡电感。一般电容的选20pf–30pf的就可以了。具体的大小请参看晶振厂家提供的数据手册。
芯片晶振引脚的内部通常是一个反相器,芯片晶振的两个引脚之间还需要连接一个电阻,使反相器在振荡初始时处与线性状态,但这个电阻一般集成在芯片的内部,反相器就好像一个有很大增益的放大器,为了方便起振,晶振连接在芯片晶振引脚的输入和输出之间,等效为一个并联谐振回路, 振荡的频率就是石英晶振的并联谐振频率。
晶振旁边的两个电容需要接地,其实就是电容三点式电路的分压电容,接地点就是分压点,以分压点为参考点,振荡引脚的输入和输出是反相的,但从晶振两端来看,形成一个正反馈来保证电路能够持续振荡。
芯片设计的时候,其实这两个电容就已经形成了,一般是两个的容量相等,但容量比较小,不一定适合很宽的振荡频率范围,所以需要外接两个负载电容。
为了让晶振能够可靠、稳定的起振,我们在布线时,需要让晶振和负载电容尽量的靠近芯片的晶振引脚。
1.3 电源转换电路


我们可以发现电源转换电路是由一个稳压芯片AMS1117-3.3V、两个电解电容(C21、C22)组成。实际上C21和C22两侧还应该各接一个104的贴片电容;比如这种:
设计原因:STM32芯片的工作电压为2.0~3.6V,我们一般取3.3V;而通过USB接口输出的电源为5V,为防止STM32芯片损坏,需要我们通过该电源转换电路,把5V的输入电压降低到3.3V工作电压。
电容作用:
C4和C5是输出滤波电容,作用是抑制自激振荡,如果不接这两个电容,通常线性稳压器的输出会是个振荡波形;C6和C7是输入电容,对于交流电压整流输入,它们的第一个作用是把单向脉动电压转换成直流电压,在本图中输入已经是+5V直流电源了,它们的作用就是防止断电后出现电压倒置,因此通常输入电容的容量应该大于输出电容。
概括性地说,输出的电容的作用是把输出信号的干扰作为滤除。输入电容的作用就是把输入信号中的高频噪声作为滤除对象,把前级携带的高频杂波滤除。
1.4 调试接口
众所周知,SWD和JTAG是单片机下载程序与调试的常用接口。其共同之处:
- 供电电压范围:
1.2 V - 5.5 V; - 时钟速率: 可配置高达
10 MHz; SWO跟踪捕获: 数据速率高达50 Mbit/s(UART/NRZ模式);- 隔离电压:
1 kV; - 热插拔:支持;
1.4.1 JTAG
JTAG,全名为Joint Test Action Group(联合测试行动小组)。截至本文最新的标准为IEEE Standard 1149.1-1990。其拓扑图如下:
JTAG 一般使用5个引脚:
TDI(Test Data In):串行输入引脚;TDO(Test Data Out):串行输出引脚;TCK(Test Clock):时钟引脚,一般附加100k下拉电阻;TMS(Test Mode Select):模式选择(控制信号)引脚;TRST(Test Reset):复位引脚;
JTAG的优势:
- 不限于
ARM系列芯片; - 具有更多用于编程,调试和生产测试的用途。
1.4.2 SWD
全称为Serial Wire Debug(串行线调试),是ARM专门设计的协议,仅支持ARM(所以在ARM系列单片机中性能表现较佳)。
SWD一般使用 2 个引脚:
SWDIO(Serial Wire Data Input Output):串行数据输入输出引脚;SWCLK(Serial Wire Clock):串行线时钟引脚;
SWD的优势:
- 使用引脚更少,只需
SWDIO和SWCLK两个引脚; SWD具有特殊功能,例如打印调试信息;- 与
JTAG相比,SWD在速度上具有更好的整体性能;
我们使用的开发板就使用了SWD接口,电路原理图如下:

SWDIO:在芯片内部已经有上拉,但在电路板上必须再一次上拉(100k或者10k电阻);不过我们这个开发板原理图并没有接上拉电阻,如果我们设计原理图,最好接上上拉电阻;
SWCLK,在芯片内部已经有下拉,在电路板上没有特殊要求进一步下拉。
1.4.3 JTAG与SWD的兼容性
一般来说,单片机板子上会有以下这些烧录座,可同时兼容JTAG与SWD:
其中:
TCK兼容SWCLK;TMS兼容SWDIO;TDO兼容SWO;
选用SWD而非JTAG的理由:
- 电路原理图设计需要足够简单,且可以在没有
JTAG功能的情况下进行测试; PCB在尺寸方面有限制,SWD可以节省空间;MCU已经没有多余的引脚给JTAG用了。
1.5 BOOT0/1

BOOT决定的模式:
| BOOT1 | BOOT0 | 启动方式 | 说明 |
|---|---|---|---|
| X | 0 | 主闪存存储器 | 主闪存存储器被选为启动区域 |
| 0 | 1 | 系统存储器 | 系统存储器被选为启动区域 |
| 1 | 1 | 内置SRAM | 内置SRAM被选为启动区域 |
1.5.1 主闪存存储器
是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。
1.5.2 系统存储器
从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。
系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。
一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:
- 将
BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader; - 最后在
BootLoader的帮助下,通过串口下载程序到Flash中; - 程序下载完成后,又有需要将
BOOT0设置为0,手动复位,这样,STM32才可以从Flash中启动。
1.5.3 内置SRAM
内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。
假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,再将程序下载到Flash中。
1.6 LCD外围电路
开发板支持外接一块I2C通信的OLED的屏幕,比如可以连接与开发板配套的128*128 TFT_LCD液晶屏;

1.7 串口一键下载电路(CH340)
我们想用串口下载代码,就要配置BOOT0为1,BOOT1为0,但是如果想让STM32一复位就运行代码,就要配置BOOT0为0,BOOT1配置为什么都可以,为了解决这个问题,我们可以设计一个电路,通过串口转USB芯片CH340G的DTR#和RTS#引脚的信号来控制一键下载电路,从而间接控制STM32的RESET和BOOT0引脚的信号,来达到通过串口一键下载和运行的效果,省去了购买仿真器的费用,下载程序也变得简单方便,一键下载电路如下图所示:

我们需要注意一点:CH340G上电后DTR#和RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择DTR的低电平复位,RTS高电平进BootLoader,CH340G IC在实际操作时引脚的变化为DTR#拉高,RTS#拉低,即软件设置和实际情况是取非的,相反的。
具体原理如下:
mcuisp控制DTR输出低电平,则DTR#输出高,然后RTS置高,则RTS#输出低,这样Q1导通了,BOOT0被拉高,即实现设置BOOT0为1,同时Q2也会导通,STM32的复位脚被拉低,实现复位;- 然后,延时
100ms后,mcuisp控制DTR为高电平,则DTR#输出低电平,RTS维持高电平,则RTS#继续为低电平,此时STM32的复位引脚,由于Q2不再导通,变为高电平,STM32结束复位,但是BOOT0还是维持为1,从而进入ISP模式,接着mcuisp就可以开始连接STM32,下载代码了,从而实现一键下载。
程序下载完毕后,如果设置了编程后执行,STM32会再次被复位,此时DTR#为高,RTS#为低,STM32复位后,DTR#设置为低,RTS#设置为高,那么Q1和Q2都不导通,此时,STM32重新开始启动后,检测到BOOT0为0,程序开始正常运行,一键下载至此就完成了。
二、程序烧写
2.1 ISP下载
STM32开发板,自带串口一键下载电路,配合上位机可实现一键ISP下载,不需要修改开发板上的BOOT设置。与仿真器相比,ISP只能下载程序,不能在线调试且下载速度慢 。
串口下载软件选用的是MCUISP,通过串口的DTR和RTS信号来自动配置BOOT0和RESET信号,不需要用户手动切换它们的状态,直接串口软件自动控制,可以方便的下载代码。
2.1.1 配置
我们首先需要安装好CH340驱动,然后将PC和STM32开发板的ISP接口通过USB线连接好,打开MCUISP,点击搜索串口,将自动找到电路板板载串口。
在bps中选择波特率为115200(尽量不要设置的太
高),左下角选择:DTR的低电平复位,RTS高电平进BootLoader。再加载烧写文件。
2.1.2 读取器件配置
在烧写程序以前,点击读器件信息将出现如下图所示的信息,说明电路板串口连接成功。
2.1.3 烧录程序
选择要烧录的hex文件,点击开始编程,程序开始烧写,烧写成功后会出现如下图所示信息,表明程序烧写成功。

2.2 SWD下载
首先需要安装Jlink驱动,这里就不过多介绍了。接着我们使用MDK 5打开STM32开发板自带的出厂程序。
注意:有关MDK的安装可以参考《Mini2440 MDK5 开发环境搭建》。
2.2.1 设置Jink
点击魔法棒,选择Jliink对应选项,或者你自己的仿真器;
点击Settings,选择SW,并配置为5M;
注意:右侧必须能找到芯片ID,否则没戏,检测是否给开发板供电了。
配置好相应的Flash Download选项,尤其是选择好Reset and Run;
Flash必须要有,如果没有,则点击Add自行添加。
点击Utilities,设置Use Target Driver for Flash Programing;

想要随着Dubug中的设置使用不同的下载器,需要选择右侧的Use Debug Driver。
2.2.2 下载
PC机器连接上Jlink,可以在设备管理器看到:
将JLink的如下引脚与开发板对应引脚连接起来;
-
TCK连接到SWCLK; -
TMS连接到SWDIO; -
VTref连接到3.3V; -
GND连接到GND。
编译工程文件,开始下载:
参考文章

浙公网安备 33010602011771号