STM32简介

1. 实验平台搭建

1.1 硬件设备

  1. STM32 面包板入门套件
  2. Windows 电脑
  3. 万用表、示波器、镊子、剪刀等
  • 万用表:可以很方便的检查(测试)电路的连接情况,使用面包板搭建电路可能存在接错线或者接触不良的情况。
  • 示波器:可以测出引脚的电压波形变化,在 PWM 实验或者通信协议的实验,能看到波形,对我们调试程序将会有很大的帮助。
  • 镊子、剪刀:方便面包板插线。

1.2 软件设备

Keil5 MDK

软件安装步骤:

  1. 安装 Keil5 MDK
  2. 安装器件支持包(Keil5之后,芯片的器件支持包独立了出来,开发哪种芯片,就按照对应的支持包即可)
  3. 软件注册
  4. 安装 STLINK 驱动
  5. 安装 USB 转串口驱动

2. STM32 简介

2.1 STM 32 介绍

STM32 是 ST 公司基于(ARM公司开发的) ARM Cortex-M 内核开发的 32 位微控制器。常用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。

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

分为 高性能、主流、低功耗和无线四个系列。

2.2 ARM 介绍

ARM 既指 ARM 公司,也指 ARM 处理器内核。ARM 公司是全球领先的半导体知识产权(IP)提供商,全世界超过 95 % 的智能手表和平板电脑都采用 ARM 架构。

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

ARM

分为 A、R、M三个系列,分别应用于不同的领域:

  • A(Application):主要应用于手机领域,是 ARM 内核中性能最高,发展最快的系列。
  • R(RealTime):主要应用于实时性很高的场景,比如硬盘控制器等,应用场景较小。
  • M(Microcontroller):主要应用于单片机领域,如 STM32 等。

3 STM32F103C8T6

  • 系列:主流系列 STM32F1
  • 内核:ARM Cortex-M3
  • 主频:72MHz
  • RAM(运行内存):20K(实际存储介质:SRAM)
  • ROM(程序存储器):64K(实际存储介质:Flash)
  • 供电:2.0~3.6V(标准3.3V)
  • 封装:LQFP48(共 48 个引脚)

注意:51 单片机使用的是 5V 供电,还有 USB 的输出电压也是 5V,不能直接给 STM32 供电,需要加一个稳压芯片,把电压降至 3.3V,再给 STM32 供电。

3.1 片上资源/外设(Peripheral)

STM32F1 整个系列的所有外设:(并不是所有型号都拥有全部外设,C8T6 没有最后四个外设)

英文缩写名称英文缩写名称
NVIC嵌套向量中断控制器CANCAN通信
SysTick系统滴答定时器USBUSB通信
RCC复位和时钟控制RTC实时时钟
GPIO通用IO口CRCCRC校验
AFIO复用IO口PWR电源控制
EXTI外部中断BKP备份寄存器
TIM定时器IWDG独立看门狗
ADC模数转换器WWDG窗口看门狗
DMA直接内存访问DAC数模转换器
USART同步/异步串口通信SDIOSD卡接口
I2CI2C通信FSMC可变静态存储控制器
SPISPI通信USB OTGUSB主机接口

标记 是位于 Cortex-M3 内核里面的外设。剩下的是内核外的外设。

  • NVIC:内核里面用于管理中断的设备,比如配置中断优先级等
  • SysTick:给操作系统提供定时服务来进行任务切换功能,STM32 可以加入操作系统,如 FreeRTOS、UCOS 等。(我们用定时器完成 Delay 函数的功能做演示)
  • RCC:对系统的时钟进行配置,使能各模块的时钟。

在 STM32 中,其他的这些外设在上电的情况下默认是没有时钟的。不给时钟的情况下,操作外设是无效的,外设也不会工作,这样的目的是降低功耗,所有在操作外设之前,必须要先使能它的时钟。

  • GPIO:通用 IO 口,可以用 GPIO 来点灯,读取按键等,是单片机最基础的功能。
  • AFIO:可以完成复用功能端口的重定义,还有中断端口的配置。
  • EXTI:当引脚有电平变化时,就可以触发中断,让 CPU 来处理任务。
  • TIM:整个 STM32 最常用,功能最多的外设。

TIM 分为高级定时器,通用定时器,基本定时器三种类型,其中高级定时器最为复杂,常用的是通用定时器,这个定时器不仅可以完成定时中断的任务,还可以完成测频率、生成 PWM 波形、配置成专用的编码器接口等功能,像 PWM 波形,就是我们电机驱动、舵机驱动最基本的要求了。

  • ADC:STM32 内置了 12 位的 AD 转换器,可以直接读取 IO 口的模拟电压值,无需外部连接 AD 芯片,使用非常方便。
  • DMA:可以帮助 CPU 完成搬用大量数据这样的繁杂任务。
  • USART:UART 是异步串口,实际用 异步串口 比较多。
  • I2C 与 SPI:STM32 内置了它们的控制器,可以用硬件来输出时序波形,使用起来更高效,当然用通用 IO 口来模拟时序波形也没问题。
  • CAN:一般用于汽车领域。
  • USB:利用 STM32 的 USB 外设,可以做一个模拟鼠标,模拟 U 盘等设备。
  • RTC:在 STM32 内部完成年月日、时分秒的计时功能;可以接外部备用电池,即使掉电也能正常运行。
  • CRC:一种数据检验方式,用于判断数据的正确性。
  • PWR:可以让芯片进入睡眠模式等状态,来达到省电的目的。
  • BKP:一段存储器,当系统掉电时,仍可由备用电池保持数据;根据需要,可以完成一些特殊功能。
  • IWDG / WWDG:当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定。
  • DAC:可以在 IO 口直接输出模拟电压,是 ADC 模数转换的逆过程。
  • SDIO:可以用来读取 SD 卡。
  • FSMC:可以用于扩展内存或者配置成其他总线协议,用于某些硬件的操作。
  • USB OTG:用 OTG 功能,可以让 STM32 作为 USB 主机去读取其他 USB 设备。

3.2 芯片的命名规则

在这里插入图片描述
在这里插入图片描述

6 代表温度范围:

  • 6 = 工业级温度范围,-40℃~85℃
  • 7 = 工业级温度范围,-40℃~105℃

3.3 芯片系统结构

在这里插入图片描述

  1. Cortex-M3 内核引出来三条总线:ICode指令总线,DCode数据总线,System系统总线。
    • ICode 总线和 DCode 总线主要是用来连接 Flash 闪存的。Flash里面存储我们编写的程序。
    • ICode 指令总线用来加载程序指令的。
    • DCode数据总线用来加载数据的,比如常量和调试参数这些。
    • System系统总线连接到了其他东西上面。
  2. 总线矩阵:
    • SRAM:用于存储程序运行时的变量数据。
    • FSMC:
    • AHB系统总线(又称先进高性能总线):用于挂载最基本的或者性能比较高的外设的。比如复位和时钟控制这些最基本的电路,还有 SDIO。
  3. 两个桥接,接到了 APB2 和 APB1 两个外设总线上,包含了外设种类和分布。(由于 AHB 和 APB 的总线协议、总线速度、还有数据传送格式的差异,所以中间需要加两个桥接,来完成数据转换和缓存。)
    • AHB 的整体性能比 APB 高一些,APB2的性能又比 APB1 高一些。(AHB 与 APB2 同频率,都是 72MHz,APB1 一般是 36MHz)
    • APB:先进外设总线,用于连接一般的外设。
    • APB2 连接的都是一般外设中稍微重要的部分,比如 GPIO 端口,还有外设的一号选手等,这里TIM8和TIM1一样也是高级定时器,所以也是重要的外设。还有 ADC、EXTI、AFIO。
    • 其他的 2、3、4、5号外设,还有 DAC、PWR、BKP等,这些是次要一点的外设,都会分配到 APB1 上去。
    • 在使用的时候,一般感觉不到 APB2 和 APB1 的性能差异。
  4. DMA:当作内核 CPU 的小秘书,主要就是干像数据搬运这样简单且反复要干的事情,DMA通过 DMA 总线连接到总线矩阵上,可以拥有和 CPU 一样的总线控制权,用于访问这些外设。
    • 当需要DMA搬运数据时,外设就会通过请求线发送 DMA 请求,然后 DMA 获得总线控制权,访问并转运数据,整个过程不需要 CPU 参与。

3.4 引脚定义

在这里插入图片描述

标红色的是电源相关(S)的引脚,标蓝色的是最小系统相关的引脚,标绿色的是 IO 口、功能口这些引脚。
如果想要 STM32 正常工作,首先就需要把电源部分和最小系统部分的电路连接好。

  • FT代表能容忍 5V 电压,没有只能容忍 3.3V 电压,没有 FT 需要接 5V 的电平需要加装电平转换电路了。
  • 主功能,上电后默认的功能,一般与引脚名称相同,不同的话实际功能以主功能为准。
  • 默认复用功能是 IO 口上同时连接的外设功能引脚。配置 IO 口时可以选择是通用 IO 口还是复用功能。
  • 重定义功能:如果有两个功能同时复用在了一个 IO 口上,而确实用到这两个功能,可以把其中一个复用功能重映射到其他端口上。
  • 1:备用电池供电的引脚,可以接一个 3V 的电池。当系统电源断电时,备用电池可以给内部的 RTC 时钟和备份寄存器提供电源。
  • 2:IO 口(根据程序输出或读取高低电平,最基本最常用)或侵入检测(用来做安全保障的功能)或 RTC(输出 RTC校准时钟、RTC闹钟脉冲或者秒脉冲)

比如产品安全性比较高,可以在外壳加一些防拆的触点,然后接上电路到这个引脚;如果有人强拆设备,那触点断开,这个引脚电平变化,就会触发 STM32 的侵入信号,然后清空数据来保证安全。

  • 3、4:IO 口 或 32.768KHz 的 RTC 晶振。
  • 5、6:接系统的主晶振,一般是 8 MHz,芯片内有锁相环电路,可以对这个 8 MHz 的频率进行倍频。最终产生 72 MHz的频率,作为系统的主时钟。
  • 7:系统复位引脚,N代表它是低电平复位的。
  • 8、9:内部模拟部分电源,比如 ADC、RC 震荡器等。VSS是负极,接 GND,VDD是正极,接 3.3V。
  • 10~19:IO口,PA0 还兼具 WKUP 的功能,可以用于唤醒处于待机模式的 STM32。推荐优先使用加粗的 IO 口。没有加粗可能需要配置/兼具其他功能。
  • 20/44:IO口 或者 BOOT1/BOOT0 引脚,用于配置启动模式的。
  • 21、22:IO口。
  • 23、24:系统的主电源口。同样VSS是负极,VDD是正极。
  • 35、36、47、48:都是主电源口,STM32 内部采用了分区供电的方式,所以供电口比较多,使用时,VSS都接 GND,VDD都接 3.3V 即可。
  • 25~33:都是 IO 口。
  • 34、37~40:IO口或者调试端口,默认主功能是 调试端口,用来调试程序和下载程序。

STM32 支持 SWD 和 JTAG 两种调试方式。

  • SWD 需要两根线,分别是 SWDIO 和 SWCLK
  • JTAG 需要五根线,分别是 JTMS、JTCK、JTDI、JTDO、NJTRST。
    使用 STLINK 来下载调试程序,用的是 SWD 方式。其他 三个端口可以当作普通 IO 口使用,但在要程序中配置,不配置的话默认是不会用作 IO 口的。
  • 41~43、45、46:都是 IO 口。

3.5 启动配置

作用:指定程序开始运行的位置。
在这里插入图片描述

一般情况下,程序都是在 Flash 程序存储器开始执行(配置1),这种模式是最常用的模式,一般情况下都是这个配置。但是在某些情况下,我们也可以让程序在别的地方开始执行,用以完成特殊的功能。

  • 配置2:做串口下载用的。这个系统存储器存的是 STM32 中的一段 BootLoader 程序,BootLoader 程序的作用就是接收串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程序了。
    • 如果调试端口全部变成普通 IO 口,就下载不进行程序了,就需要用到串口的方式下载程序。
    • 如果没有 STLINK,也没有 JLINK,就可以使用串口来进行下载程序。
  • 配置3:主要用来进行程序调试的,现阶段用的比较少。

BOOT 引脚的值是在上电复位后的一瞬间有效的,之后就随便了;如 20 号引脚,BOOT1 和 PB2 在同一块引脚上,也就是在上电的瞬间,是 BOOT1 的功能,当第 4 个时钟过后,就是 PB2 的功能。

3.6 最小系统电路

在这里插入图片描述

  • STM32 及供电
    • 三个分区供电的主电源和模拟部分电源都连接了供电引脚。VSS 都连接了 GND,VDD 都连接了 3.3V。
    • 3.3V 与 GND 之间连接一个滤波电容(非常必要),可以保证供电电压的稳定。我们在设计电路的时候,一般只要遇到供电,都会习惯上加上几个滤波电容。
    • VBAT 接备用电池(接3.3V/悬空)。备用电池是给 RTC 和备份寄存器服务的。(不需要可以不接)
    • 芯片四周都有供电引脚,自己画板子的话走线还是很头疼的。但还是要把供电都接好
  • 晶振电路
    • 接了一个 8 MHz 的主时钟晶振,STM32的主晶振一般都是 8 MHz。8 MHz 经过内部锁相环倍频,得到 72 MHz 的主频。
    • 晶振的两个引脚分别通过这两个网络标号,接到 STM32 的 5、6 号引脚(PC14 + PC15)。
    • 另外还需要接两个 20pF 的电容,作为启震电容,电容的另一端接地即可。
    • 接了 1M 的电阻,有一些作用。(也可以不接)
    • 如果需要 RTC 功能的话,还需要再接一个 32.768 KHz 的晶振(OCS32),电路跟这个一样,接在 3、4 号引脚(OSCIN + OSCOUT)。
    • 32768 是 2 的 15 次方,内部 RTC 电路经过 2 的 15 次方分频,就可以生成 1 秒的时间信号了。

  • 复位电路
    • 一个 10k 的电阻 和 0.1μF 的电容组成的,用来给单片机提供复位信号。
    • NRST 接在 STM32 的 7 号引脚,NRST 是低电平复位,当这个复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态,那 NRST 引脚就会产生低电平;当电容逐渐充满电时,电容就相当于断路,此时 NRST 就会被 R1 上拉为 高电平。
    • 上电瞬间的波形就是先低电平,然后逐渐高电平,这个低电平就可以提供 STM32 的上电复位信号。
    • 电容充电非常快,在我们看来,单片机就在上电一瞬间就复位了。
    • 电容并联一个按键,这个可以提供一个手动复位的功能,当我们按下按键时,电容被放电,并且 NRST 引脚也通过按键被直接接地了。这就相当于手动产生了低电平复位信号。按键松手后,NRST 又回归高电平,此时单片机就从复位状态转为工作状态。
    • 平时我们可以见到这种复位按键,一般在设备上有个小孔,当设备死机并且还不方便断电重启时,就可以拿一根针戳一下这个小孔里的按键,这样就会使设备复位了。
    • 手动复位功能:按下按键,程序从头开始执行。
  • 启动配置
    • H1相当于开关的作用,拨动这个开关,就可以让 BOOT 引脚选择 3.3V 还是 GND 了,可以使用跳线帽来充当开关的功能(插在左边两个脚时,相当于接地,插在右边两个脚时,相当于 3.3 V,这样就可以配置 BOOT 高低电平了)
    • 自己设计电路,接一个拨码开关也没问题。
  • 下载端口
    • 如果使用 STLINK 下载程序的话,需要把 SWDIO 和 SWCLK 这两个引脚引出来方便接线。
    • 另外再把 3.3V 和 GND 引出来,这个 GND 是必须引出来的,3.3V 如果板子自己有供电的话,可以不引;建议都引出来,这样方便一些。
  • 启动配置
    • H1相当于开关的作用,拨动这个开关,就可以让 BOOT 引脚选择 3.3V 还是 GND 了,可以使用跳线帽来充当开关的功能(插在左边两个脚时,相当于接地,插在右边两个脚时,相当于 3.3 V,这样就可以配置 BOOT 高低电平了)
    • 自己设计电路,接一个拨码开关也没问题。
    • 供电也加了电源滤波,作用也是稳定供电的。
  • 两个测试 LED
    • 一个直接接到 VCC3V3 和 GND,是电源指示灯。
    • 另一个接到了 PC13,这是一个 IO 口测试灯。
  • 稳压芯片
    • 给 5 V 的电降到 3.3 V,给 STM32 供电。
    • 左边的输入是 USB 的 5V 电源,右边输出是 3.3V
  • 两排引脚排针
    • 把芯片的引脚都引出来,方便我们接线。
  • USB 接口
    • 接 PA11 和 PA12 是 STM32的 USB 引脚,可以进行 USB 通信。
    • 另外这个 USB 还可以提供 5 V 的供电,这个电经过稳压芯片,降到 3.3V,其他电路都是 3.3V 供电。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值