STM32基础理论知识
001–什么是ARM处理器?
定义
ARM:32位处理器(一次处理32bit即4字节。处理速度更快,可调用的内存更大), 是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine(arm公司只卖IP,不生产)
8bit=1Byte,1KB=1024Byte=8*1024bit,1M=1024KB
RISC:精简指令集计算机,硬件设计得简单,复杂的功能用一段子程序来实现, 偏向小型低功耗高性能设备
CISC:复杂指令集计算机,如要求高性能高速度的x86计算机、大型计算机
常见的ARM处理器及其应用
带R:有实时操作系统
带F:支持浮点数运算
实时操作系统:中断到来后立刻终止其他任务响应你
非实时操作系统:如PC机,按下按钮不会立刻响应(游戏时,发送消息,不会关闭游戏甚至可能优先保障游戏的顺畅运行)
常用cortex系列
-
cortex-M0:低成本和简单性能(简单)
-
cortex-M3:性能效率(中端)
-
cortex-M4:有效的数字信号控制(高端)
ARM、单片机、嵌入式系统的区分
ARM:微处理器
单片机/MCU/微控制器:集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统
嵌入式系统:针对特殊任务的专用计算机系统,包括硬件(单片机的电路板卡)和软件(嵌入式操作系统),没有多余的功能。最大的目的是减小尺寸降低成本(电脑是全能的嵌入式系统)
002–什么是STM32?
定义
STM32系列专为要求高性能、低成本、低功耗的嵌入式应用设计的ARM Cortex®-M0,M0+,M3, M4和M7内核 。按内核架构分为不同产品:
主流产品:STM32F0、STM32F1、STM32F3
超低功耗产品:STM32L0、STM32L1、STM32L4、STM32L4+
高性能产品:STM32F2、STM32F4、STM32F7、STM32H7
ST是使用ARM Coretex系统做单片机的最早的公司,做的系列也很全,所以很多使用的大多都是ST公司的。也有很多其他公司使用arm内核
命名规范
BGA封装:单片机引脚一般较多时采用(一般大于200)
LQFP封装(常见)
003–电路基础知识
逻辑电平术语
电平:所谓电平,是指两功率或电压之比的对数,有时也可用来表示两电流之比的对数。电平的单位分贝用dB表示。常用的电平有功率电平和电压电平两类,它们各自又可分为绝对电平和相对电平两种。
- 电平可以看作是一种比较,所以有高低之分,并不是0V就是低电平,5V、3.3V是高电平
- 把电压值人为规定出两种状态,以用在数字(逻辑)电路中
- 作用:传递信号
- 软硬件结合的体现:硬件电路上的高电平在计算机系统中表示为1;低电平表现为0
输入高电压(Vih):逻辑门输入电平高于Vih时,认为输入电平为高电平
输出高电压(Vil):逻辑门输入电平低于Vil时,认为输入电平为低电平
输出高电压(Voh):逻辑门输出为高电平时,电压必须大于Voh
输出地电压(Vol):逻辑门输出为低电平时,电压必须小于Vol
阈值电平电压(Vol):介于高低电平之间的电压值
常见逻辑电平标准
TTL、CMOS、ECL、PECL、LVDS、LVPECL、RS232、RS422、RS485、CML、SSTL、HSTL等,还有用于高速的LVDS、GTL、PGTL、CML、HSTL、SSTL等。
TTL:晶体管-晶体管逻辑集成电路
- 电流控制器件
- TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。
- 为什么VOH大于VIH?
输入过程中因电阻或其他损耗导致电压下降 - 为什么TTL电平可以兼容5V和3.3V?
- TTL输入脚悬空时内部默认高电平
- TTL输出不能驱动CMOS输入
CMOS:互补对称金属氧化物半导体集成电路
- 电压控制器件
- CMOS电路的速度慢,传输延迟时间长(25- 50ns),但功耗低。CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片集越热。
- COMS电路的供电电压在+5~+15V,当输出电压高于VDD-0.5V时为逻辑1,输出电压低于VSS+0.5V(VSS为数字地)为逻辑0
- 当输入管脚高于VCC一定值且电流较大时,可能导致芯片烧毁。
- LVCMOS可以与3.3V的LVTTL直接相互驱动。
STM32数据:
004–GPIO/IO口
GPIO:就是I/O口,为了凸显其功能强大,ST公司将其称作GPIO。几乎所有的I/O口都有其复用功能,且能同时作用(除作模拟输入功能时外)
- 26/37/51/80 个I/O口(封装不同端口数不同),所有的I/O口都可以映象到16个外部中断(每个引脚都可由软件配置成输出(推挽、开漏)或输入(带或不带上拉或下拉))
- 大部分端口兼容5V信号
输入
GPIO_Mode_AIN 模拟输入:模拟信号直接输入
GPIO_Mode_IN_FLOATING 浮空输入:数字信号直接输入
GPIO_Mode_IPU 上拉输入(常用):给I/O口基本的**(初始) **电平状态,在I/O口什么都没接时(I/O口)保持高电平状态(可以使I/O口同时做输入输出)
上拉电阻:连接到电源+极的电阻
下拉电阻:连接到电源-极的电阻
应用举例
使复位接口在复位键未按下时,保持高电平状态
使唤醒接口在唤醒键未按下时,保持低电平状态(不设置内部下拉是因为做PA0使用时会影响)
GPIO_Mode_IPD 下拉输入:同理
输出
GPIO_Mode_OUT_OD 开漏输出:传递高低电平信号,没有驱动能力(给高电平灯不亮)
GPIO_Mode_AF_PP 推挽输出(常用):有电流驱动能力(单片机有吸收和输出电流的能力)
005–存储器
特性对比
SRAM:性能成本高 断电丢失 (PC内存)
FLASH:大容量 数据不会因为断电而丢失(U盘和MP3)
FLASH擦除
- 每次写入前必须要清除数据 (以页的形式),定要先擦后写。
- 每一个地址就是一个存储空间,可以存储一个16位的数据。每个页存1k,共计128K。1KB是1024字节,是8192位。每页是1024个地址,起始地址0x08000000
- 擦除操作以页为单位,写操作则必须以16位宽度为单位,允许跨页写入。
- STM32内置FL ASH擦或写时,必须打开外部/内部高速振荡器。
- FLASH可多次擦写10万次,不可死循环擦写。
- 擦写时要避开用户程序存储区的区域,否则会擦掉用户程序导致错误。
- 擦除一页要10ms (对于1k大小的一页),比较慢。而且不能单个字节的擦写
存放
- code(代码存储区):存放函数体的二进制代码。
- RO-data(只读数据存储区)
- RW-data(读写数据存储区)
- ZI-data(零初始化数据区)
- 栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
- 堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
- 全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
一开始,代码、常量、全局变量 都是下载到flash里的。然后程序开始运行后,全局变量就到sram里了,代码和常量还在flash里
006–倍频、预分频、后分频
倍频
倍频后一般供给CPU用(CPU架构——ARM和x86的构造),而ADC、定时器等不需要高频率,就需要分频器
倍频器一般是PLL(锁相环电路)
预分频器
预分频器一般与计数器连用。没有加预分频器前,输入10次计数器加1,加上预分频器后,输入20次计数器加1
后分频器
输入20次计数器计数为2,通过后分频器减为,效果跟预分频器一样但原理不同
007–低功耗和ADC
低功耗
- stm32的低功耗模式分为三种模式:睡眠、停机、待机
- 有一个电池接口VBAT为RTC和后备寄存器供电
ADC
- 2个12位(精度更高)模数转换器,1us转换时间,多达16个输入通道 (单片机中有16个I/O口可以设置用于读取模数转换后的模拟量电压值)
- 转换范围:0V~3.6V
- 双采样和保持功能(可以同时采集两个通道 的数据并保持)
- 扫描模式下,自动读取并刷新数据
- 可以使用DMA操作(008)
- 温度传感器(读取单片机内部温度,可用于报警)
数字信号只能0V或者3.3V(VCC),内置ADC(转换成模拟信号)后才能读取到0V~3.3V之间的任意电压(数字信号是跳变的)
008–DMA
直接存储器访问
CPU助手:将读取到的数据存入SRAM,CPU可以做其他事,当需要数据时,CPU直接从SRAM里读取
- 7通道DMA控制器
- 支持的外设:定时器、ADC、SPI、I2C、USART
DMA的出现使设备与存储器、存储器与存储器之间的直接通信成为了可能
009–时钟、复位和电源管理
供电范围2.0~3.6
- 可编程电压检测器(PVD):设置当电压小于XX时,复位
晶振:单片机的时钟,产生方波信号
- 内嵌经出厂调校的8MHz的RC振荡器:给ARM内核提供的系统时钟
(RC振荡器:由内部电容电阻产生的振荡器)
-
内嵌带校准的40KHz的RC振荡器:给RTC使用
-
产生CPU时钟的PLL:倍频
(PLL锁相环:大多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率,故利用锁相环路就可以实现稳定且高频的时钟信号。如4M的外部晶振经过PLL分频成三份变为12M)
- 带校准的32KHz的RC振荡器:外接晶振,给RTC使用
内部RC振荡电路等效电路图
外部晶振振荡器等效电路图:
010–调试模式和定时器
调试模式
不用修改一次代码就得下载程序进单片机看效果
- 串行单线调试(SWD)和JTAG接口
SWD只需两个接口,很方便,常用;JTAG要20个接口
定时器
可以做到精准计时,减少CPU工作(同DMA)
- 多达7个定时器
- 3个16位(65535)定时器:输入经过分频后计数,一直记到65535或0
- 1个16位高级定时器:用于电机控制,带死区控制和紧急刹车
- 2个看门狗定时器(独立的和窗口型的)
- 系统嘀嗒定时器:24位自减型计数器
通用定时器(TIMx)
TIM2、TIM3、TIM4
- 可同步运行
- 每个都有一个16位的自动加载递加/递减计数器、一个16位的预分频器、4个独立通道。每个通道都可用于输入捕获、输出比较、PWM和单脉冲模式输出
- 每个定时器都有独立的DMA请求机制
高级控制定时器TIM1
看门狗
- 作用:对CPU进行监控,当CPU电压过低或程序错误等意外,使单片机复位
- 实现:程序定时在看门狗计时完成前发出指令,使其重新计数。若程序出现错误,则看门狗及时完成发出声音
独立看门狗
- 基于一个12位的递减计数器、一个8位的预分频器
- 内部独立的(可运行在停机和待机模式)40KHz的RC振荡器提供时钟,
窗口看门狗
- 一个7位的递减计数器
- 可以自由运行
- 由主时钟驱动
嘀嗒定时器
- 作用于实时操作系统
- 24位的递减计数器
- 自动重加载功能(计数满后自动重装初值,初值可自定义)
- 当计数器为0时产生一个可屏蔽系统中断(延时程序计时)
- 可编程时钟源
- CPU实现多任务处理:执行速度极快且不管是否执行完就跳到下一个
011–通信接口
- 多达9个通信接口
- 2个I2C接口(支持SMBus/PMBus)
- 3个USART接口(支持ISO7816接口<国际通用接口协议>,LIN,IrDA接口(红外线接口)和调制解调控制)
- 2个SPI接口(18M位/秒)
- CAN接口(2.0B主动)
- USB 2.0全速接口
I2总线
- 两个I2C总线接口
- 能够工作于多主模式(主动命令)或从模式,支持标准和快速模式(两种通信协议,快速模式发送速率更快)
- 支持7位或10位寻址(使单片机区分设备进行通信),7位从模式时支持双从地址寻址。内置了硬件CRC发生器/校验器
- 可以使用DMA操作并支持SMBus总线2.0版/PMBus总线
- I2C总线是板级总线,连接线一般不超2米
- I2C的数据线上理论上需要加2K的上拉电阻
- 所有设备与单片机需要共地
通用同步/异步收发器USART
- USART是通用同步/异步收发器(带同步时钟线USART _CK),而UART是通用异步收发器(没有同步时钟线)。最常用的是异步模式,同步模式很少用,所以二者区别不大。
- USART只是一种协议方式,根据不同电平方式分为RS232和RS485等
- 所有的USART接口都可以使用DMA操作
控制器区域网络CAN
- 1个CAN总线
- 没有主从设备的要求(可以是主,可以是从)
- 位速度最高1M位/s
- 11位标识
- 29位扩展帧
- 3个发送邮箱
- 2个FIFO
- 3级14个滤波器
CAN用于汽车、工业的智能设备通信、单元楼门铃
特点:通信速度快、距离远、复杂、稳定、自动查错(当发现有一个CAN设备出问题时,可以自动将其剔除,而不会影响其他设备通信)。
串行外设接口SPI
- 两个SPI
- 用于板级设备通信
- 主从两种模式
- 可全双工和半双工
- 最大速度18M/s
- 用3个预分频器来设置8中频率
- 支持SD卡的读写模式
- 支持DMA
特点:协议简单稳定、速度较快(不需要花时间寻址)
通用串行主线USB
- 1个USB接口
- 设备控制器
- 支持全速2.0,12M位/s
- 有待机和唤醒功能
- 由内部PLL倍频器提供时钟
- 时钟必须由外部高速晶振产生
作用:USB接口用于做PC机的从设备如鼠标、键盘、打印机之类。
012–CRC校验和芯片ID
CRC(循环冗余校验)计算单元
- CRC用于数据正确性校验(使用一个固定的多项式发生器,即硬件电路计算)
- 由一个32位的数据字产生
- 可应用在FALSH检测(防止在读写的时候出错)
- 可用于软件签名及对比
芯片ID
- 96位编码,即24位十六进制数
- 每个芯片编码是唯一的
作用:
- 用来作为产品序列号
- 用来作为密码,提高安全性
- 用来保护程序的不可复制(保护尾款哈哈)
013–APB、AHB
- AHB是高级高性能总线,用于CPU、DMA、DSP的通信
- APB是外围总线,用于内部其他功能的通信
- APB分为高速APB2和低速APB1,高速APB2最高频率是72MHz,低速APB的最高频率为36MHz。
014–接口定义
1~12脚
13~24脚
25~36脚
37~48脚
015–最小系统
烧录完后回到FLASH ISP模式
016–固件库
嵌套的向量式中断控制器NVIC:处理中断,用户自定义中断优先级
核心功能 重要功能 通信功能 附加功能
017–RTC(实时时钟)和后备寄存器
- RTC和后备寄存器通过一个开关供电,在VDD有效时该开关选择VDD供电,否则由VBAT引脚供电。后备寄存器(10个16位的寄存器)可以用于在关闭VDD时,保存20个字节的用户应用数据。
- RTC和后备寄存器不会被系统或电源复位源复位;当从待机模式唤醒时,也不会被复位。
- 实时时钟具有一组连续运行的计数器,可以通过适当的软件提供日历时钟功能,还具有闹钟中断和阶段性中断功能
- RTC的驱动时钟可以有多种输入:可以是一个使用外部晶体的32.768kHz的振荡器、内部低功耗RC振荡器或高速的外部时钟经128分频。
- STM32的RTC只用一个32位计数器来计时,而不是用年月日时分秒的分组寄存器。
- 通过设置可以让这个计数器1秒加1,从0-0XFFFFFFF大约可计时136年。
- 时间起点一般设置为1970-01-01 00:00:00 ( 因现有函数如此定义)
转自:
https://blog.csdn.net/weixin_43998552/article/details/127069767