嵌入式开发 --- 51单片机与ARM核心知识

一、计算机五大组成

**1. 控制器:**负责指挥和协调计算机各部件工作。

**2. 运算器(CPU):**完成数据运算和指令处理。

**3. 存储器:**分为内存和外存,用于存放程序和数据。

**4. 输入设备:**鼠标、键盘、耳机等,用于向计算机输入信息。

**3. 嵌入式系统特点:**低成本、低功耗、体积小。

**ARM 授权模式:**ARM 公司负责设计 CPU 芯片并授权给厂商,如 Philips、NXP、飞思卡尔、三星、华为、Atmel 等,由这些厂商生产开发板(如 imx6ull)。

二、软件与硬件知识体系

软件部分

  • **C语言:**编程语法
  • **数据结构:**操作数据的方法
  • **Linux系统编程:**Linux 操作系统软件功能实现(文件系统、多任务调度、网络、内存管理)

**Linux 内存分区(1G 内核区 + 3G 用户空间):**内核区、栈区、堆区、数据区、文本区。

硬件部分

  • **51单片机:**硬件基本概念、原理图、寄存器、外设操作、硬件调试能力(万用表、示波器、逻辑分析仪)
  • ARM:
    • 裸机:汇编、启动代码、寄存器、外设操作
    • 驱动(OS,Linux 操作系统):驱动程序开发
  • **STM32:**HAL 库

三、51单片机基础

1. 51单片机简介

51单片机是8位单片机。1980年,Intel 推出 MCS-51 系列,其中 8051 型号单片机主要用于控制领域。Intel 将 8051 单片机授权给多家厂商:

  • **Atmel:**AT89C51
  • **Philips:**P89V51(ISP 在线编程)
  • **STC:**STC89C52、STC89C52RC

2. 最小系统

**最小系统:**能够使单片机正常工作所需要的最少的器件,包括电源、晶振、复位。

**晶振:**为单片机工作提供频率/节拍。

  • 11.0592MHZ:用于串口波特率
  • 12.000MHZ:用于定时器

3. 开发板组成

**底板型号:**HC6800-MS(普中51-MS)

**单片机芯片型号:**STC89C52、STC89C52RC(512byte RAM,但只有256可用)

**片内外设:**CPU、8051 RAM、ROM、GPIO、UART、TIMER、INTERRUPT

**片外外设:**LED、BEEP、KEY

四、处理器概念

1. CPU 与 MCU

  • **CPU(Central Processing Unit,中央处理器):**完成数据运算和指令处理。
  • **MCU(Micro Controller Unit,微控制器):**集成度高,将所有功能集成到同一块芯片中,成本低,应用在简单控制领域。
  • **MPU(Micro Processing Unit,微处理器):**集成度低,只有一块单独的 CPU 芯片,需要外接功能模块,成本高,应用于复杂领域。

2. 专用处理器

  • **GPU(Graphics Processing Unit,图形处理器):**用于图形处理、图像渲染。
  • **NPU(Neural Processing Unit,神经网络处理器):**用于 AI 推理、AI 加速、神经网络处理、卷积运算(如达芬奇 NPU,Mate60 AI 拍照优化)。
  • **FPU(Floating Point Unit,浮点数运算单元):**完成浮点数运算,集成在 CPU 内部。
  • **SOC(System On Chip,片上系统):**将多个功能芯片集成到一块芯片,体积小、功耗低,支持 Linux。

3. 显卡组成

  • **GPU:**处理图像数据
  • **显存:**存放图像数据
  • **电源模块:**为 GPU 供电
  • **散热系统:**解决 GPU 发热
  • **对外输出显示接口:**HDMI、VGA,连接显示器

五、频率与时间单位

1. 频率单位换算

单位 换算关系
HZ 基础单位
KHZ 1KHZ = 10^3HZ
MHZ 1MHZ = 10^3KHZ = 10^6HZ
GHZ 1GHZ = 10^3MHZ = 10^9HZ
THZ 1THZ = 10^3GHZ = 10^12HZ

**换算规律:**大频率转小频率乘进率,小频率转大频率除进率。

**示例:**频率 2.1GHZ × 10^9 = 2,100,000,000HZ。

2. 时间单位换算

单位 换算关系
ns 基础单位
us 1us = 10^3ns
ms 1ms = 10^3us = 10^6ns
s 1s = 10^3ms = 10^6us = 10^9ns

**时间与频率关系:**呈倒数关系。示例:时间 = 1 / 2,100,000,000 = 0.5ns。

六、存储器概念

1. 内存与外存

  • **内存:**存放程序运行过程中的变量,掉电数据丢失,读写速度快,价格贵(内存条)。
  • **外存:**存放程序、代码、指令,掉电数据不丢失,读写速度慢,价格便宜(硬盘)。

**程序执行流程:**a.out 从外存加载到内存,CPU 与内存交互,运算结果写回外存。

2. RAM 与 ROM

  • **RAM(Random Access Memory,随机访问存储器):**存放单片机程序运行过程中的变量,可随机访问。
  • **ROM(Read Only Memory,只读存储器):**存放单片机程序、代码、指令(8KB)。

3. CPU 与 RAM 交互的三大总线

  • **地址总线:**CPU 通过地址总线寻找 RAM 中变量的地址,寻址范围 2^8(单向)。
  • **数据总线:**CPU 通过数据总线与 RAM 进行数据传输(双向)。
  • **控制总线:**CPU 通过控制总线发送控制指令(双向)。

CPU 与 RAM 交互流程(以 int a = 4; a++; 为例)

  1. CPU 通过控制总线向 RAM 发送读指令
  2. CPU 通过地址总线寻找 RAM 中变量地址
  3. RAM 通过数据总线将变量值发送给 CPU
  4. CPU 负责数据运算
  5. CPU 通过控制总线向 RAM 发送写指令
  6. CPU 通过地址总线寻找 RAM 中变量地址
  7. CPU 通过数据总线将运算结果存入 RAM

**ROM 执行流程:**ROM 中存放 instruction1、instruction2、instruction3 等指令,CPU 通过译码器翻译指令后执行。

七、51单片机引脚与寄存器

1. 引脚分组

51单片机将40个引脚划分为4组:P0 - P3,每一组分别有8个引脚。

2. 网络编号

**网络编号:**本质是一根导线,为了避免复杂物理连线,相同编号的引脚在实际电路中彼此互连。

3. 外设寄存器

**外设寄存器:**能够操作硬件,具有固定地址的空间。

c 复制代码
#define P2 *((unsigned char *)0xA0)
P2 = 0xFF;
P2 = 0x00;

对于一个二进制数0000 0000,最左侧bit7(MSB)为高数据位,最右侧Bit0(LSB)为地数据位

八、位运算

1. 按位或(|)

将两个二进制数对应位进行比较,如果全为0,则结果为0;如果有一个 bit 为1,则结果为1。

c 复制代码
char t = 0xF4;  // 1111 0100
char n = 0x32;  // 0011 0010
t | n: 1111 0110  0xF6

应用场景: 指定位置1,其余位不变:t |= (1 << n);

2. 按位与(&)

将两个二进制数对应位进行比较,如果全为1,则结果为1;如果有一个 bit 为0,则结果为0。

c 复制代码
char t = 0xF4;  // 1111 0100
char n = 0x32;  // 0011 0010
t & n: 0011 0000  0x30

应用场景: 指定位清0,其余位不变:t &= ~(1 << n);

3. 按位取反(~)

将二进制数每一位进行翻转。

c 复制代码
char t = 0xF4;  // 1111 0100
char n = 0x32;  // 0011 0010
~(t & n): ~(0011 0000) -> 1100 1111  0xCF

4. 按位异或(^)

将两个二进制数对应位进行比较,相同为0,相异为1。

c 复制代码
char t = 0xF4;  // 1111 0100
char n = 0x32;  // 0011 0010
t ^ n: 1100 0110  0xC6

5. 按位左移(<<)

将二进制数左移 n 位,低位补0。

6. 按位右移(>>)

右移分为逻辑右移、算术右移、循环右移。

7. 位运算示例

c 复制代码
unsigned char P2 = 0x00;  // 0000 0000 -> 0000 0001
// bit0置1,其余位不变:
P2 |= (1 << 0);
// bit7置1,其余位不变:
P2 |= (1 << 7);
// bit2和bit3置1,其余位不变:
P2 |= (1 << 2) | (1 << 3);

unsigned char P2 = 0xFF;  // 1111 1111
// bit0清0,其余位不变:
P2 &= ~(1 << 0);
// bit6清0,其余位不变:
P2 &= ~(1 << 6);

九、电阻数字标注法

**数字标注法:**将数字的前两位/三位作为有效数字,最后一位作为10的几次方。

标注 计算 阻值
102 10 × 10^2 1000Ω = 1KΩ
103 10 × 10^3 10KΩ
1001 100 × 10^1 1KΩ

十、外设显示

1. LED

**1. LED 用到的寄存器:**P2 寄存器。通过向 P2 寄存器写入高低电平,即可控制对应引脚上的 LED 点亮或熄灭。

2. 共阳极发光二极管与共阴极发光二极管的区别:

  • **共阳极发光二极管:**所有 LED 的阳极(正极)共同接高电平(VCC),阴极(负极)分别接到单片机引脚。当引脚输出低电平时,LED 两端形成电压差而点亮;输出高电平时熄灭。
  • **共阴极发光二极管:**所有 LED 的阴极(负极)共同接地(GND),阳极(正极)分别接到单片机引脚。当引脚输出高电平时,LED 两端形成电压差而点亮;输出低电平时熄灭。

**总结:**共阳极 LED 低电平点亮,共阴极 LED 高电平点亮。因此在使用共阳极 LED 时,置 0 点亮;使用共阴极 LED 时,置 1 点亮。

2. 数码管显示

(1)4位共阴极数码管

每一位数码管可以单独显示一个数值,同一时刻只有一位数码管进行显示。

(2)位选

通过4个 NPN 型三极管控制,给定三极管基级对应引脚高电平,三极管导通,即对应位数码管被选中(P1 寄存器低4位)。

(3)段选

通过 P0 寄存器控制,给定对应段引脚高电平,这个段就被点亮。

(4)动态显示

快速轮询,利用人眼视觉暂留效应,先在第一位数码管显示一个数值,快速刷新;再在第二位数码管显示下一位数值,快速刷新。

十一、三极管

1. 基本概念

  • **制造材料:**锗管、硅管
  • **分类:**NPN 型、PNP 型
  • **三个极:**基极、发射极、集电极

2. 工作区域

  • **数字电路:**开关控制
  • **模拟电路:**电流放大
  • **饱和区:**三极管导通
  • **截止区:**三极管关断

3. 判断方法

箭头指向 N 型半导体,箭头出发点为 P 型半导体。箭头朝外为 NPN 型三极管,箭头朝内为 PNP 型三极管。

11.4 导通总结

  • **NPN 型三极管:**基极输出高电平,三极管导通;基极输出低电平,三极管断开。
  • **PNP 型三极管:**基极输出低电平,三极管导通;基极输出高电平,三极管断开。

11.5 位选代码示例

c 复制代码
// P1低四位清零:
P1 &= ~(0x0F << 0);  // 1111 0000
P1 |= (1 << 0);
相关推荐
Run_Teenage1 小时前
嵌入式:理解I2C通信基本原理
stm32·单片机·嵌入式硬件
CubeSandbox1 小时前
Cube Sandbox 受邀亮相 Arm Create:腾讯云工程师将在“云 + AI”专场带来开场演讲
arm开发·腾讯云·cube sandbox
恒锐丰科技林技术员2 小时前
EG1151 四开关升降压 DC‑DC 芯片:宽压大功率电源解决方案
经验分享·嵌入式硬件·硬件工程
G.E.M.小白2 小时前
单片机/嵌入式超全基础面试题(CPU/MCU/寄存器/三极管/数码管/位操作)
单片机·嵌入式硬件
宣宣猪的小花园.3 小时前
【嵌入式】故障与降级:看门狗、保护机制和工程可靠性的底线
开发语言·人工智能·嵌入式硬件·机器学习
自小吃多3 小时前
PCB布线叠层与阻抗设计笔记
笔记·嵌入式硬件
yuehuaxin013 小时前
LP8728A/LP8728B 芯茂微|SOP8L 副边反馈 PWM,18‑30W 适配器恒功率补偿方案解析
嵌入式硬件·智能家居·适配器模式·智能硬件
万物智能信息科技4 小时前
RGB并行屏输出—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
单片机·嵌入式硬件·华为·鸿蒙
新晨单片机设计4 小时前
S012A-基于STM32单片机光强检测系统【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件