程序项目代做,有需求私信(vue、React、Java、爬虫、电路板设计、嵌入式linux等)

STM32F103简介

自从大学毕业之后,已经很久没有接触STM32控制器了,最近打算学习一下LVGL,控制芯片计划使用STM32F103RTC6,因此这里我们会简单介绍有关STM32F103RTC6的知识。

一、STM32F103RTC6介绍

1.1 命名规则

我从网上买了一块STM32F103RTC6开发板,STM32F103RCT6 各个字段的含义:

  • STM32(芯片系列):STM32代表ARM Cortex-M内核的32位微控制器;
  • 103(芯片子系列):101基本型,102USB基本型(USB2.0),103代表增强型系列,105107互联型;
  • F(产品类型):F代表通用系列 ;
  • R(引脚数量):T=36, C=48, R=64, V=100 ,Z =144
  • C(闪存容量):4=16K6=32K8=64KB=128KC=256KD=384KE=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个引脚;

由于引脚比较多,我们不可能一一介绍,这里我们仅仅介绍比较重要的引脚;

  • 电源引脚,包括:
    • VDD1319324864):供电电源引脚,D=device表示器件的意思,即器件内部的工作电压,通常连接到3.3V电源;
    • VSS1218314763):接地引脚,S=series表示公共连接的意思,通常指电路公共接地端电压;
    • VBAT1):RTC的电池供电引脚,当使用电池或其他电源连接到VBAT脚上时,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池,VBAT引脚应接到VDD引脚上;
  • 复位与时钟引脚,包括:
    • NRST7):复位引脚,外部低电平触发复位。若外部复位被激活,MCU会重新启动;
    • BOOT0/12860):启动引脚,选择MCU启动方式,用于选择从闪存或外部设备启动;
  • RTC引脚:
    • RTC2):RTC实时时钟的输出引脚,可以配置为1Hz信号输出,通常用于提供精确的时间基准;
  • 通信引脚,STM32F103RTC6提供了多种通信接口,其中包括:
    • USART(通用同步异步收发器,424316172930):例如,TX(发送)和RX(接收)引脚;
    • SPI(串行外设接口,212223):例如,MOSI(主输出从输入)、MISO(主输入从输出)等引脚;
    • I2C5253):SCL(时钟线)、SDA(数据线)引脚。
  • GPIO引脚:STM32F103RTC6提供了多个通用输入输出引脚(GPIO),这些引脚可以用于多种不同的外设功能,如数字输入、输出、高低电平控制、外部中断等;
  • 外部中断引脚:EXTI(外部中断)引脚,用于从外部设备(如按钮、传感器等)接收中断信号;
  • 模拟引脚:ADC(模拟数字转换器)引脚,用于接收模拟信号并进行数字化处理。这些引脚通常与外部传感器连接;
  • 调试引脚:SWDIO46)和 SWCLK49):用于调试的串行线(Serial Wire Debug)接口引脚,用于与调试器连接;
  • PWM输出引脚:
    • TIMx:定时器模块的输出引脚,用于生成脉宽调制(PWM)信号,通常用于电机控制、亮度调节等应用。
1.2.2 复位引脚NRST原理图

STM32NRST是异步复位脚。 复位就是让单片机重启,使其恢复到一个缺省的状态。

  • NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KBSRAM。;
  • NRST从低电平变高时,PC指针从0开始。 但是复位的时候不会将STM32F片内RTC的寄存器以及后备存储器重置,因为它们是用电池通过专门的VBAT脚供电。

STM32中的NRST有施密特功能。大概在输入电压低于1.V的时候将芯片复位。

开发板上电的瞬间,电容C4两端电压可以认为是0,刚上电的时候电流会通过R1C4到地,为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时钟源不够精准,我们通常采用外部独立时钟源来来为芯片提供系统时钟。
具体计算方法如下:

\[晶振频率 = 8MHz \]

\[晶振周期 = 1 / 晶振频率 = 0.125us \]

如果需要一个1秒的周期,需要多少个晶振周期?

\[1s / 0.125us = 8000000个周期 \]

因此,如果使用8MHz晶振,系统需要运行8000000个晶振周期才能完成一个1秒的周期。

1.2.3.2 32.768k晶振

低速晶振32.768kHz连接LSElow-speed external clock signal),最终到达RTCreal-time clock)。

RTC是一个独立的定时器 。从real-time clock(实时时钟)四字可以理解,RTC可以为系统实时记录当前系统时间和日期,不管芯片有没有掉电。如果想要使用RTC实时记录系统时间,芯片需要接入额外备用电源,通常为纽扣电池。这样以来,RTC在芯片掉电后,可以由电池供电继续运行。

对于掉电后不需要记录系统时间的电路板,我们将低速晶振32.768kHz舍去,节约板子空间,精简电路设计。 

215次方正好等于32768,反过来讲,如果要把32.768K的时钟频率经过15次分频的话,得到的频率正好是1Hz

1.2.3.3 电容介绍

晶振旁的俩个电容到底有啥作用?

主要作用是平衡晶振引脚的电感的。因为晶振在高频工作时有寄生电感,为了平衡电感起到谐振的作用。所以要用两个小电容来平衡电感。一般电容的选20pf–30pf的就可以了。具体的大小请参看晶振厂家提供的数据手册。

芯片晶振引脚的内部通常是一个反相器,芯片晶振的两个引脚之间还需要连接一个电阻,使反相器在振荡初始时处与线性状态,但这个电阻一般集成在芯片的内部,反相器就好像一个有很大增益的放大器,为了方便起振,晶振连接在芯片晶振引脚的输入和输出之间,等效为一个并联谐振回路, 振荡的频率就是石英晶振的并联谐振频率。

晶振旁边的两个电容需要接地,其实就是电容三点式电路的分压电容,接地点就是分压点,以分压点为参考点,振荡引脚的输入和输出是反相的,但从晶振两端来看,形成一个正反馈来保证电路能够持续振荡。

芯片设计的时候,其实这两个电容就已经形成了,一般是两个的容量相等,但容量比较小,不一定适合很宽的振荡频率范围,所以需要外接两个负载电容。

为了让晶振能够可靠、稳定的起振,我们在布线时,需要让晶振和负载电容尽量的靠近芯片的晶振引脚。

1.3 电源转换电路

我们可以发现电源转换电路是由一个稳压芯片AMS1117-3.3V、两个电解电容(C21C22)组成。实际上C21C22两侧还应该各接一个104的贴片电容;比如这种:

设计原因:STM32芯片的工作电压为2.0~3.6V,我们一般取3.3V;而通过USB接口输出的电源为5V,为防止STM32芯片损坏,需要我们通过该电源转换电路,把5V的输入电压降低到3.3V工作电压。

电容作用:

  • C4C5是输出滤波电容,作用是抑制自激振荡,如果不接这两个电容,通常线性稳压器的输出会是个振荡波形;
  • C6C7是输入电容,对于交流电压整流输入,它们的第一个作用是把单向脉动电压转换成直流电压,在本图中输入已经是+5V直流电源了,它们的作用就是防止断电后出现电压倒置,因此通常输入电容的容量应该大于输出电容。

概括性地说,输出的电容的作用是把输出信号的干扰作为滤除。输入电容的作用就是把输入信号中的高频噪声作为滤除对象,把前级携带的高频杂波滤除。

1.4 调试接口

众所周知,SWDJTAG是单片机下载程序与调试的常用接口。其共同之处:

  • 供电电压范围: 1.2 V - 5.5 V
  • 时钟速率: 可配置高达10 MHz
  • SWO跟踪捕获: 数据速率高达50 Mbit/sUART/NRZ模式);
  • 隔离电压: 1 kV
  • 热插拔:支持;
1.4.1 JTAG

JTAG,全名为Joint Test Action Group(联合测试行动小组)。截至本文最新的标准为IEEE Standard 1149.1-1990。其拓扑图如下:

JTAG 一般使用5个引脚:

  • TDITest Data In):串行输入引脚;
  • TDOTest Data Out):串行输出引脚;
  • TCKTest Clock):时钟引脚,一般附加100k下拉电阻;
  • TMSTest Mode Select):模式选择(控制信号)引脚;
  • TRSTTest Reset):复位引脚;

JTAG的优势:

  • 不限于ARM系列芯片;
  • 具有更多用于编程,调试和生产测试的用途。
1.4.2 SWD

全称为Serial Wire Debug(串行线调试),是ARM专门设计的协议,仅支持ARM(所以在ARM系列单片机中性能表现较佳)。

SWD一般使用 2 个引脚:

  • SWDIOSerial Wire Data Input Output):串行数据输入输出引脚;
  • SWCLKSerial Wire Clock):串行线时钟引脚;

SWD的优势:

  • 使用引脚更少,只需SWDIOSWCLK两个引脚;
  • SWD具有特殊功能,例如打印调试信息;
  • JTAG相比,SWD在速度上具有更好的整体性能;

我们使用的开发板就使用了SWD接口,电路原理图如下:

SWDIO:在芯片内部已经有上拉,但在电路板上必须再一次上拉(100k或者10k电阻);不过我们这个开发板原理图并没有接上拉电阻,如果我们设计原理图,最好接上上拉电阻;

SWCLK,在芯片内部已经有下拉,在电路板上没有特殊要求进一步下拉。

1.4.3 JTAGSWD的兼容性

一般来说,单片机板子上会有以下这些烧录座,可同时兼容JTAGSWD

其中:

  • 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芯片CH340GDTR#RTS#引脚的信号来控制一键下载电路,从而间接控制STM32RESETBOOT0引脚的信号,来达到通过串口一键下载和运行的效果,省去了购买仿真器的费用,下载程序也变得简单方便,一键下载电路如下图所示:

我们需要注意一点:CH340G上电后DTR#RTS#都为高电平,在用MCUISP烧写软件时,我们在软件下方选择DTR的低电平复位,RTS高电平进BootLoaderCH340G 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#设置为高,那么Q1Q2都不导通,此时,STM32重新开始启动后,检测到BOOT0为0,程序开始正常运行,一键下载至此就完成了。

二、程序烧写

2.1 ISP下载

STM32开发板,自带串口一键下载电路,配合上位机可实现一键ISP下载,不需要修改开发板上的BOOT设置。与仿真器相比, ISP只能下载程序,不能在线调试且下载速度慢 。

串口下载软件选用的是MCUISP,通过串口的DTRRTS信号来自动配置BOOT0RESET信号,不需要用户手动切换它们的状态,直接串口软件自动控制,可以方便的下载代码。

2.1.1 配置

我们首先需要安装好CH340驱动,然后将PCSTM32开发板的ISP接口通过USB线连接好,打开MCUISP,点击搜索串口,将自动找到电路板板载串口。

bps中选择波特率为115200(尽量不要设置的太
高),左下角选择:DTR的低电平复位,RTS高电平进BootLoader。再加载烧写文件。

2.1.2 读取器件配置

在烧写程序以前,点击读器件信息将出现如下图所示的信息,说明电路板串口连接成功。

2.1.3 烧录程序

选择要烧录的hex文件,点击开始编程,程序开始烧写,烧写成功后会出现如下图所示信息,表明程序烧写成功。

2.2 SWD下载

首先需要安装Jlink驱动,这里就不过多介绍了。接着我们使用Keil 5打开STM32开发板自带的出厂程序。

2.2.1 设置Jink

点击Settings,选择SW,并配置为5M

配置好相应的Flash Download选项;

2.2.2 下载

JLink的如下引脚与开发板对应引脚连接起来;

  • TCK连接到SWCLK

  • TMS连接到SWDIO

  • VTref连接到3.3V;

  • GND连接到GND

编译工程文件,开始下载:

参考文章

[1] stm32F103RCT6原理图解析

[2] STM32 USART1一键下载电路

posted @ 2024-11-17 12:54  大奥特曼打小怪兽  阅读(20)  评论(0编辑  收藏  举报
如果有任何技术小问题,欢迎大家交流沟通,共同进步