# STM32 简介

STM32 是 ST 公司基于 ARM Cortex-M 内核开发的 32 位微控制器

STM32 常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等

STM32 功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器

# ARM

ARM 既指 ARM 公司,也指 ARM 处理器内核

ARM 公司是全球领先的半导体知识产权(IP)提供商,全世界超过 95% 的智能手机和平板电脑都采用 ARM 架构

ARM 公司设计 ARM 内核,半导体厂商完善内核周边电路并生产芯片

# STM32F103C8T6

# 参数

系列:主流系列 STM32F1

内核:ARM Cortex-M3

主频:72MHz

RAM:20K(SRAM)

ROM:64K(Flash)

供电:2.0~3.6V(标准 3.3V)

封装:LQFP48

# 外设

英文缩写 名称 英文缩写 名称
NVIC 嵌套向量中断控制器 CAN CAN
SysTick 系统滴答定时器 USB USB
RCC 复位和时钟控制 RTC 实时时钟
GPIO 通用 CRC CRC
AFIO 复用 PWR 电源控制
EXTI 外部中断 BKP 备份寄存器
TIM 定时器 IWDG 独立看门狗
ADC 模数转换器 WWDG 窗口看门狗
DMA 直接内存访问 DAC 数模转换器
USART 同步 SDIO SD
I2C I2C FSMC 可变静态存储控制器
SPI SPI USB OTG USB

# 命名规则

# 系统结构

三条总线:ICode 指令总线(加载程序指令)、DCode 数据总线(加载数据,比如常量和调试数据)、System 系统总线。

ICode 与 DCode 总线主要用来连接 flash 闪存(flasH 存储的是编写的程序),SRAM 用于存储程序运行时的变量数据

AHB(先进高性能总线)系统总线用于挂载主要的外设(挂载最基本或者性能比较高的外设,比如复位和时钟控制这些基本的电路,SDIO 也是挂载在 AHB 上的。

中间有两个桥接,接到了 APB1(先进外设总线)和 APB2 两个外设总线上(用来连接一般的外设)。由于 AHB 和 APB 的总线协议、总线速度还有数据传输格式的差异,所以中间需要加两个桥接来完成数据的转换和缓存。AHB 的整体性能比 APB 高一些,APB2 的性能比 APB1 高一些。

APB2 一般和 AHB 同频率都是 72MHz,APB1 一般是 36MHz,所以 APB2 连接的一般是外设中稍微重要的部分(例如 GPIO 端口,还有一些外设的一号选手,比如 USART1、SPI1、TIM1、TIM8(高级定时器)、ADC、EXTI、AFIO),APB1 连接次要一点的外设 2、3、4 号外设,还有 DAC、PWR、BKP 等。实际上基本感知不到两条总线的差异。

DMA 是 CPU 的小秘书,比如一些大量的数据搬运这样简单且重复干的事情,让 CPU 来干会浪费时间。DMA 通过 DMA 总线连接到总线矩阵上,可以拥有和 CPU 一样的总线控制权,用于访问外设小弟,当需要 DMA 搬运数据时,外设就会通过请求线发送 DMA 请求,然后 DMA 就会获的总线控制权,访问并转运数据,整个过程不需要 CPU 的参与,省下了 CPU 的时间来干其他事情。

# 引脚定义

# STM32F103C8T6 引脚定义表

引脚号 引脚名称 类型 I/O 口电平 主功能 默认复用功能 重定义功能 引脚类型
1 VBAT S VBAT 电源相关引脚
2 PC13-TAMPER-RTC I/O PC13 TAMPER-RTC IO 口
3 PC14-OSC32_IN I/O PC14 OSC32_IN IO 口
4 PC15-OSC32_OUT I/O PC15 OSC32_OUT IO 口
5 OSC_IN I OSC_IN 最小系统相关引脚
6 OSC_OUT O OSC_OUT 最小系统相关引脚
7 NRST I/O NRST 最小系统相关引脚
8 VSSA S VSSA 电源相关引脚
9 VDDA S VDDA 电源相关引脚
10 PA0-WKUP I/O PA0 WKUP/USART2_CTS/ADC12_IN0/TIM2_CH1_ETR IO 口
11 PA1 I/O PA1 USART2_RTS/ADC12_IN1/TIM2_CH2 IO 口
12 PA2 I/O PA2 USART2_TX/ADC12_IN2/TIM2_CH3 IO 口
13 PA3 I/O PA3 USART2_RX/ADC12_IN3/TIM2_CH4 IO 口
14 PA4 I/O PA4 SPI1_NSS/USART2_CK/ADC12_IN4 IO 口
15 PA5 I/O PA5 SPI1_SCK/ADC12_IN5 IO 口
16 PA6 I/O PA6 SPI1_MISO/ADC12_IN6/TIM3_CH1 TIM1_BKIN IO 口
17 PA7 I/O PA7 SPI1_MOSI/ADC12_IN7/TIM3_CH2 TIM1_CH1N IO 口
18 PB0 I/O PB0 ADC12_IN8/TIM3_CH3 TIM1_CH2N IO 口
19 PB1 I/O PB1 ADC12_IN9/TIM3_CH4 TIM1_CH3N IO 口
20 PB2 I/O FT PB2/BOOT1 最小系统相关引脚
21 PB10 I/O FT PB10 I2C2_SCL/USART3_TX TIM2_CH3 IO 口
22 PB11 I/O FT PB11 I2C2_SDA/USART3_RX TIM2_CH4 IO 口
23 VSS_1 S VSS_1 电源相关引脚
24 VDD_1 S VDD_1 电源相关引脚
25 PB12 I/O FT PB12 SPI2_NSS/I2C2_SMBAI/USART3_CK/TIM1_BKIN IO 口
26 PB13 I/O FT PB13 SPI2_SCK/USART3_CTS/TIM1_CH1N IO 口
27 PB14 I/O FT PB14 SPI2_MISO/USART3_RTS/TIM1_CH2N IO 口
28 PB15 I/O FT PB15 SPI2_MOSI/TIM1_CH3N IO 口
29 PA8 I/O FT PA8 USART1_CK/TIM1_CH1/MCO IO 口
30 PA9 I/O FT PA9 USART1_TX/TIM1_CH2 IO 口
31 PA10 I/O FT PA10 USART1_RX/TIM1_CH3 IO 口
32 PA11 I/O FT PA11 USART1_CTS/USBDM/CAN_RX/TIM1_CH4 IO 口
33 PA12 I/O FT PA12 USART1_RTS/USBDP/CAN_TX/TIM1_ETR IO 口
34 PA13 I/O FT JTMS/SWDIO PA13 最小系统相关引脚
35 VSS_2 S VSS_2 电源相关引脚
36 VDD_2 S VDD_2 电源相关引脚
37 PA14 I/O FT JTCK/SWCLK PA14 最小系统相关引脚
38 PA15 I/O FT JTDI TIM2_CH1_ETR/PA15/SPI1_NSS IO 口
39 PB3 I/O FT JTDO PB3/TRACESWO/TIM2_CH2/SPI1_SCK IO 口
40 PB4 I/O FT NJTRST PB4/TIM3_CH1/SPI1_MISO IO 口
41 PB5 I/O PB5 I2C1_SMBAI TIM3_CH2/SPI1_MOSI IO 口
42 PB6 I/O FT PB6 I2C1_SCL/TIM4_CH1 USART1_TX IO 口
43 PB7 I/O FT PB7 I2C1_SDA/TIM4_CH2 USART1_RX IO 口
44 BOOT0 I BOOT0 最小系统相关引脚
45 PB8 I/O FT PB8 TIM4_CH3 I2C1_SCL/CAN_RX IO 口
46 PB9 I/O FT PB9 TIM4_CH4 I2C1_SDA/CAN_TX IO 口
47 VSS_3 S VSS_3 电源相关引脚
48 VDD_3 S VDD_3 电源相关引脚

拿到一个芯片时,需要着重的看一下它的引脚定义

让 STM32 正常工作,首先将电源部分和最小系统部分的电路连接好。

S 代表电源、I 代表输入、O 代表输出,IO 代表输入输出。

IO 口电平代表 IO 口所能容忍的电压,FT 代表容忍 5V 的电压,没有 FT 的智能容忍 3.3V 电压(如果没有 FT,需要接 5V 的电平,需要加装电平转换电路)。

主功能就是上电后默认的功能,一般和引脚名称相同。如果不同的话引脚的实际功能是主功能而不是引脚名称的功能。

默认复用功能是 IO 口上同时连接的外设功能引脚,配置 IO 口时可以选择是通用 IO 口还是复用功能。

重定义功能作用是如果有两个功能同时复用在了一个 IO 口上,而且确实需要用到这两个功能,可以将其中一个复用功能重映射到其他端口上(前提是,这个重定义功能的表里有对应的端口)。

优先使用加粗的 IO 口,没有加粗的 IO 口可能需要进行配置或者兼具其他功能。

1 引脚 VBAT 是备用电池供电引脚,可接 3V 电池,当系统电源断电时,备用电池可给内部的 RTC 时钟和备份寄存器提供电源。

2 引脚是 IO 口或侵入检测或 RTC,IO 口可以根据程序输出或读取高低电平。侵入检测可以用来做安全保障的功能(比如你的产品安全性比较高,可以在外壳加一些防拆的触电,然后接上电路到这个引脚上,若有人强行拆开设备,则触电断开,这个引脚的电平变化就会触发 STM32 的侵入信号,然后就会清空数据来保证安全)。RTC 的引脚可以用来输出 RTC 校准时钟、RTC 闹钟脉冲或者秒脉冲。

3、4 引脚是 IO 口或者接 32.768KHz 的 RTC 晶振。

5、6 号引脚接系统的主晶振,一般是 8MHz,然后芯片内有锁相环电路,可以对这个 8MHz 的频率进行倍频,最终产生 72Mhz 的频率作为系统的主时钟。

7 引脚 NRST 是系统复位引脚,N 代表是低电平复位。

8、9 引脚是内部模拟部分的电源,比如 ADC、RC 振荡器等。VSS 是负极,接 GND,VDD 是正级,接 3.3V。

10~19 号引脚都是 IO 口,其中 PA0 还兼具了 WKUP 功能(可以用于唤醒处于待机模式的 STM32)。

20 号引脚是 IO 口或 BOOT1 引脚,BOOT 引脚是用来配置启动模式的。

21、22 引脚是 IO 口。

23、24 引脚是 VSS_1 和 VDD_1 是系统的主电源口,同样的 VSS 是负极,VDD 是正级。

下面的 VSS_2 和 VDD_2 以及 VSS_3 和 VDD_3 都是系统的主电源口,这里 STM32 内部采用分区供电的方式,所以供电口比较多,在使用时,把 VSS 都接 GND,VDD 都接 3.3V 即可。

25~33 引脚都是 IO 口。

34~40 引脚再加 27 号引脚,都是 IO 口或者调试端口,默认功能是调试端口(用来调试程序和下载数据),这个 STM32 支持 SWD(需要两根线,分别是 SWDIO 和 SEDLK)和 JTAG (需要五根线,分别是 JTMS、JTCK、JTDL、JTDO、NJTRST)两种调试方式。

STLINK 调试程序用的是 SWD 方式(只需占用 PA13 和 PA14 这两个 IO 口,剩下的 PA15、PB3、PB4 可以切换为普通的 IO 口使用(需在程序中配置,不配置的话默认是不会用作 IO 口的)。

41、42、43、45、46 引脚都是 IO 口。

44 引脚 BOOT0 和 BOOT1 一样用来做启动配置。

# 启动配置

启动配置的作用是指定程序开始运行的位置,一般情况下,程序都是在 FLASH(主闪存存储器)程序存储器开始执行。

接 0 表示接地,接 1 表示接到 3.3V 电源正的意思。

系统存储器这个模式就是用来做串口下载的,这个系统存储器存的就是 STM32 中的一段 BootLoader 程序(BootLoader 程序作用就是接受串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程序)。

一般需要串口下载程序时(当没有调试接口时,这时需要用到串口的方式下载程序)需要配置到系统存储器启动模式

内置 SRAM 模式主要用来进行程序的调试。 BOOT 引脚的值是在上电复位后的一瞬间有效的,之后就随便了。例如 20 引脚在上电瞬间是 BOOT1 的功能,当第四个时钟过之后就是 PB2 的功能了。

# 最小系统电路

一般来说,单片机只有一个芯片是无法正常工作的,需要连接最基本的电路(最小系统电路)。

供电部分,VSS 都连接了 GND,VDD 都连接了 3.3V。在这个 3.3V 和 GND 之间,一般会连接一个滤波电容(这个电容可以保证电压的稳定),一般只要遇到供电,都会习惯上加上几个滤波电容。VBAT 是接备用电池的。可以选择一个 3V 的纽扣电池,正极接 VBAT,负极接 GND。备用电池是给 RTC 和备份寄存器服务的

晶振部分,接一个 8MHz 的主时钟晶振(8MHz 经过内部锁相环倍频,得到 72Mhz 的主频)。这个晶振的两根引脚分别通过两个网络标号接到 STM32 的 5、6 号引脚,还需接两个 20PF 的电容,作为启震电容,电容的另一端接地即可。若需 RTC 功能还需再接一个 32.768KHz 的晶振,电路和这个一样,接在 3、4 号引脚,OSC32 就是 32.768KHz 晶振的意思。(因为 32.768 是 2 的 15 次方,内部 RTC 经过 2 的 15 次方分频就可以生成 1 秒的时间信号)。

复位电路部分是一个 10k 的电阻和 0.1uf 的电容组成,用来给单片机提供复位信号,NRST 接在 STM32 的 7 号引脚。复位电路上电瞬间的波形是先低电平,然后逐渐高电平。NRST 是低电平复位的(当复位电路上电的瞬间,电容是没有电的),电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态(NRST 引脚就会产生低电平)。当电容逐渐充满电时,电容就相当于断路,此时 NRST 就会被 R1 上拉为高电平。(低电平提供 STM32 的上电复位信号)。

按键提供一个手动复位的功能,当按下按键,电容放电,并且 NRST 引脚也通过按键直接接地了,这就相当于手动产生了低电平复位信号,按键松手后,NRST 又回归高电平,此时单片机从复位状态转为工作状态。复位,程序就从头开始运行。

启动配置部分,H1 相当于开关的作用(拨码开关 / 插跳线帽),拨动开关就可以让 BOOT 引脚选择接 3.3V 还是 GND 了。

下载端口部分,若使用 STLINK 下载程序,需将 SWDIO 和 SWDLK 这两个引脚引出来方便接线,另外将 3.3V 和 GND 引出来。

# 实物图