Skip to content

Latest commit

 

History

History
294 lines (268 loc) · 20.3 KB

01STM32简介.md

File metadata and controls

294 lines (268 loc) · 20.3 KB

1 STM32简介

[toc]

注:笔记主要参考B站江科大自化协教学视频“STM32入门教程-2023持续更新中”。 注:工程及代码文件放在了本人的Github仓库


1.1 套件简介

本教程使用STM32最小系统板(STM32F103C8T6)+面包板硬件平台进行学习。使用面包板可以完成任意硬件的连接,相比于成品的开发板方式,使用面包板更有利于对硬件电路的学习,而且也可以避免开发板的一些问题(如引脚冲突、引脚无法更改等)。但是,面包板也有缺点,比如实验现象不对有可能时程序接线的问题,所以连线时要更加细心一些。主要套件如下:

图1-1 STM32开发套件简介

STM32是一款32位单片机(51单片机是8位单片机),其中“ST”是ST公司得捷电子Digi-Key是其官方授权的分销商),“M”则是“MicroController Unit, MCU”的缩写,即STM32基于ARM Cortex-M内核开发的32位微控制器。补充一点概念上的区别(不是非常认同但先这么记着):

MCU 和单片机的区别

  1. 原理不同: mcu又称单片微型计算机(Single Chip Microcomputer )或者单片机,重点在于单片。 单片机则是把一个计算机系统集成到一个芯片上,重点在于芯片,相当于微型计算机但缺少I/O设备。
  2. 指代对象不同: MCU是指单片微型计算机或者单片机。单片机则是微型计算机家族中的一个分支而已。
  3. 范畴不同: CPU有三个分支:DSP、MCU(Micro Control Unit,微控制器单元)、MPU(Micro Processor Unit,微处理器单元)。 单片机是MCU中最具有代表性,是MCU的实现。
  4. 功能不同。 MCU在不同的场合有不同的应用。例如手机、遥控器甚至汽车电子和机器手臂的控制等都有涉及。 单片机的使用领域比MCU的要更为广泛,从家用电器和通讯设备到智能仪表以及导航系统都有应用。
  5. 用途不同: MCU倾向于不同信息源的多种数据的处理诊断和运算,更侧重于控制。 而单片机就是一块芯片,主要是对数据进行高速化处理

注:但通常认为MCU和单片机概念等价。

STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器,常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。下面是ST公司官网上对于自家STM32 MCU的产品型号介绍:

图1-2 STM32产品型号

注:通常来说,无线wifi都用esp,用stm32的个人玩家很少。

ARM既指ARM公司,也指ARM处理器内核。ARM公司是全球领先的半导体知识产权(IP)提供商(只设计内核,不生产实物),全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片。ST公司就是ARM公司的授权厂商之一。下面是ARM公司设计的内核系列:

图1-3 ARM内核系列

根据上图,ARM针对不同的应用场景设计了不同型号的内核。经典款逐渐不够用之后,AREM公司推出了新一代的Cortex内核来满足市场需求,并推出了Cortex-A、Cortex-R、Cortex-M三种系列。通常,A系列适用于高端应用领域(如手机芯片),R系列主要针对实时处理领域(如硬盘监控器),M系列适用于单片机领域。

1.2 STM32芯片内部的外设

下图的左侧是所有STM32芯片的内部结构示意图。可以看出ARM公司设计的内核只是其中的一部分(但最关键,相当于CPU),其他公司围绕着这个内核设计一系列外围电路配合其工作,进而发挥内核的性能。右侧图则给出了本节课程所使用的STM32芯片:STM32F103C8T6。

STM32F103C8T6主要指标: 系列:主流系列STM32F1 内核:ARM Cortex-M3 主频:72MHz RAM(运行内存):20K(SRAM) ROM(程序存储器):64K(Flash) 供电:2.0~3.6V(标准3.3V)。由于USB供电是5V,所以还要加稳压芯片。(注:51单片机为5V供电) 封装:LQFP48

图1-4 STM32芯片内部结构示意图
表1-1 STM32F1系列的片上资源/外设
<style type="text/css"> .tg {border-collapse:collapse;border-spacing:0;} .tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px; font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-cly1{text-align:left;vertical-align:middle} .tg .tg-wa1i{font-weight:bold;text-align:center;vertical-align:middle} .tg .tg-c4ze{color:#000000;font-weight:bold;text-align:center;vertical-align:middle} .tg .tg-nrix{text-align:center;vertical-align:middle} </style>
英文缩写 名称 补充说明 英文缩写 名称 补充说明
NVIC 嵌套向量中断控制器 内核中用于管理中断的设备,如配置中断优先级 CAN CAN通信 常用于汽车领域。
SysTick 系统滴答定时器 内核中的定时器,给操作系统(如FreeRTOS、UCOS等)提供定时服务,以完成任务切换。 USB USB通信 可以做模拟鼠标、模拟U盘等设备。
RCC 复位和时钟控制 使能各模块时钟,上电默认其他外设模块均无时钟 RTC 实时时钟 可接备用电池,掉电保持运行
GPIO 通用IO口 可以用GPIO来点灯、读取按键等。 CRC CRC校验
AFIO 复用IO口 可以完成复用端口的重定义,中断端口的配置 PWR 电源控制 可使芯片进入睡眠模式,节能
EXTI 外部中断 引脚有电平变化会触发中断 BKP 备份寄存器 接备用电池,掉电保存数据
TIM 定时器 最常用,功能最多的外设,可以测频率、生成PWM波等。分为高级定时器、通用定时器(最常用)、基本定时器。 IWDG 独立看门狗 当程序死机或死循环时,复位程序
ADC 模数转换器 芯片内的12位ADC外设,无需外接AD芯片。 WWDG 窗口看门狗
DMA 直接内存访问 帮助CPU搬运大量数据。 DAC 数模转换器
USART 同步/异步串口通信 异步串口UART应用更多 SDIO SD卡接口 用于读取SD卡数据。
I2C I2C通信 FSMC 可变静态存储控制器 用于扩展内存,或配置成其他总线协议
SPI SPI通信 USB OTG USB主机接口 让STM32作为USB主机,读取其他设备。

注意:

  1. 前两个加粗资源表示是位于Cortex-M3内核里面的外设,剩下的都是位于内核之外的外设。
  2. 上表给出的是STM32F1系列芯片中所有的外设,而具体到STM32F103C8T6芯片,则不包含最后4种外设。
  3. 关于芯片外设的具体介绍,可以参考数据手册《STM32F10xxx参考手册》、《STM32F103x8B数据手册》。
图1-5 STM32系列产品命名规则

1.3 STM32芯片系统结构

图1-6 STM32芯片系统结构

首先来看看STM32的芯片系统结构(只需要大致了解一下即可):

  • Cortex-M3:内核。注意ICode、DCode、System是直接从内核引出的三根总线。
  • Flash:存储编写的程序。ICode总线和DCode总线主要用于连接Flash闪存。
  • SRAM:用于存储程序运行时的变量数据。
  • ICode:指令总线。加载程序指令。
  • DCode:数据总线。加载数据,如常量和调试参数。
  • System:系统总线。连接到Flash以外其他外设上,如SRAM、FSMC(本课程不会用到)。
  • AHB系统总线:先进高性能总线。用于挂载最基本的(如复位和时钟控制RCC、SDIO)、或者性能比较高的外设。
  • APB2、APB1:先进外设总线。用于连接一般的外设。通常AHB(72MHz)性能总体高于APB,而APB2(72MHz)性能高于APB1(36MHz)。所以APB2连接外设中稍微重要的部分,如GPIO、各外设的1号接口;剩下的次要外设给APB1。
  • 桥接2、桥接1:由于AHB和APB的总线协议、 总线速度、数据传输格式上的差异,需要加上2个桥接,来完成数据的转换和缓存。
  • DMA2、DMA1:拥有和CPU相同的总线控制权,用于帮助CPU完成数据搬运这样简单但重复的活,相当于CPU的小秘书。若外设需要进行数据搬运,那么会直接找DMA(DMA请求),DMA就会获得总线控制权来搬运数据,整个过程无需CPU的参与。

1.4 STM32芯片引脚定义

图1-6 STM32F103C8T6引脚定义

上图给出了UP主自己做的STM32F103C8T6引脚定义。一些说明如下:

  1. 标红色的是电源相关的引脚,标蓝色的是最小系统相关的引脚,标绿色的是IO口、功能口引脚。所以 最小系统板主要关心红色和蓝色部分。
  2. 类型:S代表电源、I代表输入、O代表输出、I/O代表输入输出。
  3. I/O口电平:表示I/O所能容忍的电压,默认3.3V,FT表示5V。注意没有FT标志的引脚都需要加装电平转换电路。
  4. 主功能:上电默认功能。
  5. 默认复用功能:I/O口上同时连接的外设功能引脚,配置IO口时可以设置是主功能/复用功能。
  6. 重定义功能:如果需要某一个端口上实现两个功能,那么可以将其中一个功能重映射到另一个空闲端口上,这个空闲端口的重定义功能需要包含相应的功能。
  7. 推荐优先使用加粗的IO口,没有加粗的可能需要配置或兼具其他功能,使用时需要注意。

下面来一一介绍这些引脚的功能:

引脚1:备用电池供电。可接3V电池,系统断电时为芯片内部的RTC和备用寄存器提供电源。

引脚2:IO口/入侵检测/RTC。IO口输出或读取高低电平;入侵检测提供安全保障,可以将外部一些防拆的触点接在此端口,若触点电平变化,STM32芯片会自动清空寄存器数据;RTC可输出RTC校准时钟、RTC闹钟脉冲、秒脉冲。

引脚3、4:IO口/32.765kHzRTC晶振。

引脚5、6:系统主晶振,一般8MHz,芯片内的锁相环电路将时钟倍频成72MHz作为系统主时钟。

引脚7:系统复位引脚。N表示低电平复位。

引脚8、9:芯片内部模拟部分的电源,如ADC、RC振荡器等。VSS接地、VDD接3.3V。

引脚10~19、21~22、25~33、41~43、45~46:共26个默认普通IO口。 其中的PA0兼具WKUP功能,用于唤醒处于待机状态的STM32。

引脚20:IO口/BOOT1引脚。BOOT1引脚用于控制启动模式。

引脚23/24、35/36、47/48:系统的主电源口。STM32采用分区供电的方式,所以供电口多。

引脚34、37~40:IO口/调试端口。STM32支持SWD和JTAG两种调试方式。SWD只需SWDIO、SWCLK两根线;JTAG需要全部的5根。教程使用STLINK(SWD)下载程序,此时剩余3个引脚可配置成IO口。

引脚44:BOOT0,和BOOT1配合,用于启动配置。启动配置就是指定程序开始运行的位置,一般程序在Flash程序存储器中运行,但在某些情况下可以指定程序在别的地方开始执行以完成特殊功能。

  • “主闪存存储器”启动模式最常用。

  • “系统存储器”模式用于串口下载程序,系统存储器中存储的是一段STM32的BootLoader程序,其作用就是接收串口数据然后刷新到主闪存中。当5个调试端口全被配置成IO口时,单片机将无法再下载程序!! 此时只能使用串口下载程序的方式进行补救。另外,当手头上没有STLINK和JLINK,也可以使用串口来下载程序,通俗来说就是“刷机”。:joy:

  • “内置SRAM”模式主要用于程序调试,使用较少,本教程不会出现。

  • 注意BOOT值是在上电一瞬间(第4个时钟上升沿)有效,后面随意,即BOOT1引脚后续会变成普通IO口。

1.5 STM32最小系统

图1-7 STM32F103C8T6最小系统原理图

上面给出了STM32最小板的原理图。单片机只有一个芯片无法正常工作,还需要连接一些最基本的电路,称之为最小系统电路。即,最小板仅保留引脚中的电源部分(红色)和最小系统部分(蓝色)

  • STM32及供电:连接了4个电源进行分区供电,每个电源的正负极之间都加了滤波电容滤除电源波纹。备用电源VBAT有需要就接上。
  • 晶振:8MHz主时钟,内部锁相环倍频到72MHz主频。C1、C2是两个起振电容。若需要RTC功能还需要接32.768kHz晶振,这个晶振经过2^15^分频就可以得到1s的计数。
  • 复位:给单片机提供复位信号,低电平复位。C3保证上电瞬间NRST为低电平,后续充电变成高电平。左侧并联的按键提供手动复位的功能。
  • 启动配置:拨动中间的开关就可以让BOOT1、BOOT0引脚选择相应的高低电平了。开发板上选择了跳线帽实现。
  • 下载端口:使用STLINK下载程序,需要将SWDIO、SWCLK两个引脚接出来方便引线,GND必须引出来,3.3V供电可以不引,但是建议这四个引脚都引出来。
  • 没有给出的稳压芯片:常用的5V转3.3V稳压芯片有XC6204、XC6206、AMS1117等。