当前位置: 首页 > news >正文

关于嵌入式学习——嵌入式硬件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.数码管显示原理流程 
http://www.xdnf.cn/news/1428157.html

相关文章:

  • More Effective C++ 条款23:考虑使用其他程序库
  • 没有天硕工业级SSD固态硬盘,物联网痛点如何解决?
  • 虚实交互新突破:Three.js融合AR技术的孪生数据操控方法
  • Angular事件处理全攻略:从基础到进阶的完整指南
  • JSON Schema 格式详解、版本介绍和示例教程
  • 利用 Python 获取微店商品详情 API 接口数据的实战指南
  • 最新!阿里财报电话会蒋凡与吴泳铭透露重要信息:淘宝闪购成绩斐然;零售与AI双轮驱动;阿里云推出“Agent Bay”新产品···
  • 【学Python自动化】 8.1 Python 与 Rust 错误处理对比学习笔记
  • Spring Security资源服务器在高并发场景下的认证性能优化实践指南
  • 使用DataLoader加载本地数据
  • 深度学习——基于卷积神经网络实现食物图像分类(数据增强)
  • JVM1.8与1.9的区别是什么?
  • 【系统架构设计(11)】软件测试全景解析:从方法论到实践策略
  • 面试tips--JVM(4)--Minor GC Major GC Full GC
  • STL库——deque/priority_queue
  • 【爬油管搜索视频软件】youtube爬虫工具,根据关键词采集搜到的视频数据
  • 数据分析与挖掘工程师学习规划
  • React学习教程,从入门到精通, React 入门指南:React JSX 语法知识点详解及案例代码(8)
  • 工业界实战之数据存储格式与精度
  • MySQL 事务隔离与 MVCC
  • MySQL事务+MVCC(精简版,包教包废)
  • 【彻底搞懂Java垃圾回收机制(附调优参数)】
  • 从电脑底层到进程创建:一篇看懂冯诺依曼、OS和进程
  • 【Qt开发】按钮类控件(二)-> QRadioButton
  • 【译】更好地控制您的 Copilot 代码建议
  • ResponseBodyEmitter介绍
  • Linux IPv4路由子系统深度解析
  • 什么是Token?——理解自然语言处理中的基本单位
  • 基于单片机颜色识别分拣系统设计
  • AI 生成视频入门:用 Pika Labs+Runway ML 制作短内容