STM32基础理论知识

  • 001--什么是ARM处理器?
    • 定义
    • 常见的ARM处理器及其应用
    • ARM、单片机、嵌入式系统的区分
  • 002--什么是STM32?
    • 定义
    • 命名规范
  • 003--电路基础知识
    • 逻辑电平术语
    • 常见逻辑电平标准
      • TTL:晶体管-晶体管逻辑集成电路
      • CMOS:互补对称金属氧化物半导体集成电路
  • 004--GPIO/IO口
    • 输入
      • 应用举例
    • 输出
  • 005--存储器
    • 特性对比
    • FLASH擦除
    • 存放
  • 006--倍频、预分频、后分频
    • 倍频
    • 预分频器
    • 后分频器
  • 007--低功耗和ADC
    • 低功耗
    • ADC
  • 008--DMA
  • 009--时钟、复位和电源管理
  • 010--调试模式和定时器
    • 调试模式
    • 定时器
      • 通用定时器(TIMx)
      • 高级控制定时器TIM1
      • 看门狗
        • 独立看门狗
        • 窗口看门狗
      • 嘀嗒定时器
  • 011--通信接口
    • I^2^总线
    • 通用同步/异步收发器USART
    • 控制器区域网络CAN
    • 串行外设接口SPI
    • 通用串行主线USB
  • 012--CRC校验和芯片ID
    • CRC(循环冗余校验)计算单元
    • 芯片ID
  • 013--APB、AHB
  • 014--接口定义
    • 1~12脚
    • 13~24脚
    • 25~36脚
    • 37~48脚
  • 015--最小系统
  • 016--固件库
  • 017--RTC(实时时钟)和后备寄存器

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 ( 因现有函数如此定义)

【STM32入门】STM32基础理论知识相关推荐

  1. 5加载stm32 keil_快速入门STM32单片机-软件篇

    关于这个STM32的编程开发环境Keil,网上有太多相关的资源了,而且大都讲解的非常详细.所以本篇文章无意于深入细节,只会提供我学习时候的一些体会,帮助你更好的掌握相关知识. 1.标准外设库(Stan ...

  2. 高手入门STM32总结+学习步骤

    一.入门总结 1.1为什么要把时间花在"犹豫"上? 每当我们在入门之前(ARM是这样,DSP也一样),总会有很多疑问,会有很多顾虑.我们渴望知道学习STM32前景如何?需要啥基础? ...

  3. 【转载】如何学习STM32?STM32入门学习经验总结

    一.入门总结 1.1为什么要把时间花在"犹豫"上? 每当我们在入门之前(ARM是这样,DSP也一样),总会有很多疑问,会有很多顾虑.我们渴望知道学习STM32前景如何?需要啥基础? ...

  4. STM32入门笔记(02):定时器之定时器中断、输入捕获和PWM输出(SPL库函数版)

    目录 定时器 8个定时器 定时器功能 定时器中断 常用通用定时器的寄存器 定时器中断实验目的: 定时器库函数及步骤 实验程序讲解 PWM 简介 STM32 PWM工作过程 PWM模式1 与 PWM模式 ...

  5. 如何用c语言编写stm32的程序吗,STM32入门C语言详解

    <STM32入门C语言详解>由会员分享,可在线阅读,更多相关<STM32入门C语言详解(6页珍藏版)>请在人人文库网上搜索. 1.最新 料推荐阅读 flash : 芯片内部存储 ...

  6. 从0到1入门STM32最小系统板(0)——前言

    从0到1入门STM32最小系统板--前言 这个系列的文章将从0开始制作一个STM32最小系统板,大概分为如下几个部分: 元件简述: 原理图绘制: PCB布局: 打板焊接: 本篇文章主要讲解一下最小系统 ...

  7. 零基础入门STM32编程(三)

    前情回顾 通过前面两篇文章的学习,我们已经对STM32有了一定的了解,知道了STM32单片机的基本分类和不同产品间的特点等知识,今天起围绕STM32F103xx继续深入浅出地学习单片机编程. 一.总线 ...

  8. 【STM32入门】这个项目绝了,用手势来产生波形,基于手势控制的波形发生器

    大家好,我是张巧龙,之前有给实验室学生出了一道关于STM32的题:基于手势控制的波形产生题,题目简单,但综合性较强. 有些学生完成的还不错,个人觉得此题用来 入门 STM32再合适不过了. 展示视频: ...

  9. micropython安装ros_ROS2与STM32入门教程-microROS的linux版本

    ROS2与STM32入门教程-micro_ros的linux版本 说明: 介绍如何安装使用micro_ros 步骤: 安装ros2版本foxy,查看教程 加载ros2环境 source ~/ros2_ ...

  10. 单片机STM32入门——(1)程序结构

    单片机之STM32入门--(1)程序结构 引言 1.初识单片机 1.1初始配置 1.2程序下载 2.GPIO的使用 2.1资源下载 2.2初始化源代码 3.程序结构 3.1文件的建立 3.2程序结构源 ...

最新文章

  1. 数据表示字面量整型字面量
  2. 致力云安全服务模式 安全狗获近5000万融资
  3. AT3950-[AGC022E]Median Replace【贪心,dp】
  4. JBoss BPM Travel Agency演示与现代BPM数据集成
  5. [渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料
  6. java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解
  7. [matlab]斜阶梯式长条引起的重力异常计算
  8. Modbus教程| Modbus协议,ASCII和RTU帧,Modbus工作
  9. 分布式内存文件系统Alluxio
  10. 测试无损音乐软件,无损音乐一定靠谱?/无损检测方法
  11. sklearn学习——递归特征消除法(RFE)
  12. 目标转化出价多少_浅谈什么是 oCPC 目标转化出价?
  13. 冬瓜哥送你元宵大礼盒啦!!
  14. 【数据说第四期】篮球比赛中的投篮选择
  15. 艾永亮:从小公司到行业龙头,一路披荆斩棘,最后输给了电商
  16. mc服务器地皮系统权限指令,我的世界地皮指令大全
  17. TR-069协议简介
  18. 初识Java ~ (二) # Java 中程序的执行流程,(万字长文)特别细~ 可收藏~
  19. 复旦黄萱菁:顶会也喜欢“搞事情”文章,提示学习等已成为NLP领域的研究重点...
  20. 南宁计算机技术学校排名,南宁职业技术学校,南宁职业技术学校前十名,南宁职业技术学校排名情况一览表 - IT教育频道...

热门文章

  1. 喝杯java冷静一下是什么梗_大哥喝冰阔落是什么梗 喝冰阔落的出处在哪
  2. ps背景不变换字_ps里怎么在不改变背景的前提改变文字
  3. dev、test和staging、prod是什么意思?
  4. html邮件和英文邮件,英文邮件中Best wishes和Best regards的区别
  5. c语言setlocale函数,setlocale函数
  6. 苹果11相机权限开启不了_iOS11 访问相册、相机权限,居然变化了,巨坑啊........
  7. UPD(user datagram protocol)
  8. C#.NET生成条形码(Code39和Code128)
  9. 区块链底层架构概览:第一原则框架
  10. Arduino UNO数据手册(新手入门)