底层理论基础(单片机)
计算机基础
IO逻辑
计算机系统中的高低电平逻辑1和0,数据在计算机中的存储、传输、运算都是以二进制形式进行的。
数据的传输通过总线真正传递的是电信号,高低电平(0、1)。运算在电路中进行,集成电路中运算。
计算机的组成
输入设备、输出设备、存储器、运算器(ALU)、控制器
01二进制组合 机器码
- 输入设备:将其他信号转换为计算机可以识别的信号(电信号 1 0 0 1 )。
- 输出设备:将电信号(0、1)转为人或其他设备能理解的信号。
- 运算器:CPU对信息处理和运算的部件,常进行算术运算和逻辑运算,其核心是算术逻辑单元ALU,CPU中用各种各样的数字电路搭配成各种各样的运算电路,如:加、减法等。
- 控制器:整个计算机的指挥中心
- 存储器:存放程序和数据的部件,也是计算机能够实现“存储程序控制”的基础。
- ROM(Read Only Memery)只读存储器
- 掉电不丢失
- 读取速度慢
- 硬盘、U盘
- 存储程序,ROM也叫程序存储器
- RAM(RAndom Memery)随机存储器
- 掉电丢失
- 速度快
- 内存条
- 存储临时变量和程序运行产生的数据
- ROM(Read Only Memery)只读存储器
总线
总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。
数据总线
(1)是CPU与内存或其他器件之间的数据传送的通道。
(2)数据总线的宽度决定了CPU和外界的数据传送速度。
(3)每条传输线一次只能传输1位二进制数据。如: 8根数据线一次可传送一个8位二进制数据(即一个字节)。
(4)数据总线是数据线数量之和。
地址总线
(1)CPU是通过地址总线来指定存储单元的。
(2)地址总线决定了cpu所能访问的最大内存空间的大小。如: 10根地址线能访问的最大的内存为1024个内存单元,即1024byte
(3)地址总线是地址线数量之和。
字节是存储的基本单位,位是存储的最小单位
8位和32位的区别?
cpu的位数:数据总线的个数
ALU
Arithmetic and Logic Unit 算术逻辑单元
ALU有两个单元,一个算术单元,一个逻辑单元
以算术单元为例:
ALU内部使用了大量的晶体管,这些晶体管合理分布使其能够实现预期功能,相应的,预期功能越大,所使用的晶体管越多。操作可能有很多,比如说加减(乘法可以使用多次加法代替)
使用:如果我们想使用ALU进行加法运算,该如何指定呢?
答:给ALU传一个操作码,一般是4bit,这个操作码就可以表示相应的运算。
假如这ALU是我设计的:
"1010"就代表加命令,"0100"代表减运算
操作码的作用就是告诉ALU你要对输入进行什么样的操作
结果输出:
根据操作码进行了指定的运算,并且输出了很多的标志位。
溢出标志位:比如说是否产生溢出,有溢出的话此位 置1
零标志:运算结果为0时,零位置1;判断两个数是否相等的时候很有用。
提问:如何判断A<B?
负标志位:如果结果是负值,此位置1;这个可以来进行比较,判断A和B的大小,就可以用 A-B,如果运算结束负标志位置1,那就说明A<B;
英特尔74181
1970年发布,是第一个封装在单个芯片内的完整ALU
指令集
CPU所支持的指令的集合
在CPU内需要存储单元来存储临时数据,这个存储单元叫寄存器 R0 R1
举例:(此为方便理解,并不是真实CPU中的指令集)
RISC(Reduce ) 精简指令集
CISC(Complex) 复杂指令集
精简指令集CPU:
体积小、功耗小、性能相对弱、指令集短
复杂指令集CPU:
体积大、功耗大、性能强、指令集长
CPU组成与运行原理
程序由一个一个的操作组成,这些操作叫做指令。
指令告诉CPU接下来要做的事情
比如说是加运算指令,CPU接收到指令后会调用ALU进行加操作
比如说是内存操作指令,CPU接收到指令后会和内存进行通信,做出读写动作
当然,CPU有很多的组件
首先 CPU要运行程序,所以需要一段内存来存放程序然后供CPU去读取程序,或者去存放数据
注:不要再将内存和内存条(RAM)对应了,内存是ROM和RAM的总称
示例内存:
现对指令进行如下定义(自己分配的)
程序刚起步,都是先从0x00开始运行。
在CPU内需要存储单元来存储临时数据,这个存储单元叫寄存器 R0 R1
CPU需要一个寄存器来告知自己下一步要运行的指令是什么----PC(Program counter)程序计数器(存放的是下一条要运行指令的地址)
CPU需要一个寄存器来保存取到的指令 IR (Instruction Reference)指令寄存器
CPU需要一个部件进行译码---->指令译码器
CPU运行
- 取指:控制器将PC寄存器中的地址发送给内存,内存将对应地址中的指令传给CPU中的IR指令寄存器
- 译码:指令译码器对IR中的指令进行识别,将指令(机器码)解析(翻译)成具体的操作
- 执行:根据所要运行操作,进行相应的动作。
CPU时钟
刚刚的例子中 取指-译码-执行三大步是由我们口述执行的,而实际上这种执行的节奏是由CPU中一个"时钟"的东西来负责管理。
"时钟"会以精确的间隔触发电信号,CPU内部存在控制单元,这个控制单元会用这个信号推进CPU的内部操作,确保一切按步骤进行。例如跑步时的“1,2,1”口号,大家步调一致,通过口号来协调运行,口号喊得越快跑得越快。
这个节奏不能太快,因为就算是电也需要一定时间进行传输
CPU取指-译码-执行的速度叫时钟速度,单位是HZ,HZ是频率的表示单位
比如:我们花了6分时间讲了4条指令
总共有12步,360S,一步:30s; F=1/t=1/30 hz=0.03HZ
世界上第一个成品CPU 1971年---->英特尔4004
频率为740KHZ---每秒74万次操作
1Mhz为1s有1百万个时钟周期即 1s可进行1百万次操作
超频
通常所说的超频,就是修改时钟速度,加快CPU的运行速度,能更高的压榨CPU性能
延迟问题
当CPU运行速度很快时,例如现在的CPU动辄运行速度就高达每秒钟上亿条指令,所以很小的延迟都会被放大,甚至有可能会导致系统出现问题。
当CPU去RAM读数据时,RAM需要找地址然后再取数据,再把数据输出
一条"从内存读数据的指令"可能需要多个时钟周期才能完成,这就造成CPU发出指令后下一个时钟周期无法按预定进行,发生CPU空等数据的情况。
所以迫切需要方式来解决延迟
方式一:高速缓存
给CPU加一点RAM叫"缓存",也叫高速缓存----->cache
方式二:指令流水线
知道了CPU的运行原理之后,想控制CPU去运行我们想要的动作,该怎么做?
- 先拿到CPU对应的指令集
- 根据指令集进行指令编配
- 编译,将汇编文件转换成机器可以识别的二进制文件
- 烧录(下载)机器码到芯片中去
编译流程
gcc编译流程分为四大步骤:
- 预处理:展开头文件,替换宏定义 .c
- 编译:检查语法错误,有错改错,没错的话生成汇编文件 .s
- 汇编:将汇编文件转换为二进制文件
- 链接:链接库文件生成可执行文件 --二进制
高级语言 .c文件
汇编语言 .s文件
机器语言 二进制文件(机器码)
DMA总线
DMA(Direct Memory Access)即直接存储器访问,使用DMA总线可以不通过CPU直接在存储器及外设之间进行数据传递。
作用:节省了CPU资源,提高CPU效率。
单片机基础
单片机简介
单片机是单片微型计算机的简称,MCU是Microcontroller的简称,也就是嵌入式微控制器。采用集成电路技术将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、定时器/计时器、多种I/O口和中断系统等功能集成到一块硅片上。可以说单片机就是一个小而完善的微型计算机系统。
单片机型号
51单片机(8051)
STC89C51 宏晶科技 STC AT89C51 ATMEL
32单片机(通常说的就是ARM),32位的
STM32 意法半导体ST GD32 兆易创新GD
开发板/最小系统板
开发板
开发板通常是学习用途,功能比较全,接口丰富,是用于研发、研究、学习的一块板子。
底板
STM32 开发板底板,支持 5V 电源适配器与 TypeC 供电。
提供 RTC 时钟电源,提供三轴加速度与角速度传感器,用于姿态感知。
板载 ESP-12F 无线模组,用于物联网云平台项目开发。
提供 1 路五向按键,采用中断与 A/D 模式采样。
提供 1 路有源蜂鸣器,1 路 2*17P 扩展接口,用于资源扩展板的接入。
核心板接口通过 2.54mm 间距的插针引出,方便用户外接其它设备
显示屏
电容触摸显示屏在很多智能设备上得到应用,提升了设备的交互感。
在开发板套件中使用方型显示屏用来模拟圆形的一个手表项目。显示屏尺寸为 2.8寸,分辨率 320*240(RGB)。
驱动 IC采用 ILI9341,自带 172,800 字节的 GRAM 存储。电容触摸屏采用 I2C 接口,驱动 IC 采用 FT6336G。
资源扩展板
资源扩展板提供基于 I2C 总线的温湿度传感器、环境光感知、心率/脉搏测量。基于模数转换接口的电压/电流采集。
基于 EXTI 事件/中断控制类型的人体红外、光电开关、火焰感知传感器。
基于 SPI 总线的数码管驱动电路。
基于 PWM 控制的风扇、蜂鸣器、震动马达。
基于 GPIO 的按键、LED 指示灯。
基于异步串行通信的 485 总线电平转换。基于控制器局域网总线的 CAN 电平转换等外设。
资源扩展板主要用于微控制器入门外设的使用,硬件图纸原理以及项目案例的应用开发学习。
最小系统板
最小系统板是个核心板,集成了核心的通用功能,可以根据需求定制各种不同的底板,通用性较好。再者核心板作为一块独立的模块被分离出来,也降低了开发的难度,增加了系统的稳定性和可维护性通常用于做项目,也可以作为模块在产品里在直接用。
STM32
简介
STM32是意法半导体公司生产的32位的微型控制器
命名规范
STM32G030C8T6 STM32F051K8U6
STM32U575RIT6
ST | 意法半导体 |
M | 微控制器 |
32 | 32位处理器 |
类型 | F 通用/基础型 foundation G 多用途型 general-purpose L 低功耗 low power H 高性能 High performance S 简单/标准型 Standard U超低功耗 |
系列 | 0 精简系列 1/2/3 增强系列 4/7 高性能系列 |
子型号 | 00/01/02/03/05/07 |
引脚数量 | K/6-32脚 C/8-48脚 R-64脚 V-100脚 Z-144脚 A-168脚 I-176脚 B-208脚 N-216脚 |
存储量 | 6 :32KB 8 : 64KB B :128KB C :256KB D :384KB E : 512KB G :1MB I : 2MB |
封装 | U - UQFN封装 T - TQFP封装 |
工作温度 | 6 - -40 ~ 85度 |
STM32的优势
STM32 | 产品 | STM32 | MCU单片机 | 意法半导体STM | STMCU中文官网
产品型号丰富,可选择性强;
运算速度快,功耗低;
处理器外设接口丰富;
库函数开发体系学习资料多,应用广泛。
STM32系统架构
STM32G0
系统主要由以下几个模块组成 :
● 二个主模块 :
– Cortex-M0+ 内核及先进高性能总线 (AHB bus)
– 通用 DMA (通用的直接存储器存取)
● 三个从模块 :
– 内部 FLASH
– 内部SRAM
– AHB和AHB到APB的连接桥,挂在APB总线上和AHB的外设
stm32存储器
ROM(只读存储器)
掉电不丢失,掉电保护。
PROM(可编程的ROM)--可以烧入二进制文件,但是只能烧入一次。
EPROM(可擦除可编程的ROM):理论上可以烧入无数次,但是擦除的条件比较苛刻,需要紫外线照射。
EEPROM(电子可擦除可编程的ROM):擦除方便,但是写入速度慢一些。
Flash:结合了ROM和RAM的优点,因为其掉电不丢失特性,属于ROM,但其结合了RAM的特性,存储写入速度很快,缺点:贵,写入次数有限制
RAM(随机存储器)
特点:掉电丢失
SRAM(Static)静态RAM:现存的存储速度最快的存储器,缺点:贵
问:flash和SRAM的区别?
- flash掉电不丢失,SRAM掉电丢失
- flash写入次数有限制,SRAM 理论写入无限次
- SRAM读写速度更快一些
- SRAM一般存放临时变量,flash存放程序--程序存储器
- 价格不同
ARM体系结构
STM32U575RIT6采用ARM Cortex-M33内核架构
面试题:谈谈你对ARM 的认识?
公司名称
ARM代表一个公司
安谋国际科技股份有限公司_百度百科
ARM是一家公司,ARM公司是一家芯片知识产权(IP)供应商,它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。
ARM可以表示一些处理器的统称
早期经典处理器:ARM7 ARM9 ARM11
后续处理器开始以cortex命名
Cortex-X系列 超高性能系列
Cortex-A系列
针对开放式操作系统的高性能处理器
应用于智能手机、数字电视、智能平板等高端运用
Cortex-R系列
提供非常高的性能和吞吐量,同时保持精准的时序属性和可预测的中断延时,通常用于时序关键的应用中
针对实时系统、满足实时性的控制需求
应于汽车制动系统、动力系统等
Cortex-M系列
为单片机驱动的系统提供了低成本优化方案
应用于传统的微控制器市场、智能传感器、汽车周边、物联网设备等
STM32G030采用ARM Cortex-M0+内核架构
STM32U575采用ARM Cortex-M33内核架构
M33内核详情:
https://www.st.com.cn/content/st_com/zh/arm-32-bit-microcontrollers/arm-cortex-m33.html
ARM也可以代表一种指令集---属于精简指令集
thumb指令集是对ARM的再次精简,ARM指令集32位,Thumb指令集16位
Cortex-M33的寄存器
通用寄存器 一个寄存器存储32位
R0-R12:13个通用寄存器。其中 R0-R7为低端寄存器,可作为16位或32 位指令操作数,R8-R12为高端寄存器,只能用作32位操作数
R13:栈指针寄存器 SP(the stack pointer),Cortex-M0 在不同物理位置上存在两个栈指针,主栈指针 MSP(main ),进程栈指针 PSP。
在处理模式下,只能使用主堆栈,在线程模式下,可以使用主堆栈也可以使用进程堆栈。 系统上电的默认栈指针是MSP。这样设计的目的是为了在进行模式转换的时候,减少堆栈的保存工作。同时也可以为不同权限的工作模式设置不同的堆栈。
R14:链接寄存器LR(the Link Register),用于存储子程序或者函数调用的返回地址
R15:程序计数器PC(the Program Counter register)存储下一条将要执行的指令的地址。
特殊寄存器(了解)
xPSR:组合程序状态寄存器,该寄存器由三个程序状态寄存器组成
应用程序状态寄存器 (APSR):保存程序计算结果的状态标志 N负数标志 Z零标志 C进位借位标志 V溢出标志
中断程序状态寄存器 (IPSR):包含当前ISR(中断服务程序)的异常编号
执行程序状态寄存器 (EPSR):包含Thumb状态位 ---->运行Thumb指令集