底层理论基础(单片机)

计算机基础

IO逻辑

计算机系统中的高低电平逻辑1和0,数据在计算机中的存储、传输、运算都是以二进制形式进行的。

数据的传输通过总线真正传递的是电信号,高低电平(0、1)。运算在电路中进行,集成电路中运算。

计算机的组成

输入设备、输出设备、存储器、运算器(ALU)、控制器

01二进制组合 机器码

  1. 输入设备:将其他信号转换为计算机可以识别的信号(电信号 1 0 0 1 )。
  2. 输出设备:将电信号(0、1)转为人或其他设备能理解的信号。
  3. 运算器:CPU对信息处理和运算的部件,常进行算术运算和逻辑运算,其核心是算术逻辑单元ALU,CPU中用各种各样的数字电路搭配成各种各样的运算电路,如:加、减法等。
  4. 控制器:整个计算机的指挥中心
  5. 存储器:存放程序和数据的部件,也是计算机能够实现“存储程序控制”的基础。
    1. ROM(Read Only Memery)只读存储器
      1. 掉电不丢失
      2. 读取速度慢
      3. 硬盘、U盘
      4. 存储程序,ROM也叫程序存储器
    2. RAM(RAndom Memery)随机存储器
      1. 掉电丢失
      2. 速度快
      3. 内存条
      4. 存储临时变量和程序运行产生的数据

总线

总线(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运行

  1. 取指:控制器将PC寄存器中的地址发送给内存,内存将对应地址中的指令传给CPU中的IR指令寄存器

  1. 译码:指令译码器对IR中的指令进行识别,将指令(机器码)解析(翻译)成具体的操作

  1. 执行:根据所要运行操作,进行相应的动作。

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去运行我们想要的动作,该怎么做?

  1. 先拿到CPU对应的指令集
  2. 根据指令集进行指令编配
  3. 编译,将汇编文件转换成机器可以识别的二进制文件
  4. 烧录(下载)机器码到芯片中去

编译流程

gcc编译流程分为四大步骤:

  1. 预处理:展开头文件,替换宏定义 .c
  2. 编译:检查语法错误,有错改错,没错的话生成汇编文件 .s
  3. 汇编:将汇编文件转换为二进制文件
  4. 链接:链接库文件生成可执行文件 --二进制

高级语言 .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的区别?

  1. flash掉电不丢失,SRAM掉电丢失
  2. flash写入次数有限制,SRAM 理论写入无限次
  3. SRAM读写速度更快一些
  4. SRAM一般存放临时变量,flash存放程序--程序存储器
  5. 价格不同

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指令集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B站bilibili视频转文字字幕下载方法

本文将讲述介绍一种使用本地工具如何快速的下载B站的字幕为本地文本文件的方法。 通常获取B站字幕需要在浏览器中安装第三方插件&#xff0c;通过插件获取字幕。随着大模型&#xff0c;生成式AI&#xff0c;ChatGPT的应用&#xff0c;B站也提供了AI小助手对视频的内容进行总结…

ROS+PX4+Gazebo仿真环境配置全流程解析

上一期文章介绍了我们即将发布的仿真平台&#xff0c;并提到后续需要在Ubuntu系统上进行PX4软件在环仿真。本期文章将为大家详细介绍如何配置Ubuntu环境以及安装ROS和PX4仿真环境。具体配置包括&#xff1a;Ubuntu 20.04 ROS Noetic PX4 Python3。 需要注意的是&#xff0c…

基础入门-APP应用微信小程序原生态开发H5+Vue技术WEB封装打包反编译抓包点

知识点&#xff1a; 1、基础入门-APP应用-开发架构安全问题 2、基础入门-小程序应用-开发架构安全问题 通用&#xff1a; 1、反编译-得到源码-源码提取资产&#xff08;泄漏的配置信息&#xff09;-安全测试 2、抓包-资产-安全测试 一、演示案例-移动App-开发架构-原生&H…

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么&#xff1f; Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…

Qt之自定义标题栏拓展(十)

Qt开发 系列文章 - user-defined-titlebars&#xff08;十&#xff09; 目录 前言 一、方式一 1.效果演示 2.创建标题栏类 3.可视化UI设计 4.定义相关函数 5.使用标题栏类 二、方式二 1.效果演示 2.创建标题栏类 3.定义相关函数 4.使用标题栏类 总结 前言 Qt自带…

vue3前端组件库的搭建与发布(一)

前言&#xff1a; 最近在做公司项目中&#xff0c;有这么一件事情&#xff0c;很是头疼&#xff0c;就是同一套代码&#xff0c;不同项目&#xff0c;要改相同bug&#xff0c;改好多遍&#xff0c;改的都想吐&#xff0c;于是就想做一个组件库&#xff0c;这样更新一下就全都可…

学技术学英文:代码中的锁:悲观锁和乐观锁

本文导读&#xff1a; 1. 举例说明加锁的场景&#xff1a; 多线程并发情况下有资源竞争的时候&#xff0c;如果不加锁&#xff0c;会出现数据错误&#xff0c;举例说明&#xff1a; 业务需求&#xff1a;账户余额>取款金额&#xff0c;才能取钱。 时间线 两人共有账户 …

Qt编译MySQL数据库驱动

目录 Qt编译MySQL数据库驱动 测试程序 Qt编译MySQL数据库驱动 &#xff08;1&#xff09;先找到MySQL安装路径以及Qt安装路径 C:\Program Files\MySQL\MySQL Server 8.0 D:\qt\5.12.12 &#xff08;2&#xff09;在D:\qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql下…

CTFHUB-web(SSRF)

内网访问 点击进入环境&#xff0c;输入 http://127.0.0.1/flag.php 伪协议读取文件 /?urlfile:///var/www/html/flag.php 右击查看页面源代码 端口扫描 1.根据题目提示我们知道端口号在8000-9000之间,使用bp抓包并进行爆破 POST请求 点击环境&#xff0c;访问flag.php 查看页…

游戏引擎学习第43天

仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步&#xff0c;探索运动方程&#xff0c;了解真实世界中的物理&#xff0c;并调整它们&#xff0c;以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟&#xff0c;而是找到最有趣…

YashanDB共享集群产品能力观测:细节足见功底

本文基于前泽塔数科研发总监-王若楠2024年11月在“2024年国产数据库创新生态大会”-“根”技术专场的演讲整理形成&#xff0c;主要对崖山共享集群YAC的架构、功能、高可用性、性能四大方面进行全面测试&#xff0c;并分享了测试环境和测试结论。 年初&#xff0c;基于某些商业…

VMware ubuntu16.04怎么设置静态IP联网

1.将VMware桥接到当前电脑使用的网络上面&#xff1b; 2.点击网络符号&#xff0c;编辑连接&#xff1b; 3.双击有线连接1&#xff1b; 4.选择IPv4设置&#xff0c;将地址&#xff0c;子网掩码&#xff0c;网关&#xff0c;DNS服务器设置好&#xff0c;保存&#xff1b; 5.在终…

ElasticSearch的自动补全功能(拼音分词器、自定义分词器、DSL实现自动补全查询、RestAPI实现自动补全查询)

文章目录 1. 什么是自动补全2. 拼音分词器2.1 初识拼音分词器2.2 下载拼音分词器2.3 安装拼音分词器2.4 测试拼音分词器 3. 自定义分词器3.1 拼音分词器存在的问题3.2 分词器&#xff08;analyzer&#xff09;的组成3.3 如何自定义分词器3.4 拼音分词器的可选参数3.5 配置自定义…

Windows环境 (Ubuntu 24.04.1 LTS ) 国内镜像,用apt-get命令安装RabbitMQ,java代码样例

一、环境 Windows11 WSL(Ubuntu 24.04.1) 二、思路 1 用Windows中的Ubuntu安装RabbitMQ&#xff0c;贴近Linux的线上环境&#xff1b; 2 RabbitMQ用erlang语言编写的&#xff0c;先安装erlang的运行环境&#xff1b; 2 用Linux的apt-get命令安装&#xff0c;解决软件依赖…

医学预测模型的网页应用必要模块设计(重制版)

医学预测模型的网页应用必要模块设计&#xff08;重制版&#xff09; 刘岳鹏 摘要&#xff1a; 网页应用&#xff08;Web APP&#xff09;承载医学临床预测模型并在临床实践中实现与用户的互动&#xff0c;必要的功能模块设计将有助于Web APP更好地在临床实践中发挥其功能。在此…

【他山之石】Leading-Trim: The Future of Digital Typesetting:数字排版的未来 —— Leading-Trim

文章目录 【他山之石】Leading-Trim: The Future of Digital Typesetting&#xff1a;数字排版的未来 —— Leading-TrimHow an emerging CSS standard can fix old problems and raise the bar for web apps1. The problem with text boxes today2. How we got here: a histor…

【k8s集群应用】Kubernetes 容器编排系统

文章目录 Kubernetes 容器编排系统背景与发展Kubernetes 基本概念Kubernetes 集群架构与组件Kubernetes 核心组件Master 组件配置存储中心Node 组件 Kubernetes核心概念1. Pod2. Pod控制器3. Label与Label选择器4. Service5. Ingress6. Volume7. Name与Namespace K8S创建Pod资源…

梳理你的思路(从OOP到架构设计)_简介EIT造形

目录 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码结构 <基类/子类>代码结构的变形 2、 从<基类/子类>结构到EIT造形 3、 EIT造形的基本形与变形 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码…

Rust vs C: PNG解码器性能之争的启示

在系统编程领域,C语言一直是性能标杆。但最近一个现象引发了广泛讨论:用 Rust 实现的 PNG 解码器性能竟然超越了 C 语言版本。这个看似反直觉的结果背后,折射出现代编程语言发展的新趋势。 让我们深入解析这个有趣的技术现象。PNG解码本质上是把压缩的图像数据还原成像素数据的…

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…