一.STM32简介

1.STM32是ST公司基于ARMCortex-M内核开发的32位微控制器。CoterMark就是一个内核跑分,跑分越高,性能越好。

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

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

二.STM32的型号

1.STM型号分类

1.分别是高性能系列。主流系列。超低功耗系列和无线系列。高性能的有,比如STM32F2、F4、F7、H7这些。主流系列的有STM32F0、F1、F3这些。

High Performance:高性能系列

Mainstream:主流系列

Ultra-low-power:超低功耗系列

Wireless:无线系

2.ARM介绍

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

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

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

上图蓝色部分是STM32芯片、绿色的是ARM公司设计的,右边橙色部分是LT公司制作的外设。

下图,ARM公司为了应对不同场景,做了Cortex-A、R、M系列。

        蓝色部分为ARM公司以前生产的老版本内核,如ARM7,ARM9,ARM11,这些型号称为经典的ARM处理器。

        Cortex-A系列、 Cortex-R系列、 Cortex-M系列三款子型号用于适用不同的场景。

        Cortex-A系列适用于高端应用型的领域,像苹果、高通、联发科的手机芯片基本上都是采用的ARM内核架构,A系列也是ARM内核中性能最高、发展最快的系列。

         Cortex-R系列和Cortex-M系列应用于嵌入式领域。

        R系列就是RealTime的意思,主要面向实时性很高的场景,比如硬盘控制器。

        M系列就是Microcontroller的意思,主要应用于单片机领域,像STM32,使用的就是M系列的内核

三、本次学习所用STM32介绍

注意:51单片机和USB输出的电压使用的是5V供电,给STM32供电时,如果时5V,需要稳压芯片,把电压降到3.3V,再给STM32供电。

1.外设介绍

嵌套向量中断控制器(NVIC):内核里用于管理中断的设备,比如配置中断优先级。

系统滴答定时器(SysTick):内核里的定时器,主要用来给操作系统提供定时服务,来进行任务切换的功能。STM32是可以加入操作系统的,如FreeRTOS、UCOS等。

复位和时钟控制(RCC):可以对系统的时钟进行配置,以及使能各模块的时钟。在STM32中,其他的这些外设在上电的情况下默认是没有时钟的,不给时钟的情况下,操作外设是无效的,这样的目的是降低功耗。

通用IO口(GPIO):可以用GPIO来点灯,读取按键等功能。

复用IO口(AFIO):它可以完成复用功能端口的重定义,还有中断端口的配置。

外部中断(EXTI):配置好外部中断后,当引脚有电平变化时,就可以触发中断,让CPU来处理任务。

定时器(TIM):这也是整个STM32最常用、功能最多的外设,TIM分为高级定时器、通用定时器、基本定时器三种类型,这个定时器不仅可以完成定时中断的任务,还可以完成测频率、生成PWM波形、配置成专用的编码器接口等功能。其中的PWM波形是电机驱动、舵机驱动最基本的要求。

模数转换器(ADC):STM32内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部连接AD芯片,使用非常方便。

数模转换器(DAC):可以在IO口直接输出模拟电压,是ADC模数转换的逆过程。

直接内存访问(DMA):可以帮助CPU完成搬运大量数据这样的复杂任务。

同步/异步串口通信(USART):平常用的UART是异步串口的意思,这里的USART既支持异步串口,也支持同步串口。

I2C通信和SPI通信:是非常常用的两种通信协议,STM32也内置了他们的控制器,可以用硬件来输出时序波形,使用起来非常高效。

CAN通信:一种通信协议,常用于汽车领域。

USB通信:一种通信协议,常用于鼠标、键盘、U盘等各种电脑外设。

实时时钟(RTC):在STM32内部完成年月日、时分秒的计时功能,可以接外部备用电池,这样即使掉电也能正常运行。

CRC校验:是一种数据的校验方式,用于判断数据的正确性。

电源控制(PWR):可以让芯片进入睡眠模式等状态,来达到省电的目的。

备份寄存器(BKP):这是一段存储器,当系统掉电时,仍可由备用电池保持数据,这个根据需要,可以完成一些特殊功能。

独立看门狗(IWDG)和窗口看门狗(WWDG):当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定。

SD卡接口(SDIO):可以用来读取SD卡。

可变静态存储控制器(FSMC):可以用于拓展内存或者配置成其他总线协议,用于某些硬件的操作。

2.STM32命名规则

3.STM32系统结构划分

1.系统结构可分为如图上四个部分,左上角的是Cortex-M3的内核,内核引出来了三条总线,分别是ICode指令总线,DCode数据总线,System系统总线,其中ICode指令总线和DCode数据总线主要用来连接Flash闪存,Flash里面存储的就是我们编写的程序。ICode指令总线用来加载程序指令,DCode数据总线用来加载数据,比如常量和调试数据。

2.System系统总线就连接到了其他的东西上面,如SRAM,用于存储程序运行时的变量数据;
FSMC本课程的芯片不会用到;
AHB系统总线用于挂载主要的外设,AHB的意思是先进高性能总线,挂载的一般是最基本的或者性能比较高的外设,比如复位和时钟控制这些最基本的电路和SDIO;
再后来就是两个桥接,接到了APB2和APB1两个外设总线上,APB的意思是先进外设总线,用于连接一般的外设,因为AHB和APB的总线协议、总线速度、还有数据传送格式的差异,所以中间需要加两个桥接,来完成数据的转换和缓存,AHB的整体性能比APB高一些,其中APB2的性能又比APB1高一些,APB2一般是和AHB同频率的,都是72MHz,APB1一般是36MHz,所以APB2连接的都是一般外设中稍微重要的部分,具体外设分布如上图。

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

4.存储器映像

1.STM32的寻址范围:2^32=4*2^10*2^10K=4*2^10M=4G

2.地址所访问的存储单元是按字节编址的。

0x0000 0000—-0XFFFF FFFF

3.存储器映射

存储器本身不具备地址信息,给存储器分配地址的过程称为存储器映射。

        

类型 起始地址       存储器 用途
ROM 0X0800 0000 程序存储器Flash 存储C语言编译后的代码
ROM 0X1FFF F000     系统存储器 存储器Bootloader 用于串口下载
ROM 0X1FFF F800 选项字节

存储一些独立于程序代码的配置参数

RAM 0x2000 0000 运行内存SRAM

存储运行过程中的临时变量

RAM 0X4000 0000 外设寄存器 存储各个外设的配置参数
RAM 0XE000 0000 内核外设寄存器 存储内核各个外设的配置参数

ROM:只读存储器,非易失性,掉电不丢失的存储器,(类似与硬盘)

RAM:随机存储器,易失性,掉电丢失的存储器(类似内存)

0是存储Flash、1是SRAM,2是外设的相关地址,3–6是空的,7的内核的外设地址。

空的原因是,并不是所有都可以用的上。

5.寄存器的映射

1.寄存器是特殊的存储器,给寄存器地址命名的过程,就叫做寄存器映射。

寄存器地址:0x400 1080C  —-寄存器名字:GPIO_ODA

直接操作寄存器 寄存器映射在操作
门牌号8888=给东哥送辆帕拉梅拉 东哥=送一辆帕拉梅拉

总线基地址+外设相对于总线基地址偏移量+寄存器相对外设基地址偏移量

总线基地址:

总线 基地址                 偏移量
APBI 0X4000 0000 0
APB2 0X4001 0000 0X1 0000
AHB 0X4001 8000 0X1 8000

外设GPIO基地址:

外设 基地址                偏移量
GPIOA 0X4001 0800   0X800
GPIOB 0X4001 0C00 0XC00
GPIOC 0X4001 1000

0X1000

GPIOD 0X4001 1400 0X1400

GPIOA寄存器地址:

寄存器 地址                 偏移量
GPIOA_CRL 0X4001 0800 0X00
GPIO_CRH 0X4001 0804 0X04
GPIO_IDR 0X4001 0808 0X08
GPIO_ODR 0X4001 080C 0X0C
GPIOA_BSRR 0X4001 0810 0X10
GPIOA_BRR 0X4001 0814 0X14
GPIOA_LCKR 0X4001 0818 0X18

2.我们把很多类型的寄存器抽象成一个模板 

 他们在内存中很连续,规律的排序,我们可以用结构体来描述

 可以便捷的操作类似的寄存器

//以后写代码可以这样写,比如写地址
GPIOX_ODR=0XFFFF;

GPIOB->ODR=0XFFFF;

4.STM32引脚定义表

4.1表格介绍

(1)标红色的是电源相关的引脚,标蓝色的是最小系统相关的引脚,标绿色的是IO口、功能口。

(2)加粗字体的是指优先使用的引脚,没有加粗的IO口,可能需要进行配置或者兼具其他功能。

(3)类型:S代表电源,I代表输入、O代表输出,IO代表输入输出;

(4)IO口电平代表IO口所能容忍的电压,FT表示能容忍5V电压,没有FT的,就只能容忍3.3V电压;

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

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

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

4.2引脚介绍

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

(2)IO口-侵入检测-RTC:
1.IO口可以根据程序输出或读取高低电平;
2.侵入检测可以用来做安全保障的功能,比如你的产品安全性比较高,可以在外壳加一些防拆的触点,然后接上电路到这个引脚上,若有人强行拆开设备,触电就会断开,这个引脚的电平变化就会触发STM32的侵入信号,然后就会清空数据来保证安全;
3.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(10)兼具了WKUP的功能,这个可以用于唤醒处于待机模式的STM32。

(20)IO口-BOOT1引脚:BOOT引脚是用来配置启动模式。

(21、22)IO口

(23、24、35、36、47、48)VSS_1、2、3和VDD_1、2、3都是系统的主电源口,因为STM32内部采用了分区供电的方式,所有供电口会比较多,在使用时,VSS是负极,接GND,VDD是正极,接3.3V。

(25~33)都是IO口

(34、37~40)都是IO口或者调试端口,这些引脚默认的主功能是调试端口,调试端口就是用来调试程序和下载程序的。
STM32支持SWD和JTAG两种调试方式,SWD需要两根线,分别是SWDIO(34)和SWCLK(37);JTAG需要5根线,分别是JTMS(34)、JTCK(37)、JTDI(38)、JTDO(39)、NJTRST(40)。
江科大视频教程使用的是STLINK来下载调试程序,STLINK用的是SWD的方式,所以只需要占用PA13(34)和PA14(37)这两个IO口。在使用SWD的调试方式时,JTAG调试方式的其他引脚可以切换为普通IO口使用,但需要在程序中进行配置,不配置引脚默认的主功能是调试端口。(41~43)IO口

(44)BOOT0:和BOOT1一样,也是用来做启动配置的。

(45~46)IO口

4.3引脚分布

1.电源引脚

基本上以V开头,VDD\VSS,VDDA\VSSA,VREF+\VREF-,VBAT等

VDD\VSS,数字部分电影正、负引脚,为STM32供电。

VDDA\VSSA:模拟部分电路正负引脚,为内部模拟部分供电。

VREF+、VREF:为ADC\DAC供电参考电压,100以上引脚才能用。

VBAT:RTC后备区域供电引脚。

2.晶振引脚

一共两组:OSC_IN\OSC_OUT,  OSC_IN32\OSC_OUT32

OSC_IN\OSC_OUT:外部HSE晶振引脚(高速),用于给STM32提供高精度系统时钟。

OSC_IN32\OSC_OUT32:外部LSE晶振引脚(低速),给STM32内部RTC提供晶振。

内部:HSL\LSI

3.复位引脚:NRST

用于复位STM32,低电平有效。

4.下载引脚

第一种:JTAG,如:PA13,PA14,PA15,PB3,PB4,大多数是JTMS、JTCK引脚,可以仿真,可以调试。占的比较多。

第二种:SWD,如:PA13,PA14,大多数是:SWDIO,SWCLK,可仿真,占的比较少引脚。

第三种:串口1可以。只可以下载。

5.BOOT引脚

BOOT0及BOOT1,启动引脚。

6.GPIO引脚

以字母P开头的都是GPIO引脚。

5.STM32启动配置

1.启动配置:指程序开始运行的位置,一般情况下,程序都是在Flash程序存储器开始执行。

(1)当BOOT0=0,无论BOOT1接什么,启动模式都是主闪存存储器的模式,也就是正常执行Flash闪存里面的程序,这个模式是最常用的模式,一般情况下都是这个模式。

(2)当BOOT0=1,BOOT1=0,为1即接3.3V电源正极,启动模式为系统存储器,即系统存储器被选为启动模式,这个模式就是用来做串口下载程序用的。这个系统存储器存的就是STM32中的一段BootLoader程序,BootLoader程序的作用就是接收串口的数据。然后刷新到主闪存中。

(3)当BOOT0=1,BOOT1=1,配置的启动模式是内置SRAM启动,这个模式主要用来进行程序调试。

5.1STM32最小系统电路

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

STM32及供电:3个分区供电的主电源和左边模拟部分电源都连接了供电引脚,在3.3V和GND之间,一般会连接一个滤波电容,这个电容可以保证供电电压的稳定。

引脚1号VBAT是接备用电池的,可以选择一个3V的纽扣电池,正极接VBAT,负极接GND,备用电池是给RTC和备份寄存器服务的,如果不需要这些功能,就没必要接备份电池。

晶振部分电路:这里接了一个8MHz的主时钟晶振,STM32的主晶振一般都是8MHz,8MHz经过内部锁相环倍频,得到72MHz的主频,晶振上面的两根引脚分别通过两个网络标号,接到STM32的5、6号引脚,另外还需要接两个20pF的电容,作为启震电容,电容的另一端接地即可。

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

复位电路:由一个10k的电阻和0.1uF的电容组成,用来给单片机提供复位信号,中间的NRST接STM32的7号引脚,NRST是低电平复位,当这个复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态,NRST就会产生低电平,当电容逐渐充满电时,电容就相当于断路,此时NRST就会被R1上拉为高电平,上电瞬间的波形就是先低电平,然后逐渐高电平,这个低电平就可以提供STM32的上电复位信号。
电容的左边还并联了一个按键K1,这个可以提供一个手动复位的功能,当我们按下按键时,电容被放电,并且NRST引脚也通过按键被直接接地了,这就相当于手动产生了低电平复位信号;按键松手后,NRST又回归高电平,此时单片机就从复位状态转为工作状态。

启动配置:H1相当于开关的作用,拨动这个开关,就可以让BOOT引脚选择接3.3V还是GND。

在最小系统板上,使用的是跳线帽来充当开关的功能,当跳线帽插在左边两个引脚时(蓝线所指两个引脚),就相当于接地,插在右边两个引脚(红线所指两个引脚),就相当于接3.3V,这样就可配置BOOT的高低电平了。

下载端口:如果是用STLINK下载程序,需要把SWDIO和SWCLK这两个引脚引出来方便接线,另外再把3.3V和GND引出来。

6.STM32最小系统板硬件介绍

6.1 STM32最小系统

1.通常由:主芯片、时钟电路、复位电路、电源电路、BOOT电路、下载电路、扩展电路组成。

2.晶振作用:

(1)提供时钟信号

(2)决定CPU的工作速度

(3)确保外围设备的正常工作,比如串口、定时器、ADC等。

(4)解决电磁兼容性问题

作者:程序加冰

物联沃分享整理
物联沃-IOTWORD物联网 » 深入了解STM32微控制器

发表回复