关于嵌入式学习——嵌入式硬件1
基础整体概念
以应用为中心:消费电子(手机、蓝牙耳机、智能音响)、医疗电子(心率脉搏、呼吸机)、无人机(大疆D)、机器人(人形四足机器人)
计算机技术:
- 计算机五大组成:
运算器(数据运算)、控制器(指令控制)、存储器(内存外存)、输入设备(鼠标、键盘、摄像头)、输出设备(显示器)
- 软件:
编程语言(C/C++)、操作系统(Linux文件、多任务、网络)、数据结构、数据库
- 硬件
- 51单片机:硬件概念(定时器、PWM、中断)、原理图、寄存器、外设操作(LED、按键、数码管、蜂鸣器、传感器)
- STM32单片机:库开发(标准库、HAL库)
- ARM:英国公司 设计处理器芯片方案,SAMSUNG、ATMEL、NXP->ARM芯片方案>开发板(ARM)
- ARM7、ARM9、ARMI1
- CortexA:应用高端领域,处理复杂任务,用来跑作系统(Lnux 文件系统 多任务调度 网络)
- CortexR:应用实时控制领域,实时性要求高(汽车电子)
- CortexM:应用微控制器领域,MCU单片机(IOT物联网智能家居 控制领域)
- 特点:软硬件可裁剪——加入需要的硬件/软件功能,将不需要的硬件/软件裁剪掉(低功耗、低成本)
- 计算机:通用型计算机:PC、平板、手机/专用型计算机:无人机,完成某项特定功能而设计计算机
一、嵌入式:
以应用为中心,以计算机技术为基础,软硬件可裁势的专用计算机系统
二、51单片机:
- 1980年,由Intel公司MCS-51系列:8051型号单片机(工业控制领域),由MCU转型到CPU
- 其他公司:Atmel(AT89C51)、Philip(P89V51系列单片机,增强型单片机ISP在线编程)、STC宏晶半导体(STC89C51 STC89C52 STC89C52RC)
三、相关概念:
CPU:Central Processing Unit(中央处理器)数据运算、指令处理,CPU性能越高,完成指令处理和数据运算的速度越快
MCU: Micro Ctroller Unit(微控制器),集成度比较高,将所有功能集成到芯片中(CPU、RAM、ROM、定时器、UART、10),简单控制,成本低
MPU:Micro Procesing Unit(微处理器),集成度低,只有一块单独的CPU,需外接外设、存储模块,复杂应用领域,跑Linux操作系统,成本高
GPU:Graphics Processing Unit(图形处理器),图形处理、图形渲染(GPU性能越好,图形显示的质量越好)
NPU:Neural Processing Unit(神经网络处理器),A|推理、硬件加速,神经网络处理(卷积运算)->华为Mate60 达芬奇NPU AI自动优化照片
FPU:Floating Point Unit(浮点数运算单元),完成浮点数的运算和处理(完全遵循IEEE 754),大部分集成在CPU内部
SOC:System On Chip(片上系统),集成度比较高,将多个芯片集成到一块芯片上(存储芯片、外设芯片)
四、RAM和ROM:
外存:主要存放程序、代码、指令,掉电数据不丢失,读写速度慢,价格便宜(移动硬盘 1T 300)
内存:主要存放程序运行过程中的临时变量、掉电数据丢失,读写速度快,价格昂贵(内存条16G 300)
ROM:Read-Only Memory,只读存储器,存放单片机程序,指令,掉电数据不丢失
RAM:Random Access Memory,随机访问存储器,存放临时变量、临时数据,掉电数据丢失
五、单片机芯片内部结构:
ex:具体实现
CPU、RAM、ROM、Timer、PWM、I0、中断
三大总线:
- 地址总线:用来寻找RAM中的地址,所能寻址的最大范围2^8,256byte,单向
- 数据总线:通过地址总线去获取数据,数据交互双向
- 控制总线:时序控制、IO控制
六 位运算:
1、|:将二进制中的对应位的bit进行比较,如果有一个bit为1,结果为1;如果都为0,结果为0;
应用场景:指定位置1
unsigned char t = 0x60;
(数据高位 MSB bit7) 0110 0000 (bit0 LSB 数据低位)
第0位置1:t=t|(1 << 0);
第3位置1:t=t|(1 << 3);
第0位和第3位置1:t=t|(1 << 0)| (1 << 3);
2、 &:将二进制中的对应位的bit进行比较,如果全为1,结果为1:如果有一个0,结果为0;
应用场景:指定位清0
unsigned char t = 0xFF:
将bit 0 和 bit7 清0:
t &= ~(1 << 0);t &= ~(1 << 7);
exe:
练习:
定义两个变量:
unsigned char a = 0x62;
unsigned char b = 0xFF;(1)将a转换成二进制,将bit0和bit7置1
// 二进制:0110 0010
// t |= (1 << 0) | (1 << 7);(2)将b转换成二进制,将高4位清0
// 二进制:1111 1111
// t &= ~(0x0F << 4);
// t &= ~(0xF0 << 0);
3、^: 将对应位的bit进行比较,相同为0,相异为1
七、单片机程序创建、编写、编译、下载流程:
(1)安装Keil4软件
(2)点击"Project" -> "New Project" -> 选择路径 (为工程起一个名字)
(3)选择单片机芯片型号:Atmel->AT89C51,点击"否",不拷贝启动代码
(4)向Group中添加C语言文件: 点击左上方text按钮,ctrl + S将文件保存到工程对应的目录(为文件起一个名字,如 main.c),双击左侧Grpup,点击Add 将文件加入到对应的Group下
(5)编写单片机程序:
(1) #include <reg51.h>, 加入51单片机头文件
(2)需要加入while(1)避免程序跑飞
(6)编译单片机程序:
(1)点击"Target Options"按钮,点击"Output"选项中的"Create HEX FILE"选项,生成hex文件
(2)点击左上方"Build"编译单片机工程
(3)会在对应目录下生成xxx.hex十六进制文件
(7)下载单片机程序:
(1)打开ISP软件,连接串口线
(2)选择单片机芯片型号:STC89C52/C51/C52RC
(3)根据串口识别的端口号,选择对应的端口 COM3(设备管理器->端口查看)
(4)选择"打开程序文件" -> 对应目录下的hex文件
(5)点击"下载/编程"按钮,将单片机复位后程序即可下载到单片机ROM中
八、原理图:
MCU单片机
1芯片模块:
- STC89C52RC、DIP40 封装:双列直插式,40个引脚,划分成4组(端口 寄存器 unsigned char P2;)
- 网络编号:在实际电路中的一个编号,避免物理连线,相同网络的编号的引脚在实际电路中是彼此互通
2LED模块:
- 电阻:数字标注法:前两位/3位为有效数字,最后一位是10的幂次方
- 发光二极管:具有单向导通性,分为共阳极和共阴极二极管:将所有发光二极管的阳极接到电源正极(VCC),阴极接到单片机的引脚。此时发光二级管阳极会输出高电平(VCC 5V),如果发光二级阴极输出一个低电平(0V),阳极和阴极之间会形成一个正向的电压差,满足发光二极管的单向导通性,所以电流就会从阳极流向阴极,发光二极管就被点亮。
void LED_INIT(void)
{P2 = 0xFF;return;
}
//全亮
void LED_OFF(void)
{P2 = 0x00;return;
}
//全灭
void LED_ON(void)
{P2 = 0xFF;return;
}//异或 初始化为全1 与全1 按位异或 得到全0 就亮 得到全1就灭
void LED_NOR(void)
{P2^=0xFF;return;
}//流水灯 因为是低电平点亮 所以要取反
void LED_Show(unsigned int n)
{P2 = ~n;return;
}
#include <reg51.h>
#include <delay.h>
#include <led.h>
int main(void)
{int i = 0;LED_INIT();//初始化while(1){
//第一种方式
// LED_ON();
// delay(0xAFFF);
// LED_OFF();
// delay(0xAFFF);
//第二种方式
// LED_NOR();
// delay(0xAFFF);//流水灯for(i = 0; i < 8; i++){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}for(i = 7; i >= 0; i--){LED_Show(1 << i);delay(0xAFFF);LED_OFF();}}return 0;
}
3、数码管:
数码管:51单片机搭载一个4位共阴极数码管,每一位数码管可以显示一些独立数值,数码管同一时刻只能显示一位
- 位选:选中某一位数码管(将P1寄存器对应bit位置1)
- 段选:P0寄存器(abcdrfg)
// 先位选P1 &= ~(0x0F << 0);//初始化 低四位全部置0;P1 |= 1 << 0;//(P10置1)// 再段选P0 = 0x06;//(bc段置1 表示1 000000110)
- 静态显示
//静态显示一个数码管//位选Select_bit(0); while(1){for (i = 0; i < 10; i++){Select_seg(i);delay(0xAFFF);P0 = 0;}} return 0;
}#include <reg51.h>//段码表
unsigned int seg[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数组里数字代表从0 到9//片选
void Select_bit(unsigned int n)
{P1 &= ~(0x0F << 0);//初始化 低四位清零P1 |= (1 << n); //片选 0 1 2 3 哪位NPNreturn;
}
//段选
void Select_seg(unsigned int n)
{P0 = seg[n];//根据段码表里这个数字指定显示abcdefgreturn;
}
- 动态显示
//动态展示四位数码管while(1){for(i = 0; i <= 9999; i++){digiter_show(i);delay(0xAFFF);}}return 0;
}//动态显示4位数码管
void digiter_show(unsigned int n)
{int i = 0;int j = 0;while(n != 0){ i = n % 10;Select_bit(j);//位选j++;P0 = 0; //选中NPN先清除Select_seg(i);// 段选delay(100);//延迟很小的一段时间 让肉眼以为四位数码管同时出现n = n / 10;}return;
}
重点:
- 1.MCU、CPU、GPU、NPU、SOC、MPU、FPU
- 2.内存、外存的区别
- 3.RAM和ROM的区别,单片机RAM大小
- 4. 三大总线及其特点
- 5.LED发光二极管分类及其特点
- 6.数码管显示原理流程