stm32最小系统板
本文最后更新于:2024年2月16日 晚上
我的第一块板子!
MCU芯片介绍
MCU即
微控制单元
(Micro Controller Unit),又称单片机
(Single Chip Microcomputer),是将CPU、存储、外围功能都整合在单一芯片上具有控制功能的芯片级计算机,作为高度集成的微型计算机控制系统,单片机具有系统结构简单、可靠性高、处理功能强、低电压和低功耗、环境适应能力强等特点,已广泛应用于汽车电子、工业控制、仪器仪表、家电等领域。构成MCU的几个重要组件包括:
中央处理器(CPU)
CPU是单片机的大脑。它由算术逻辑单元(ALU)和控制单元(CU)组成。CPU读取、解码和执行指令以执行算术、逻辑和数据传输操作。存储单元
任何计算系统都需要两种类型的存储器:程序存储器
和数据存储器
。- 程序存储器,顾名思义,包含程序,即要由CPU执行的指令。
- 数据存储器需要在执行指令时存储临时数据。
- 通常,
程序存储器是只读存储器(ROM),数据存储器是随机存取存储器(RAM)
。
输入/输出端口
单片机与外部世界的接口由输入/输出端口(I/O端口)提供。- 开关、键盘等输入设备以二进制数据的形式从用户向CPU提供信息。CPU在接收到来自输入设备的数据后,执行适当的指令并通过LED、显示器、打印机等输出设备做出响应。
定时器/计数器
单片机的重要组件之一是定时器和计数器。它们提供时间延迟和计数外部事件的操作。此外,定时器和计数器可以提供函数生成、脉宽调制、时钟控制
等。总线
单片机的另一个重要组件是系统总线。系统总线是一组连接线,将CPU与其他外围设备(如内存、I/O端口和其他支持组件)连接起来。
主控芯片
型号:STM32F103VGT6
引脚说明
温度感应器
温度传感器必须产生随温度线性变化的电压。转换范围在2 V <VDDA ❤️.6 V之间。温度传感器内部连接到ADC1_IN16输入通道,该通道用于将传感器输出电压转换为数字值。
Boot modes
芯片手册的原文如下:
At startup, boot pins are used to select one of three boot options:
- Boot from
user Flash
: you have an option to boot from any of two memory banks.
- By default, boot from Flash memory bank 1 is selected.
- You can choose to boot from Flash memory bank 2 by setting a bit in the option bytes.
- Boot from
system memory
- Boot from
embedded SRAM
The boot loader is located in system memory. It is used to reprogram the Flash memory by
using USART1.
- Boot from
- Boot from
详解:
第一种方式
(boot0 = 0)
:Flash memory启动方式
启动地址:0x08000000 是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序
时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式
。第二种方式
(boot0 = 1;boot1 = 0)
:System memory启动方式
启动地址:0x1FFF0000从系统存储器启动,这种模式启动的程序功能是由厂家设置的。- 一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了
从串口下载程序
,因为在厂家提供的BootLoader 中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。
但是这个下载方式需要以下步骤: - 将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader
- 最后在BootLoader的帮助下,通过串口下载程序到Flash中
- 程序下载完成后,又有需要将BOOT0设置为GND,
手动复位
,这样,STM32才可以从Flash中启动可以看到, 利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。
- 一般来说,这种启动方式用的比较少。系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader, 也就是我们常说的ISP程序, 这是一块ROM,出厂后无法修改。一般来说,我们选用这种启动模式时,是为了
第三种方式(boot0 = 1;boot1 = 1):SRAM启动方式。
启动地址:0x20000000 内置SRAM,既然是SRAM,自然也就没有程序存储
的能力了.- 这个模式一般用于
程序调试
。假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。
- 这个模式一般用于
关于flash死锁的解决办法(Flash memory启动方式)
开发调试过程中,由于某种原因导致内部Flash锁死,无法连接SWD以及JTAG调试,无法读到设备,可以通过修改BOOT模式重新刷写代码。修改为BOOT0=1,BOOT1=0
即可从系统存储器启动,ST出厂时自带Bootloader程序,SWD以及JTAG调试接口都是专用的。重新烧写程序后,将BOOT模式重新更换到BOOT0=0,BOOT1=X
即可正常使用。
在芯片中,Boot1的引脚就是BOOT0,Boot1的引脚是PB2。
我采用了第一种Flash memory启动方式,需要将boot0和>boot1默认为低电平,摁下boot0的按键,boot0变为高电平。
Power supply schemes
芯片手册的原文:
- VDD = 2.0 to 3.6 V: external power supply for I/Os and the internal regulator.
Provided externally through VDD pins.- VSSA, VDDA = 2.0 to 3.6 V: external analog power supplies for ADC, DAC, Reset blocks,
RCs and PLL (minimum voltage to be applied to VDDA is 2.4 V when the ADC or DAC
is used). VDDA and VSSA must be connected to VDD and VSS, respectively.- VBAT = 1.8 to 3.6 V: power supply for RTC, external clock 32 kHz oscillator and backup
registers (through power switch) when VDD is not present.
从官方的电路图可知:
每个VDD各接一个100nF陶瓷电容,其中VDD3需要再接一个4.7uF的钽电容;
VDDA:接10nF陶瓷电容+1uF钽电容;
VREF+:可接VDDA,也可接外部参考源,此时也需要接10nF陶瓷电容+1uF钽电容;
在这里,我选择了最常用的3.3V。
电源设计
我们用电池给PCB板供电,电池电压可能是3.7V、7.4V或者是12V的。然而,板上的元器件需要的供电电压,可能与外部电源电压不符。比如,单片机往往需要3.3V供电,一些超声波传感器需要5V供电,有些电机还需要12V供电。这样就要求我们,通过设计升压、降压或者升降压电路
,变换外部电源输入
从而满足所有元器件的要求。这也就是这里所说的——电源设计。
- 我们常使用线性稳压器(LDO)来完成电压的转换。这里使用的型号为me6206a33,3.3V固定输出,Iout=300mA,Vin=6V(Max)。
参考该元件的说明书,可以知道LDO的电路连接方式:
- 参考芯片手册中关于电源的说明:
Power supply schemes
- VDD = 2.0 to 3.6 V:
external power supply for I/Os and the internal regulator.
Provided externally through VDD pins. - VSSA, VDDA = 2.0 to 3.6 V:
external analog power supplies for ADC, DAC, Reset blocks,
RCs and PLL (minimum voltage to be applied to VDDA is 2.4 V when the ADC or DAC
is used).
VDDA and VSSA must be connected to VDD and VSS, respectively. - VBAT = 1.8 to 3.6 V: power supply for RTC, external clock 32 kHz oscillator and backup
registers (through power switch) when VDD is not present.
- VDD = 2.0 to 3.6 V:
再结合官方给出的电源设计图,可知VDD为正,VSS为负,直接接在滤波电容上。
STM32的工作电压(VDD )为2.0~3.6V,通过内置的电压调节器提供所需的1.8V电源,当主电源VDD 掉电后,通过VBAT 脚为实时时钟(RTC)和备份寄存器提供电源。
VCC | 电路的供电正电压 | VDDD | 芯片的工作数字正电压 |
---|---|---|---|
GND | 电路的供电负电压 | VSSD | 芯片的工作数字正电压 |
VDD | 芯片的工作正电压 | VREF+ | ADC基准参考正电压 |
VSS | 芯片的工作负电压 | VREF- | ADC基准参考负电压 |
VDDA | 芯片的工作模拟正电压 | VBAT | 电池或其他电源供电 |
VSSA | 芯片的工作模拟负电压 | VEE | 负电压供电 |
RTC电源管脚
为VBAT, 电源范围为1.8~3.6V,主要用于RTC时钟的供电, RTC在大部分场合用于保存一些重要的参数,比如在电脑主板上用于保存boss的信息, 如果这个电源丢了将导致无法重启,在单片机中低功耗设备常常也会使用这个RTC进行定时的唤醒功能,在普通的MCU中常用于做实时时钟。VDD
为数字电源,电源范围也是1.8~3.6V,在芯片内部集成了电压转化器,一般芯片内核供电为1.2V,图示的Regulator为转换器,将VDD电源稳压至1.2V。数据手册建议加入11个100nF和4.7uF的电容,不过实际应用中,只需要每个VDD加入一个100nF的去耦电容。ADC和DAC
:模拟电源部分,V_DDA的电源用于芯片模拟器件,PLL锁相环等供电,还用于ADC和DAC模数数模转化器供电,图示的VREF为ADC和DAC的参考电压,在一些常用的设计中,可将这个参考电源直接与VREF相连接,但是在一些微弱信号的模拟电路中,建议接一个电压基准芯片
,以确保参考电压的稳定
。- 数据手册建议VDDA加入一个10nF和1uF的电容, 在这我们使用
10uF+100nF
的电容,而VREF也是建议使用10nF+1uF,我们还是采用10uF+100nF。 ADC(模数转换器)
STM32F103系列嵌入了三个12位模数转换器,ADC可由DMA控制器提供服务,模拟看门狗功能可以精确地监视所有选定通道的转换电压
,当转换后的电压超过设定的阈值后,将产生中断。DAC(数模转换器)
STM32F103系列提供二个12位缓冲DAC通道,可用于将两个数字信号转换为两个模拟电压信号输出,设计结构有集成电阻串和反向配置的放大器组成。
- 数据手册建议VDDA加入一个10nF和1uF的电容, 在这我们使用
独立的A/D转换器供电和参考电压
为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰,ADC的电源引脚为VDDA,独立的电源地VSSA,如果有VREF- 引脚(根据封装而定),它必须连接到VSSA,确保共地。
电池备份区域
使用电池或其他电源连接到VBAT 脚上,当VDD 断电时,可以保存备份寄存器的内容和维持RTC的功能。
复位电路
- 芯片中复位电路的引脚为
NRST
,查看芯片手册中的“NRST pin characteristics
”,原文说明:The NRST pin input driver uses CMOS technology. It is connected to a permanent pull-up
resistor, RPU (see Table 49).
Unless otherwise specified, the parameters given in Table 52 are derived from tests
performed under ambient temperature and VDD supply voltage conditions summarized in
Table 10
可知,默认该引脚上拉,摁下复位按键的时候,连接低电平。
一般来说,我们接GND和VCC,都能满足NRST的输入电位要求。
- 在复位电路的设计中,添加了一个电容,作用为
按键消抖
:
由于电容两端电压不能突变,使得按键两端的电压平缓变化,直至电容充放电到达一定电压阈值时,单片机才读取到电平变化。
单片机按键消抖及原理(硬件和软件方法详解)
时钟电路(外部晶振)
stm32主控芯片的内部是有两个时钟的,分别是内部高速和内部低速,但是一般不会特别精准,所以需要外接时钟电路。
外接时钟电路,一般高速晶振的频率是8 MHZ,通过倍频器可以达到72 MHZ。低速晶振的频率是32.768KHZ。
- 36.768KHZ是2的15次方,是可以分频到最小单位HZ的。
- 芯片手册提供了高速外部晶振的典型电路:
For CL1 and CL2, it is recommended to use high-quality external ceramic capacitors in the
5 pF to 25 pF
range (typ.), designed for high-frequency applications, and selected to match
the requirements of the crystal or resonator (see Figure 20). CL1 and CL2 are usually the
same size. The crystal manufacturer typically specifies a load capacitance which is the
series combination of CL1 and CL2. PCB and MCU pin capacitance must be included (10 pF can be used as a rough estimate of the combined pin and board capacitance
) when sizing
CL1 and CL2.
官方给出了两个电容的大小范围,只要在5 pF to 25 pF
range (typ.)之间应该不会有什么问题,更严谨一点,可以参考官方给的计算公式:
Note: For CL1 and CL2, it is recommended to use high-quality ceramic capacitors in the 5 pF to 15 pF range selected to match the requirements of the crystal or resonator (see Figure 21).
CL1 and CL2, are usually the same size
. The crystal manufacturer typically specifies a load
capacitance which is the series combination of CL1 and CL2.
Load capacitance CL has the following formula:
CL = CL1 x CL2 / (CL1 + CL2) + Cstray
where
Cstray is the pin capacitance and board or trace PCB-related capacitance. Typically, it is
between 2 pF and 7 pF.
Caution: To avoid exceeding the maximum value of CL1 and CL2 (15 pF) it is strongly recommended to use a resonator with a load capacitance CL ≤ 7 pF. Never use a resonator with a load capacitance of 12.5 pF.
警告: 为了避免超过 CL1和 CL2(15pF)的最大值,强烈建议使用使用负载电容 CL ≤7pF 的谐振器。永远不要使用负载的谐振器电容为12.5 pF。
Example: if you choose a resonator with a load capacitance of CL = 6 pF, and Cstray = 2 pF,
then CL1 = CL2 = 8 pF如果你选择一个谐振器,其负载电容为 CL = 6pF,而 Cstray = 2pF,
那么 CL1 = CL2 = 8pF.
图中的20pF是CL,也就是负载电容的值,高速晶振的Cstray,官方给的估计值为10pF,带入公式计算CL1和CL2,可求出二者电容均为20pF。
同理,可以绘制外部低速晶振电路。
- 主控芯片给了两组外部时钟电路的引脚,其中:
OSC_IN
和OSC_OUT
分别为外部高速时钟的引脚OSC32_IN
和OSC32_OUT
分别为外部低速时钟的引脚
串口转USB
CH340
- CH340 是一个 USB 总线的转接芯片,实现 USB 转串口或者 USB 转打印口。
在串口方式下,CH340 提供常用的 MODEM 联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到 USB 总线。 - 我选择的是SOP-8 封装,标准的 8 脚贴片,型号为CH340N。
- 两个芯片的串口接线就是RX和TX反着对应,发对收。
USB接口
- USB接口的版本:
Type C
- Type C是一组对称的连接器,在使用的过程中不需要如同使用 USBA,MinUSB,MicroUSB 那样来辨别接口方向。
特点:
- ①可盲插、无方向性
- ②PD最大支持功率100W(20V/5A)
- ③单组最高速率支持10Gbps。
- ④能够给不同电压的设备充电。
从上图的 Type C 公头和母口的引脚排列可以知道 Type C 的引脚功能是上下对称的,所以公头无论以什么方向接入母口两者的功能引脚都可以完美对接。
- 具体引脚,及其详细描述查看如下表格:
Pin | 名称 | 功能描述 | Pin | 名称 | 功能描述 |
---|---|---|---|---|---|
A1 | GND | 接地 | B12 | GND | 接地 |
A2 | SSTXp1 | SuperSpeed 差分信号#1 ,TX,正 |
B11 | SSRXp1 | SuperSpeed 差分信号#1 ,RX,正 |
A3 | SSTXn1 | SuperSpeed 差分信号#1 ,TX,负 |
B10 | SSRXn1 | SuperSpeed 差分信号#1 ,RX,负 |
A4 | VBUS | 总线电源 | B9 | VBUS | 总线电源 |
A5 | CC1 | Configuration channel | B8 | SBU2 | Sideband use (SBU) |
A6 | Dp1 | USB 2.0 差分信号,position 1,正 | B7 | Dn2 | USB 2.0 差分信号,position 2,负 |
A7 | Dn1 | USB 2.0 差分信号,position 1,负 | B6 | Dp2 | USB 2.0 差分信号,position 2,正 |
A8 | SBU1 | Sideband use (SBU) | B5 | CC2 | Configuration channel |
A9 | VBUS | 总线电源 | B4 | VBUS | 总线电源 |
A10 | SSRXn2 | SuperSpeed 差分信号#2 ,RX,负 |
B3 | SSTXn2 | SuperSpeed 差分信号#2 ,TX,负 |
A11 | SSRXp2 | SuperSpeed 差分信号#2 ,RX,正 |
B2 | SSTXp2 | SuperSpeed 差分信号#2 ,TX,正 |
A12 | GND | 接地 | B1 | GND | 接地 |
- 有24根信号,其中电源和地占了9根,有4个地和4个Vbus,用于提升电流传输能力。
- A6、A7:用于传输USB2.0的两组信号是交叉连接的,所以会使得插头以任意方向插入时数据都是连通的。
- A2、A3,A10、A11:有两组(8根)高速数据通路,用于传输数据
- CC1、CC2:用于传输方向确认和正反插确认,以及USB PD BCM码信号传输功能,实现负载的功能配置,当其中一根作为TypeC接口的配置信号时,另一根则变成供电电源。(SUB1\SUB2作为辅助信号,在一些特殊模式下使用)。
- 我在选择type-c接口的时候,选择了16脚的,因为6脚的只能充电。
16Pin Type C
在 24Pin 全功能版本的基础上移除了 USB3.0 的 TX1/2、RX1/2 引脚,保留了 SBU1/2、CC1/2、USB2.0 的 D+ 和 D- 引脚,除了不支持 USB3.0/3.1 高速传输外,其他没有任何的差别,同样可以支持 PD 快充、音频传输、HDMI 传输、调试模式等其他功能。16 Pin Type C
实际上仅有12 Pin,这是因为 16 Pin 接口在设计时将 Type C 母口两端的两个Vbus 和 GND
引脚两两相互靠近,注意仅仅是相互靠近并不是共用引脚所以接口实际还是存在 16 Pin,但对于其封装只要 12 Pin
,其中相互靠近的引脚共用一个封装引脚
,具体可以看下图的实物图。
对于仅需支持充电,那么 USB2.0 D+ 和 D- 引脚也可移除进一步节约接口制造成本。
6Pin Type C
仅保留Vbus、GND、CC1、CC2 引脚。接口两侧同样对称分布 Vbus 和 GND ,CC1,CC2 引脚用于支持正反接入,以及快充协议的支持
DFP、UFP、DRP用途解析
- ①DFP:下行端口,可以理解为一个Host,DFP作为source给VBUS和vcon供电的,简单理解为一个提供电源的设备,如:电源适配器。
- ②UFP:上行端口,可以理解为Device,UFP可以理解为受电端口,DFP为供电端口,UFP从VBUS中取电,并可提供数据。典型设备如:U盘、移动硬盘。
- ③DRP:双角色端口,DRP既可以做DFP又可以做UFP,也可以在DFP和UFP间动态切换,典型设备是:笔记本电脑。
Type C 接口 CC1/2 作用
PD 快充协议对电源设备的识别通过 CC1 和 CC2 引脚来进行,避免 QC 协议中 对 DP 和 DM 引脚的占用。使得 PD 协议快充在充电的同时,数据传输也可以稳定进行。
CC:配置通道
,作用是检测USB连接,检测正反插,USB设备间数据与VBUS的连接建立与管理。
- 探测连接,区分正反面,区分DFP和UFP的主从关系。
- 配置Vbus,有USB TypeC和USB Power Delivery两种模式。
- 配置Vconn,当线缆里有Emark芯片的时候,一路CC通道传输CC信号,另一路CC通道变成Vconn,给EMark芯片供电。
- 如果CC通道连接其他配置,如连接音频配件、DP、PCIE时,CC通道配置是不同的。
上图分析:
- 在DFP的CC pin有
上拉电阻Rp
,在UFP有下拉电阻Rd
。 - 在未连接时,DFP的VBUS是无输出的,连接后CC pin相连,DFP的CC pin会检测到UFP的下拉电阻Rd,说明连接上了,DFP就打开Vbus电源开关,输出电源给UFP。而哪个CC pin(CC1、CC2)检测到下拉电阻就确定接口插入的方向,顺便切换RX\TX。
- 电阻Rd=5.1k,电阻Rp为不确定的值,USB TypeC有几种
供电模式,靠Rp
的值来甄别,Rp的值不一样,CC pin检测的电源就不一样,然后来控制DFP端执行哪种供电模式。
SWIO和SWCLK引脚
- SWIO和SWCLK分别是JTAG接口中用于
数据引脚
和时钟引脚
的信号线。在STM32F103C8T6芯片中,它们通常用于调试和测试,以便开发人员可以检查芯片中各种模块的状态和执行跟踪。它们也可用于编程和其他与芯片的内部工作有关的操作。 - PA13的引脚就是SWIO的引脚。
PCB布局和飞线
布局
- 外部晶振的滤波电容要靠近外部晶振,外部晶振要靠近主控芯片
- 参考入门笔记里面的布局和飞线原则
- 3D视图可以查看成品效果
第一次画板子存在的问题和后续优化的安排
存在的问题
- 滤波电容要靠近电流流入的io口
- 排针的顺序分布要按着芯片引脚的实际顺序来,不要按着顺序从A0直接到A15,布线太痛苦了,而且很丑很不优雅
- 晶振越接近芯片引脚越好
- 晶振和电源模块还可以选择更小的封装
- type-c的四个固定脚要焊上,不然容易掉
- 电流线20mils以上,信号线10mils也ok
后续优化
- 开学后,重新做一下stm32的最小系统板
- 逐步摸索stm32的其他模块,扩大板子的功能
- 同时跟上学电控,了解板子的使用,以及学会使用成品板
- 学一下有刷电机和无刷电机,画驱动四轮正反转的板子
- 学一下通信部分怎么画