STM32单片机(一)STM32简介

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习STM32单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

STM3单片机安装软件、各种资料以及源码的路径:
链接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取码:asdf

链接里压缩包的解压密码:32

本节是STM32单片机部分的第一节,主要对STM32部分课程进行简单介绍,以及对STM32单片机进行简单介绍;其中包括STM32介绍、ARM介绍、片上资源/外设、命名规则、系统结构、引脚定义、启动配置、最小系统电路等。

一、STM32课程简介

在这里插入图片描述

在STM32的学习过程中,将使用stm32最小系统板+面包板硬件平台进行学习和练习,硬件平台如上图所示,将STM32最小系统板(上图蓝色板子)插在面包板上,作为基本的硬件单元,下面插上一块0.96寸的OLED(右下角黑色板子)作为调试和显示的屏幕,在调试程序时,可以把程序中的变量显示在这个屏幕上,这样调试起来就会比较方便;右边的STLINK(紫色部分)插在电脑上用于下载程序和供电;最上面的是蜂鸣器模块;

使用面包板可以完成任意电路的连接,接线和修改都是非常方便的;相比较成品的开发板方式,使用面包板更有利于我们对硬件电路的学习,而且也可以避免开发板的一些问题,比如引脚冲突、引脚无法更改等;

当然使用面包板也会带来一些问题,比如如果程序现场跑不出来,不仅有可能是程序的问题,也有可能是接线的问题等;这就需要我们在连线的时候要更加细心;关注软件程序的同时,也要关注硬件电路;

硬件设备

在这里插入图片描述

软件设备:

在这里插入图片描述
这次学习STM32使用的是Keil5 MDK这个软件,Keil5 SDK是用来给ARM系列的单片机编程的。

套件介绍

在这里插入图片描述

在这里插入图片描述

中间白色部分是面包板,左边这一盒是面包板专用的跳线,这种跳线比较短,可以贴在面包板上插线,比较适合长时间插线的情况;上面那一扎是面包板的飞线,这种线比较长,也方便挪动,比较适合经常挪动的接线情况;飞线下面两排是杜邦线,分别是公对母和母对母的,可以用于插接一些电路模块;

在这里插入图片描述

蓝色部分是STM32最小系统板,该板上中间的黑色小模块就是STM32芯片,我们就是主要学习这个小芯片;STM32最小系统板的右边是0.96寸的OLED显示屏模块,用于显示参数和变量,这个显示屏是一个4引脚版本的,现在网上卖的由4引脚和7引脚的,主要不要弄错了;

图中右上角的是电位器,主要用来进行AD转换试验的;电位器下面是按键,两引脚的小按键,它可以正好跨接在面包板的引脚插孔和电源插孔之间,插接非常方便整洁,如下图所示:
在这里插入图片描述

在这里插入图片描述

五颜六色的是LED灯;左边紫色部分的是STLINK,用来下载程序和供电的;STLINK下面是USB转串口模块,使用这个模块就可以使STM32和电脑进行串口通信了;

在这里插入图片描述

有源蜂鸣器模块,内置震荡源,接上电就可以响;相比较无源蜂鸣器模块需要不断反转IO口的操作方式,有源蜂鸣器模块就方便多了,基本和点灯一样简单;

右边四个是传感器模块,第一个是光敏电阻模块,下面的四个引脚有两个是用来供电的,还有两个是光敏电阻信号的模拟输出和数字输出,可以用来进行IO口读取实验或者AD试验;第二个是热敏电阻模块,也是有模拟输出和数字输出的;第三个是对射式红外模块,这个模块配合遮光片可以用来计次,或者配合编码盘用来测速;第四个是反射式红外模块,它可以向地面发射红外光,然后再用红外接收管接收地面反射的红外光,通过判断接收光的强度,就可以大体地识别出地面的颜色变化了;

在这里插入图片描述

W25Q64 Flash存储模块,它可以存储数据,并且是用SPI总线进行通信的,我们主要用它来学习SPI通信;

MPU6050陀螺仪和加速度计,它可以测量芯片自身的姿态,像四轴飞行器上,一般都会配有陀螺仪和加速度计,他是用I2C总线通信的,我们主要用它来学习I2C通信;

旋转编码器,它可以输出两路正交的方波信号,用于指示旋转的方向和速度,STM32里有专用的编码器电路,可以很方便的识别这种信号,这个模块可以当做一个快读的按键来使用,当然本节主要还是用它来模拟编码器的测速,现在的编码电机一般配备活儿传感器或光电传感器,这些传感器的输出和这种旋转编码器是一样的,所以学习一下旋转编码器就可以了;而且这种旋转编码器还比较方便插在面包板上,而且比较便宜;

直流电机和TB6612电机驱动模块,可以用来进行直流电机的PWM调速实验;

SG90舵机,也是用PWM来控制的,它的输出端可以像船舵一样,根据我们给定的PWM信号的占空比固定在某一个角度上,可以用来做一些机器人或者机械臂的关节;

二、STM32简介

2.1 STM32介绍

在这里插入图片描述
ST的意思是ST公司,M是微控制器Microcontroller的首字母;微控制器就是MCU,就是我们常说的单片机,所以STM32也是一款单片机;32的意思是这是一款32位的单片机,相比较8位的51单片机,STM32的性能还是非常强的,当然ST也推出过8位的单片机,名字叫STM8,这个了解一下就行;

这个ARM Cortex-M内核就是STM32内部的核心部分;这个内核是ARM公司设计的,它在STM32中占据极为重要的地位;比如我们程序指令的执行,加减乘除的运算,都是在内核中完成的;它相当于整个芯片的CPU;

在这里插入图片描述

如图中所示,目前STM32主要有四个系列,分别是高性能系列(High Performance)、主流系列(Mainstream)、超低功耗系列(Ultra-low-power系列)和无线系列(Wireless);每个系列对应着不同的产品;

例如:

  • 高性能系列就有STM32F2、F4、F7、H7这些;图中有具体型号芯片的详细性能介绍;比如F2系列就是398 CoreMark和120MHz主频的Cortex-M3内核;这个CoreMark就是一个内核跑分,跑分越高性能越好;Cortex-M3内核就是ARM的其中一个内核芯片;可以看到,STM32H7是目前最强的STM32芯片,拥有3224的内核跑分,550MHz的cortex-M7和240MHz的cortex-M4的内核,是一个双核微控制器;
  • 主流系列包含了F0、F1、F3这些型号;我们本次教程使用的就是STM32F1的这个系列,由177的内核跑分和72MHz的cortex-M3内核;
  • 超低功耗系列包含L0、L1、L4、L5等型号;
  • 无线系列的STM32,包括STM32Wl和STM32WB,可以了解一下;

以上这些就是目前STM家族中的所有系列了;可以看出来这个系列还是比较全的;我们学习的事主流系列;当然如果觉得性能不够也可以继续进阶学习高性能的系列;如果对功耗比较敏感,也可以学习一下低功耗系列;如果想做无线通信的产品,可以了解一下无线的系列;因为他们都是一个家族的,所以换一个系列再学习的话也会比换别的芯片轻松很多;

2.2 ARM介绍

在这里插入图片描述

在本学习过程中我们使用的STM32的型号是STM32F103C8T6,如上图中右侧的图片所示;根据他的型号再对应前面的介绍,我们就已经知道了它是主流系列的STM32F1,他的内核是ARM Cortex-M3,主频是72MHz,它的RAM大小是20K,ROM大小是64K,这里的RAM就是运行内存,实际的存储介质是SRAM;这里的ROM就是程序存储器,实际的存储介质是Flash闪存;它的供电电压是2.0~3.6V,标准是3.3V供电;这里需要注意下,我们以前学的51单片机使用的是5V供电,还有USB输出的电压也是5V,5V不在STM32的供电范围内,因此不能直接给STM32供电;如果是5V电压给STM32供电,需要在中间加一个稳压芯片,把电压降到3.3V,再给STM32供电;它的封装是L QFP48,也就是上图这种比较小的封装,总共有48个引脚。

2.3 片上资源/外设

在这里插入图片描述

下面看一下这款芯片上的片上资源,片上资源又叫外设,英文是Peripheral;上图的表里列出了STM32F1系列的外设资源;我们主要学习的就是STM32的外设;通过程序配置外设,来实现我们想要的功能。

在上表中,前两个颜色深绿色的,是位于Cortex-M3内核里面的外设,剩下的都是内核外的外设。

接下来我们一一看一下这些外设都是干啥的:

  • NVIC,嵌套向量中断控制器;这是内核里面用于管理中断的设备,比如配置中断优先级这些东西;
  • SysTick,系统滴答定时器;这是内核里的一个定时器,主要用来给操作系统提供定时服务的;STM32是可以加入操作系统的,比如FreeRTOS 以及 UCOD等,如果使用了这些操作系统,就需要SysTick提供定时来进行任务切换的功能;我们这次的学习不会使用到操作系统,我们可以用这个定时器来完成Delay函数的功能。
  • RCC,复位和时钟控制;这个可以对系统的时钟进行配置,还有就是使能各模块的时钟;在STM32中,其他的这些外设在上电的情况下默认是没有时钟的,不给时钟的情况下,操作外设是无效的,外设也不会工作,这样的目的是降低功耗; 所以在操作外设之前,必须要先使能它的时钟,这就需要我们用RCC来完成时钟的使能。
  • GPIO,通用IO口,我们可以用GPIO来电灯,读取按键等; 这也是单片机最基本的功能了。
  • AFIO是复用IO口,它可以完成复用功能端口的重定义,还有中断端口的配置。
  • EXTI是外部中断,配置好外部中断后,当引脚有电平变化时,就可以触发中断,让CPU来处理任务;
  • TIM是定时器,这也是整个STM32最常用,功能最多的外设;TIM分为高级定时器,通用定时器,基本定时器三种类型;其中高级定时器最复杂,常用的是通用定时器;这个定时器不仅可以完成定时中断的任务,还可以完成测频率 生成PWM波形 配置成专用的编码器接口等功能;像PWM波形,就是我们电机驱动以及舵机驱动最基本的要求了。
  • ADC是模数转换器,这个STM32内置了12位的AD转换器;可以直接读取IO口的模拟电压值,无需外部连接AD芯片,使用非常方便;
  • DMA是直接内存访问,这个可以帮助CPU完成搬运大量数据这样的繁杂任务;
  • USART是同步或异步串口,我们平常用的UART是异步串口的意思;这里的USART是即支持异步串口,也支持异步串口,当然我们实际还是用异步串口比较多;
  • I2C和SPI是非常通用的两种通信协议;STM32也内置了他们的控制器,可以用硬件来输出时序波形;使用起来更高效,当然用通用IO口来模拟时序波形也是没有问题的;
  • CAN和USB也都是通信协议,CAN通信一般用于汽车领域,USB就不多说了,生活中到处都是USB设备;利用STM32的USB外设,可以做一个模拟鼠标,模拟键盘等设备;
  • RCC是实时时钟,在STM32内部完成年月日,时分秒的计时功能,而且可以接外部备用电池,即使掉电也能正常运行;
  • CRC校验,是一种数据的校验方式,用于判断数据的正确性;有了这个外设的支持,进行CRC校验就会更加方便一些;
  • PWR电源控制,可以让芯片进入睡眠模式等状态,来达到省电的目的;
  • BKP备份寄存器,这是一段存储器,当系统掉电时,仍可由备用电池保持数据,这个根据需要,可以完成一些特殊的功能;
  • IWDG和WWDG是独立看门狗和窗口看门狗,当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定;
  • DAC是数模转换器,它可以在IO口直接输出模拟电压,是ADC模数转换的逆过程
  • SDIO是SD卡接口,可以用来读取SD卡
  • FSMC是可变静态存储控制器,可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操作;
  • USB OTG是USB主机接口,用OTG功能,可以让STM32作为USB主机去读取其他USB设备;

以上就是STM32F1系列所有外设的大致介绍了,在后面的学习中,经常会和这些字母缩写打交道,所以我们应该提前熟悉这些字母的意思,至于具体的功能后面会慢慢介绍;另外还要注意,这是STM32F1整个系列的所有外设,并不是所有型号都拥有全部的外设;比如我们这款C8T6的芯片,就没有后面这四个外设;具体的型号都包含具体哪些外设,还需要看一下对应的数据手册;比如打开C8T6的数据手册,看一下外设资源表
在这里插入图片描述
可以看到,这个C8T6是64K的闪存,20K的SRAM,有三个通用定时器,1个高级定时器,没有基本定时器;2个SPI,2个I2C,3个UART,1个USB,1个CAN总线,37个IO口,2个10通道的12为ADC;那在这个表里没有出现的外设,你就要确认一下它是不是存在;要是操作了不存在的外设,那它是不会工作的;

2.4 命名规则

在这里插入图片描述

下面我们来看一下这个芯片的命名规则,看一下这个型号每一位字母和数字代表的意义;STM32代表的是基于ARM核心的32为微控制器;F代表的是通用类型;103代表的是增强型,当然除了增强型也还有一些基本型(101),USB型(102),互联型(105或107)等;C代表它的引脚数目是48脚(T表示36脚,R表示64脚,V表示100脚,Z表示144脚),一般来说引脚越多,它的外设就会越多;8代表它的Flash闪存的容量是64K,当然还有其它的一些容量大家可以看一下;T代表它的封装类型是LQFP的;6表示的是温度范围是-40~85摄氏度;

这些就是这个STM32的命名规则;现在还有一种比较常用的型号,叫STM32F103RCT6,对照以上命名规则可以知道,这个RCT6的芯片是64脚,256K的Flash,LQFP封装,-40~85摄氏度这样的参数;以后看到其他型号的STM32,也都可以对照这个命名规则;了解它的大致参数。

2.5 系统结构

在这里插入图片描述

下面看一下这个芯片的系统结构,这个结构看起来比较复杂,现在这个阶段不需要每个部分都弄懂,大致的了解一下即可;了解这个系统结构有利于我们加深对STM32的认识,便于今后的学习;我们可以把这个图分为四部分,如下图所示:
在这里插入图片描述

左上角的是Cortex-M3的内核,内核引出来了三条总线,分别是ICode指令总线DCode数据总线System系统总线

这个ICode总线DCode总线主要是用来连接Flash闪存的,Flash里面存储的就是我们编写的程序;ICode指令总线就是加载程序指令的;DCode数据总线是用来加载数据的,比如常量和调试数据这些;

除了ICode总线和DCode总线,内核还引出了System系统总线,如上图所示,System总线就连接到了这些其他的东西上面,比如SRAM,用于存储程序运行时的变量数据;还有FSMC,这个本课程的芯片不会用到;

下面这个AHB系统总线就是用于挂在主要外设的,AHB的意思是先进高性能总线;挂载的一般时最基本的或者性能比较高的外设,比如复位和时钟控制这些最基本的电路,还有SDIO也是挂载在AHB上的;

AHB后面时两个桥接,接到了APB2和APB1两个外设总线上;APB的意思是先进外设总线,用于连接一般的外设,因为AHB和的APB的总线协议,总线速度,还有数据传送格式的差异,所以中间需要加两个桥接,来完成数据的转换和缓存;AHB的整体性能比APB高一些;其中APB2的性能又比APB1高一些,APB2一般是和AHB同频率,都是72MHz,APB1一般是36MHz;所以APB2连接的都是一般外设中稍微重要的部分,比如GPIO端口,还有一些外设的1号选手等;比如USART1,SPI1,TIM1,TIM8等;TIM8和TIM1一样,也是高级定时器,所以也是重要的外设,还有ADC,EXTI,AFIO,也是接在APB2上面的;而其他的像2,3,4,5号外设,还有DAC/PWR/BKP等 ,这些是次要一些的外设,都会分配到APB1上去;当然在使用的时候,个人一般感觉不到APB2和APB1的性能差异;只需要知道这个外设是挂载到哪个系统总线上的就可以了。

右下角的一大部分主要就是刚刚我们介绍的外设种类和分布;

剩下最后左下角的这一部分,就是DMA了,这个DMA可以把它当作内核CPU的小秘书,比如有一些大量的数据搬运的活儿,让CPU来干的话就太浪费时间了;比如说我有个外设ADC模数转换,这个模数转换可以配置成连续模式,比如1ms转换一次,转换完的数据必须得转运出来,否则数据就会被覆盖丢失,如果直接让CPU来干这活儿的话,那么CPU每过1ms就得来转运一下数据,这样会费时费力,影响CPU的正常工作;而且这个活儿就是简单的数据搬运,也没必要让CPU来干;于是DMA这个小秘书就出现了,它主要就是干这些像数据搬运这样,简单且反复要干的事情,那DMA通过DMA总线连接到总线矩阵上,它可以拥有和CPU一样的总线控制权,用于访问这些外设小弟,当需要DMA搬运数据时,外设小弟就会通过请求线发送DMA请求,然后DMA就会获得总线控制权,访问并转运数据;整个过程不需要CPU的参与,省下了CPU的时间用来干其他事情;这就是DMA的用途。

到这里,我们这整个系统结构图就已经大概清楚了;

2.6 引脚定义

在这里插入图片描述

在这里插入图片描述

引脚定义对于我们使用这个芯片而言还是非常重要的,一般我们拿到一个新的芯片时,需要着重地看一下它的引脚定义,有的时候这个引脚定义看完了,我们就可以大概知道这个芯片时怎么使用的了,那上图就是江科大老师做出来的STM32F103C8T6的引脚定义表;以后我们开发STM32会经常用到这个表;大家可以把这个图片存下来方便以后查看;

图的最上方白色部分就是C8T6这个芯片的引脚序号和引脚名称的示意图;在左上角有个小黑点,代表它左边的引脚是1号引脚,然后逆时针依次排列,直到48号引脚;下面绿色表格里就是每个引脚的名称和功能;在这里,作者都做了颜色标记,标橙色的是电源相关的引脚,标蓝色的是最小系统相关的引脚,标绿色的是IO口,功能口这些引脚;

首先表头,前两列是引脚号引脚名称,和上面的芯片引脚一一对应;接着是类型,S代表电源,I代表输入,O代表输出,IO代表输入输出;然后IO口电平代表IO口所能容忍的电压;在这一列里面,有FT的,表示该引脚能容忍5V的电压,没有FT的,则表示只能容忍3.3V的电压;如果没有FT的需要接5V的电平,就需要加装电平转换电路了; 主功能就是上电后默认的功能,一般和引脚名称相同,如果不同的话,引脚的实际功能是主功能而不是引脚名称的功能;默认复用功能是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的;然后芯片内部u有锁相环电路,可以对这个8MHz的频率进行倍频,最终产生72MHz的频率,作为系统的主时钟;
  • 7号NRST是系统复位引脚,N代表它是低电平复位的
  • 8、9号引脚是内部模拟部分的电源,比如ADC、RC振荡器等;VSS是负极,接GND,VDD是正极,接3.3V
  • 10号引脚到19号引脚都是IO口,其中PA0还兼具了WKUP的功能,这个可以用于唤醒处于待机模式的STM32;
  • 20号引脚是IO口或者BOOT1引脚,BOOT引脚是用来配置启动模式的;20口引脚没有加粗,因为推荐优先使用10-19这些引脚IO口,加粗了。没有加粗的IO口可能需要进行配置,或者兼具其他功能,使用的时候需要留意一下;
  • 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~35都是IO口
  • 34号,加上27~40号,这些都是IO口或者调试端口;上面默认的主功能是调试端口,调试端口就是用来调试程序和下载程序的,这个STM32支持SWD和JTAG两种调试方式,SWD需要两根线,分别是SWDIO和SWCLK;JTAG需要五根线,分别是JTMS、JTCK、JTDI、JTDO、NJTRST;我们教程使用的是STLINK来下载调试程序,STLINK采用的是SWD的方式;所以只需要占用PA13和PA14这两个IO口;在使用SWD的调试方式时,剩下的PA15、PB3、PB4可以切换为普通的IO口来使用,但要在程序中进行配置,不配置的话默认是不会用作IO口的;
  • 41、42、43、45、46都是IO口
  • 最后剩下的44号BOOT0,和刚刚介绍的BOOT1一样,也是用来做启动配置的;

2.7 启动配置

在这里插入图片描述
刚刚在2.6节中介绍过BOOT0和BOOT1两根引脚的功能,这个启动配置的作用就是指定程序开始运行的位置,一般情况下,程序都是在Flash程序存储器开始执行; 但是在某些情况下,我们也可以让程序在别的地方开始执行,用以完成特殊的功能;

在STM32F10xxx里,可以通过配置BOOT0和BOOT1引脚,来选择三种不同的启动模式;

  • 当BOOT0引脚为0,就是接地的意思,这个时候BOOT1接X,也就是无论结什么,启动模式都是主闪存存储器的模式;这时候主闪存存储器被选为启动区域;也就是正常执行Flash闪存里面的程序;这个模式是最常用的模式,一般情况下都是这个配置;
  • 当BOOT1接0,BOOT0接1,接1就是接到3.3V电源正的意思;那启动模式就是系统存储器,说明系统存储器被选为启动区域,这个解释不太好理解;其实这个模式就是用来做串口下载用的,这个系统存储器存的就是STM32中得 一段BootLoader程序;BootLoader程序的作用就是接收串口的数据,然后刷新到主闪存中;这样就可以使用串口下载程序了;一般我们使用串口下载程序的时候会配置到这个模式上;那什么时候我们需要用到串口下载呢?我们可以看到这个引脚定义表,34以及38~40是调试端口,他们既可以用来下载程序,也可以作为普通的IO口使用;如果我们在程序中 把这5个端口全部配置成了IO口,那这就坏了,因为这个芯片没有调试端口了,也就下载不了程序了;所以,在你配置这几个端口的时候要小心一点,不要把他们全部都变成普通IO口了,那如果全部变成普通IO口了,下载不进去程序了,这就需要用到串口的方式下载程序了;如果想要使用串口下载,就需要配置BOOT1为0,BOOT0为1;当然串口下载也不光是用来救急的哈,如果你没有STLINK,也灭有JLINK,那就可以使用串口进行下载程序,这样就多了一种下载程序的方式,那有关串口下载是如何操作的,后面会解释;
  • 当BOOT1接1,BOOT0接1,此时配置的是内置SRAM启动,这个模式主要用来进行程序调试的,现阶段用的比较少,我们这次的学习过程也不会用到;

最后,下面还有一段话,是在系统复位后,SYSCLK的第四个上升沿,BOOT引脚的值将被锁定,用户可以通过设置BOOT1和BOOT0引脚的状态,来选择复位后的启动模式;这个意思是,BOOT引脚的值实在上电复位后的一瞬间有效的,之后就随便了;在上一节的引脚定义中,我们可以看到,这个BOOT1和PB2是在同一个引脚上的,也就是在上电的瞬间,是BOOT1的功能,当第四个时钟过之后,就是PB2的功能了;

以上这些计时关于BOOT引脚的部分;看完了引脚定义和BOOT引脚的配置,我们对这个芯片是怎么用的,大概就有思路了。

总结:在引脚定义表里,要想让STM32正常工作,那么首先就需要把电源部分和最小系统部分的电路连接好,也就是引脚定义表中的橙色和蓝色的部分;

2.8 最小系统电路

在这里插入图片描述

一般来说,我们单片机只有一个芯片是无法工作的,我们需要为他连接最基本的电路,那这些最基本的电路就叫做最小系统电路。

1、STM32及供电的部分

在这里插入图片描述

如上图,右边部分是STM32及供电的部分;其中我们可以看到,这三个分区供电的主电源和模拟部分电源都连接了供电引脚,VSS都连接了GND,VDD都接在了3V3,也就是3.3V;在这个3.3V和GND之间,一般都会连接一个滤波电容,这个电容可以保证供电电压的稳定,像我们在设计电路的时候,一般只要遇到供电,都会习惯上的加上几个滤波电容;当然加这个滤波电容也是非常有必要的,大家在自己设计电路的时候可以注意一下。

剩下还有一个VBAT,是接备用电池的,如果需要接备用电池,那就可以选择一个3V的纽扣电池,正极接BVAT,负极接GND就可以了;备用电池是给RTC和备份寄存器服务的;如果不需要这些功能,就不需要接备用电池,那这个VBAT直接接3.3V即可,或者悬空也是没问题的;

以上就是整个供电的部分,可以说STM32的供电还是比较多的,而且芯片四周都有供电引脚,这个要是自己画板子的话,就会深有体会;

2、晶振部分

在这里插入图片描述

接着我们再来看一下晶振部分电路,上图中就是一个典型的晶振电路,在中间接了一个8MHz的主时钟晶振,STM32的主晶振一般都是8MHz,8MHz经过内部锁相环倍频,得到72MHZ的主频,这个晶振的两个引脚分别通过这两个网络标号(OSC IN和OSC OUT),接到STM32的5、6号引脚,另外还需要接两个20pF的电容,作为启震电容,电容的另一端接地即可。

这就是晶振电路,如果你需要RTC功能的话,还需要再接一个32.768KHz的晶振,电路和这个一样,接在3、4号引脚,3、4号引脚上标的OSC32就是32.768KHz晶振的意思;为什么要用32.768KHz呢?因为32768是2的15次方,内部RTC电路经过2的15次方分频,就可以生成1秒的时间信号了。

3、复位电路部分

在这里插入图片描述
这个复位电路是一个10K的电阻和0.1uF的电容组成,它用来给单片机提供复位信号;

其中间的NRST接在STM32的7号引脚,NRST是低电平复位的;当这个复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态,那NRST引脚就会产生低电平;当电容逐渐充满电时,电容就相当于断路,此时NRST就会被R1上拉为高电平,那上电瞬间的波形就是先低电平,然后逐渐高电平,这个低电平就可以提供STM32的上电复位信号;当然电容充电还是非常快的,所以在我们看来,单片机就在上电的一瞬间完成复位了,这就是复位电路的作用

手动复位:
电容左边还并联了一个按键,这个按键可以提供一个手动复位的功能,当我们按下按键时,电容被放电,并且NRST引脚也通过按键被直接接地了,这就相当于手动产生了低电平复位信号;按键松手后,NRST又回归了高电平,此时单片机就从复位状态转为工作状态;平时我们也可以见到这种复位按键,一般在设备上有个小孔,当设备死机并且还不方便断电重启时,我们就可以拿个针戳一下这个小孔里的按键,看这样就会使设备复位了。这就是手动复位的功能,按下按键,程序就从头开始运行的意思。

4、启动配置

在这里插入图片描述
上图是启动配置,H1相当于开关的作用,拨动这个开关,就可以让BOOT引脚选择接3.3V还是GND了。

在我们这个最小系统板上,使用的是如下图所示的跳线帽来充当开关的功能,当跳线帽插在左边两个引脚时,就相当于接地;插在右边两个脚时,就相当于接3.3V;这样就可以配置BOOT的高低电平了;
在这里插入图片描述

5、下载端口

在这里插入图片描述

如果我们使用STLINK下载程序的话,那需要把SWDIO和SWCLK这两个引脚引出来方便接线,另外再把3.3V和GND引出来,这个GND是必须引出来的,3.3V如果你板子自己有供电的话,可以不引,不过建议还是都引出来,这样方便一些;

以上就是关于最小系统电路的内容了。

在资料STM32入门教程资料\模块资料\1-STM32F103C8T6核心板\STM32F103C8T6核心板原理图.pdf中,就是我们这个最小系统板的原理图,可以比较一下跟我们上面所说的最小系统板电路图有何不同。

  • 48
    点赞
  • 384
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘凉~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值