【嵌入式软件-STM32】STM32简介

发布于:2024-10-13 ⋅ 阅读:(12) ⋅ 点赞:(0)

目录

        一、STM32定义

        二、STM32用途

        三、STM32特点

        四、STM32 四个系列

        五、了解ARM

        六、芯片解释

        七、片上资源

        八、命名规则

        九、系统结构

        内核

        Flash

        DMA

        外设种类和分布

        十、引脚定义

        类型

        名称

        引脚

        十一、启动配置

        十二、STM32最小系统电路

                STM32及供电

        供电引脚

        滤波电容

        VBAT

        晶振

        复位

        启动配置(BOOT配置电路)

        下载端口

        十三、最小系统板实物图


tips:以下都是自己在网课学习整理的总结跟归纳~可能有自己偏向(就是详略啦~)ヾ(◍°∇°◍)ノ゙(嗯哼 因为大部分都是网课内容而已 主要是拿来自用而已~ 所以感兴趣可以自己去看同款江协网课——

简介

一、STM32定义

基于ARM Cortex-M内核开发的32位微控制器

二、STM32用途

智能车——循迹小车: 读取光电传感器/摄像头数据——驱动电机前进和转弯

无人机——读取陀螺仪加速计的姿态数据、根据控制算法去控制电机的速度——保证飞机稳定飞行

机器人——驱动舵机、控制机器人关节——让机器人运动

无线通信——连接上一些2.4G无线模块或蓝牙、WIFI模块——无线通信功能

物联网——借助无线模块来通信(如蓝牙、WIFI、ZigBee),STM32驱动继电器来控制220V电路的通断

工业控制——PLC,工厂用来进行工业控制

娱乐电子产品——爱心流水灯等(也可以弄lysk语音交流传输)

三、STM32特点

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

四、STM32 四个系列

高性能系列、主流系列、超低功耗系列、无线系列

CoreMark——内核跑分,跑分越高性能越好;

五、了解ARM

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

(所以芯片可以理解为 基于各内核与完整电路连线组成)


ARM系列:1)经典系列 ARM1 ~ ARM11

                   2)Cortex-A  性能最高,发展最快

                        Cortex-R(Real Time)面向实时性很高的场景

                        Cortex-M(Mircrocontroller)主要用于单片机领域(such STM32)

六、芯片解释

RAM:运行内存    实际存储介质SRAM

ROM:程序存储器 实际存储介质Flash闪存

与51不同,51为5V供电,不能直接给STM32供电,若用5V,则需加稳压芯片,把电压降到3.3V再给STM32供电

自画板子的话,则需了解封装

七、片上资源

NVIC 与 SysTick 为Cortex-M3内核里的外设,其余为内核外的外设

NVIC -嵌套向量中断控制器:用于管理中断的设备,比如配置中断优先级等东西

SysTick-系统滴答定时器:用于给操作系统提供定时服务的(Delay函数的功能)(STM32 可加入操作系统,如FreeRTOS、UCOS等,如果用操作系统,就需要SysTick提供定时来进行任务切换的功能)

RCC-复位和时钟控制:对系统的时钟进行配置,使能各模块的时钟(其他外设在上电的情况下,默认是没有时钟的,不给时钟的情况下,操作外设是无效的,外设不会工作,这样目的是降低功耗;所以在操作外设之前,必须要先使能它的时钟,用RCC完成时钟的使能)

GPIO—通用IO口:可用于点灯、读取按键等(最基本的功能)

AFIO-复用IO口:完成复用功能端口的重定义,还有中断端口的配置

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

TIM—定时器:最常用、功能最多的外设分高级定时器,通用定时器,基本定时器三种;最复杂->高级定时器,常用->通用定时器;不仅可以完成定时中断,还可以完成测频率、生成PWM波形(电机驱动、舵机驱动最基本的要求)、配置成专用的编码器接口等功能

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

DMA—直接内存访问:可帮助CPU完成搬运大量数据这样的繁杂任务

USART—同步/异步串口通信:平时用的UART是异步串口的意思;此处USART既支持异步串口,也支持同步串口;

I2C—I2C通信:(与SPI为)两种常用的通信协议。STM32中配置了它们的控制器,可以用硬件来输出时序波形,使用起来高效;(用通用IO口来模拟时序波形也可以)

SPI-SPI通信:通信协议

CAN-CAN通信:通信协议,一般用于汽车领域

USB—USB通信:通信协议,可做模拟鼠标、模拟U盘等设备

RTC-实时时钟:在STM32内部完成年月日、时分秒的计时功能,可接外部备用电池,计时掉电也能正常运行

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

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

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

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

WWDG-窗口看门狗:同上

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

SDIO-SD卡接口:可以用来读取SD卡

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

USB OTG-USB主机接口:用OTG功能,可以让STM32作为USB主机去读取其他USB设备

八、命名规则

fd046481a08d4070aa5356c73a64f5aa.jpg

九、系统结构

09e5fad56513400795cd9dfed74e55fa.jpg

可以将系统分成四部分:内核、Flash、DMA、外设种类和分布

内核

连接着 三条总线
ICode-指令总线:用来加载程序指令的

DCode-数据总线:用来加载数据的(如常量、调试数据)

ICode 与 DCode 主要用来连接Flash闪存

System—系统总线

Flash

存储的为用户编写的程序

DMA

DMA,可以看作内核CPU的“小秘书”;

如有大量的数据搬运,让CPU来干则有点浪费时间,如有个外设ADC模数转换,这个模数转换可以配置成连续模式,用CPU会费时费力,影响CPU正常工作
DMA:负责简单且反复要干的事情,如数据搬运

2) DMA解析:

DMA通过DMA总线连接到总线矩阵上,可以拥有和CPU一样的总线控制权,用于访问外设;当需要DMA搬运数据时,外设会通过请求线发送DMA请求,然后DMA就会获得总线控制权,访问并转运数据(整个过程不需要CPU参与,省下了CPU的时间来干别的事情)

外设种类和分布

SRAM:用于存储程序运行时的变量数据

AHB系统总线(AHB-先进高性能总线):用于挂载主要的外设,挂载的一般是最基本的或性能比较高的外设

APB(APB-先进外设总线):用于连接一般的外设

1)桥接:

因为AHB和APB的总线协议、总线速度还有数据传送格式的差异,所以中间需要加两个桥接,来完成数据的转换和缓存

差异:

(AHB的整体性能比APB高一些,APB2性能比APB1高一些,APB2一般是和AHB同频率,都是72MHz,APB1一般是36MHz)

(所以APB2连接的都是一般外设中稍微重要的部分 如GPIO端口,还有一些外设的1号选手等 如UASRT1、SPI1、TIM1、TIM8(TIM8和TIM1一样,也是高级定时器,所以也是重要的外设)、还有ADC、EXTI、AFIO也是接在APB2上面的)

(其他的像2、3、4、5号外设、DAC、PWR、BKP等次要一点的外设都会分配到APB1上去)

十、引脚定义

(黑点左边为1号引脚,引脚按逆时针依次排序,直至48号引脚)

标红色的为电源相关的引脚;标蓝色的为最小系统相关的引脚;标绿色的为IO口、功能口引脚

类型:

        S——电源

         I——输入

        O——输出

        I/O——输入输出

名称:

I/O口电平:代表I/O口所能容忍的电压,FT——代表能容忍5V电压,无FT则只能容忍3.3V电压;若无FT的要接5V电平的,需要加装电平转换电路

主功能:上电后默认的功能,一般与引脚名相同,但引脚的实际功能以主功能为主,而非引脚名称的功能

默认服用功能:为I/O口上同时连接的外设功能引脚,在配置I/O口中可以选择通用I/O口或是复用功能

重定义功能:如果有两个功能同时复用在了I/O口上,而确实两个功能都需用到的话,可以把其中一个复用功能重映射到其他端口上,前提为重定义功能表里有对应的端口

引脚:

01.VBAT:备用电池供电的引脚,可接3V电池;当系统电源断电时,备用电池可以给内部的RTC时钟和备份寄存器提供电源

02.PC13-TAMPER-RTC:为I/O口,或侵入检测,或RTC;

        I/O口可根据程序输出或读取高低电平(最基本最常用的功能);

        侵入检测可用来做安全保障的功能,如产品安全性比较高,可在外壳加一些防拆的触点,接电路到该引脚上,若有人强行拆开设备,触点断开,该引脚的电平变化会触发STM32的侵入信号,然后会清空数据来保证安全;(可以理解为 有异常波动即立刻清空)

        RTC引脚可用来输出RTC校准时钟、RTC闹钟脉冲或秒脉冲

03.PC14-OSC32_IN  

&04.PC15-OSC32_OUT:是I/O口或接32.768KHz的RTC晶振

05.OSC_IN

&06.OSC_OUT:接系统的主晶振,一般为8MHz,芯片内部有锁相环电路,可以对这个8MHz的频率进行倍频,最终产生72MHz的频率,作为系统的主时钟

07.NRST:系统复位引脚,N代表低电平复位

08.VSSA

&09.VDDA:内部模拟部分的电源,如ADC、RC震荡器等;VSS为负极,接GND,VDD为正极,接3.3V;

10.PA0-WKUP

&11.PA1  &12.PA2  &13.PA3  &14.PA4  &15.PA5  &16.PA6  &17.PA7  &18.PB0

&19.PB1:都为I/O口,其中PA0兼具了WKUP的功能,可用于唤醒处于待机模式的STM32

20.PB2:是I/O口,或BOOT1引脚;BOOT引脚是用来配置启动模式的

(比起20号引脚(未加粗),更推荐使用10~19号以及21、22号引脚等(加粗),因为未加粗的I/O口可能需要进行配置或者兼具其他功能,使用时需要留意一下)

21.PB10 

&22.PB11:为I/O口

23.VSS_1  &24.VDD_1

35.VSS_2  &36.VDD_2

47.VSS_3  &48.VDD_3:都为系统的主电源口;VSS为负极,VDD为正极

STM32内部采用了分区供电的方式,所以供电口比较多,使用时,VSS接GND,VDD接3.3V即可

25.PB12  &26.PB13  &27.PB14  &28.PB15  &29.PA8  &30.PA9  &31.PA10  &32.PA11 

&33.PA12:都为I/O口

34.PA13  &37.PA14  &38.PA15  &39.PB3

&40.PB4:为I/O口或调试端口,默认主功能为调试端口,调试端口是用来调试程序和下载程序的

STM32支持SWD和JTAG两种调试方式,SDW需要两根线,分别是SWDIO和SWCLK;JTAG需要五根线,分别是JTMS、JTCK、JTDI、JTDO、NJTRST;

(本教材使用的事STLINK来下载调试程序,STLINK用的是SWD的方式,即只需占用34号PA13与37号PA14两个I/O口即可,在使用SWD调试方式时,剩下的PA15、PB3、PB4可以切换为普通I/O口来使用,但要在程序中进行配置,不配置的话默认是不会用作I/O口的)

41.PB5  &42.PB6  &43.PB7  &45.PB8 

&46.PB6:都为I/O口

44.BOOT0:同BOOT1一样,也是用来做启动配置的

十一、启动配置

即为BOOT0 与 BOOT1 两个引脚的功能

启动配置的作用:指定程序开始运行的位置,一般情况下,程序都是在Flash程序存储器开始执行,但在某些情况下,可以让程序在别的地方开始执行,用以完成特殊功能

如表6:

BOOT0接0(即接地),无论BOOT1接什么,启动模式都是主闪存存储器,即主闪存存储器被选为启动区域,也就是正常执行Flash闪存里面的程序(一般情况下最常用的模式)

BOOT1接0(即接地),BOOT0接1(即接3.3V电源正),启动模式都是系统存储器,即系统存储器被选为启动区域

该模式是用作串口下载用的

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

(一般需要串口下载程序的时候会配置到这个模式上;①救急:若将以下五个端口全配置为I/O口,该芯片没有调试端口,下载不了程序,则这种情况就需要用串口的方式下载程序了;②没有STLINK,也没有JLINK,则可以使用串口来进行下载程序,多了一种下载程序的方式)

BOOT1接1(即接3.3V电源正),BOOT0接1(即接3.3V电源正),配置的是内置SRAM启动

该模式主要用来进行程序调试,用得少;

tips:

BOOT引脚的值是在上电复位后的一瞬间有效,之后可随便了;引脚定义中,BOOT1和PB2是在同一个引脚上(20.PB2),即上电的瞬间是BOOT1的功能,当第4个时钟过后就为PB2的功能了

十二、STM32最小系统电路

STM32及供电

        供电引脚

         该3个分区供电的主电源(如下图)

        与模拟部分电源(如下图)都连接了供电引脚(VSS->GND,VDD->3V3)

       

       滤波电容

        对于供电非常必要,连接在VSS与VDD之间,可以保证供电电压的稳定

        VBAT

        接备用电池,备用电池是给RTC和备用寄存器服务的,如不需这些功能则不用接备用电池,VBAT直接接3.3V或悬空即可

        如接3V的纽扣电池(如下图),正极接VBAT,负极接GND

晶振

接了8MHz的主时钟晶振,STM32的主晶振一般都为8MHz,8MHz经过内部锁相环倍频,得到72MHz的主频;

晶振的两个引脚分别通过这两个网络标号,连接到STM32的5、6号引脚;

另外还需要接两个20pF的电容,作为启震电容,电容的另一端接地即可;

如果需要RTC功能的话,还需要再接一个32.768KHz的晶振,电路和这个一样,接在3、4号引脚(OSC32就是32.768KHz晶振的意思,32768=2^{15},内部RTC电路经过2的15次方分频,就可以生成1秒的时间信号了)

复位

图为上电瞬间的波形

该复位电路是由一个10k的电阻0.1uF的电容组成(uF-微法),用来给单片机提供复位信号;

NRST接在STM32的7号引脚,NRST为低电平复位,即当该复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态,那NRST引脚会产生低电平;当电容逐渐充满电时,电容相当于断路,此时NRST就会被R1上拉为高电平,上电瞬间的波形为“先低电平,逐渐上拉为高电平”,其中的低电平就可以提供STM32的上电复位信号

(由于电容充电速度快,所以宏观来看,单片机在上电的一瞬间复位了)

电容左边并联了一个按键,可以提供手动复位的功能,当按下按键时,电容被放电,并且NRST引脚也通过按键被直接接地了,相当于手动产生了低电平复位信号;按键松手后,NRST又回归高电平,此时单片机就从复位状态转为工作状态

(复位按键平时一般在设备的小孔上,当设备死机且不方便断电重启时,可以拿针戳一下小孔里的按键,就可以使设备复位了,即为手动复位功能,按下按键,程序就从头开始运行)

启动配置(BOOT配置电路)

H1相当于开关的作用,拨动这个开关,就可让BOOT引脚选择接3.3V或是GND了

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

如若自己设计电路的话,接一个拨码开关也是没问题的,比插跳线帽要方便一些

跳线帽 插左边两个脚=接地

跳线帽 插右边两个脚=接3.3V

下载端口

如果是用STLINK下载程序,则需要把SWDIOSWCLK这两个引脚引出来方便接线

另外需把3.3VGND引出来,GND是必须引出来的,如果板子自己有供电的话,3.3V可以不引(但建议都引出来,方便一点)

十三、最小系统板实物图

(正面)

黑色芯片-STM32F103C8T6

左边两个跳线帽,用来配置BOOT引脚

复位按键

USB接口,可以进行USB通信,也可以为板子供电

8MHz的主时钟晶振

32.768KHz的RTC晶振

两个LED,上面为PWR电源指示灯,下面为接在PC13口的测试灯

SWD的调试接口,用来下载程序的

上下两排为用于接线的排针

(背面)

5个脚小芯片-3.3V稳压芯片

其余为电阻电容这些小元件