一、计算机五大组成
**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++; 为例)

- CPU 通过控制总线向 RAM 发送读指令
- CPU 通过地址总线寻找 RAM 中变量地址
- RAM 通过数据总线将变量值发送给 CPU
- CPU 负责数据运算
- CPU 通过控制总线向 RAM 发送写指令
- CPU 通过地址总线寻找 RAM 中变量地址
- 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);