嵌入式复习笔记

第1章 相关基础知识概述

1.1 嵌入式系统概述

嵌入式系统的三种定义

  1. 国内普遍认同的嵌入式系统定义:以应用为中心,以计算机技术为基础,软件硬件可裁剪,且适应系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统
  2. IEEE的定义:用于控制、监视或者辅助操作机器和设备的装置
  3. 其他定义:以提高对象体系智能性,控制力和人机交互能力为目的,通过相互作用和内在指标评价的,嵌入对象体系的专用计算机系统

嵌入式系统的分类

按形态差异:芯片级(MCU、SoC)、板级(单片机、模块)和设备级(工控机) 3级
单片机组成的嵌入式系统分为:含操作系统、不含操作系统

嵌入式系统的组成

从整体来看:大致分为:微处理器、存储器、输入\输出设备及通信与拓展接口——嵌入式系统的四大组成部分

1.2 Arduino的概述

Arduino是什么

Arduino是一个简单易用的开源电子平台,优点如下

  • 价格便宜
  • 跨平台
  • 简单、清晰的编程环境
  • 开源和可拓展软件
  • 开源和可拓展硬件

Arduino开发版分类

总共分为入门级、高级类、物联网类、教育类、可穿戴类五大类
入门级:UNO、Leonardo、101、Esplora、Micro、Nano等
高级类:Mega 2560、Zero、Due、Mega ADK、MKRZero等
物联网类:Yun、Ethernet、MKR1000等
教育类:CTC 101、Engineering KIT等
可穿戴类:Gemma、LilyPad、LilyPad USB、SimpleSnap等

1.3 电子设计基础

常用元件简介

电源和USB数据项、电阻器、电容器、电感器、二极管、晶体管、万用表、杜邦线、面包板、Arduino扩展版、模块

第2章 Arduino软硬件开发基础

设计第三方库的实验认真看

第3章 Arduino编程

3.1 函数

数学函数

11个

abs(x) // 返回绝对值
constrain(x, a, b) // 让x返回`[a, b]`范围,x < a 返回a,x > b返回b
map(value, fromLow, fromHigh, toLow, toHigh)
/*
* 将整数从一个范围映射到另一个范围
* map(x, 1, 50, 50 , 1) 1->50 、50->1 
* 也可以是map(x, 1, 50, 50, -100)
*/
max(x, y) // 返回两数较大值
min(x. y) // 返回两数较小值
pow(x, y) // 计算幂次
sqrt(x) // 计算平方根
sq(x) // 计算平方
cos(x) // 计算弧度余弦值
sin(x) // 计算弧度正弦值
tan(x) // 计算弧度正切值

3.2 常量和数据类型

定义数字引脚模式

// INPUT、INPUT_PULLUP、OUTPUT
pinMode()

3.5 运算符

位运算符

  • & (按位与)
  • | (按位或)
  • ~ (按位取反)
  • ~ (按位异或)
  • << (左移) 右边补0
  • (右移) 左边补符号位

第4章 Arduino板的接口及其应用

4.1 数字接口及其应用

数字I/O接口的封装函数

// 1. 基本数字I/O接口封装函数

/*
* 读取指定引脚的状态
* x 引脚编号
* 返回值 1或0(HIGH 或 LOW)
* 注:引脚悬空,返回值随机
*/
digitalRead(x)

/*
* 设置引脚高电平或低电平
* x 引脚编号
* 返回值 无
*/
digitalWrite(x)

/*
* 设置引脚模式
* pin 引脚编号
* mode 模式
* 返回值 无
*/
pinMode(pin, mode)

// 2. 高级数字I/O接口封装函数

/*
* 返回高电平和低电平的脉冲(持续时间)
*/
pulseIn(pin, value)
pulseIn(pin, value, timeout)

/*
* 处理持续时间较长的脉冲和受中断影响
*/
pulseInLong(pin, value)
pulseInLong(pin, value, timeout)

/*
* 通过串行的方式从引脚上读入数据
* 一次输出一位
*/
byte in = shiftIn(datePin, clockPin, bitOrder)

/*
* 通过串行的方式从引脚输出,一次输出一位
*/
shiftOut(dataPin, clockPin, bitOrder, value)

/*
* 生成一个特定频率的方波信号
*/
tone(pin, frequency)
tone(pin, frequency, duration)

/*
* 关闭方波信号生成
*/
noTone(pin)

4.2 模拟接口及其应用

模拟I/O接口的封装函数 ★

/*
* 读取指定引脚的电压
*/
analogRead(pin)

/*
* 配置模拟引脚的参考电压
*/
analogReference(type)

/*
* 通过PWM方式在指定引脚写入模拟量
*/
analogWrite(pin, value)

4.3 串行通信接口及其应用

串行通信接口的类库函数(21个) ★★

if(Serial) // 测试指定串口是否就绪

Serial.avaliable() // 读取串口接收到的字节

Serial.avaliableForWrite() // 获取可在串行缓冲区中写入的字节数

Serial.begin(speed) // 设置串口通信波特率
Serial.begin(speed, config)

Serial.end() // 禁止串口通信

Serial.find(target) // 从串行缓冲区读取数据,直到找到目标

Serial.findUntil(target, terminal) // 找target, 或者terminal 就返回true

Serial.flush() // 等待传出串行数据的传输完成

Serial.parseFloat() // 读取浮点数

Serial.parseInt() // 读取整数

Serial.peek() // 读取串口下一个字符,缓冲区不变

Serial.print(val)
Serial.print(val, format) // format 数字的进制、小数点后面的数据位

Serial.println() //多一个换行

Serial.read() // 读取串口一个字符,读后删除

Serial.readBytes(buffer, length) // 将字符从串行端口读入缓冲区

Serial.readBytesUntil(ch, buffer, length) //将字符从串行缓冲区读入数组

Serial.readString() // 从串行缓冲区读入全部字符串, 超时结束

Serial.readStringUntil(ch) // 读完或者遇到终止符停止、ch的终止符

Serial.SetTimeOut(time) // 设置串口操作的超时时间,默认1s

Serial.write(val) // 写二进制数据
Serial.write(str)
Serial.write(buf, len)

// 串口数据准备好时调用该函数
void serialEvent() {
	
} 

4.4 I2C总线接口及应用

类库函数

Wire.begin(address) // 地址未指明,作为主设备加入总线
Wire.beginTransminsson() // 启动一个已知地址的I2C从设备的通信
Wire.write() // 写数据到从设备
Wire.endTransmission() // 关闭对从设备的数据发送
Wire.available() // 主设备,返回接收的字节数
Wire.requestFrom() // 设置从设备向主设备发送的字节数
Wire.read() // 读取一个字节数据
Wire.setClock() // 修改I2C通信频率
Wire.onReceive() // 注册一个处理数据函数,有一个int参数,无返回值,接收触发
Wire.onRequest() // 注册一个处理数据函数,无参无返回值, 上传触发

4.5 SPI接口及应用

概念

串行外设接口 (Serial Peripheral Interface, SPI)——同步串行数据传输标准

4.6 外部中断接口及应用

中断的基本概念

中断、中断服务程序、中断优先级、中断嵌套
Arduino的外部中断是由Arduino外部中断引脚引起的中断

外部中断的函数

/*
* pin 引脚、ISR 中断服务函数名、mode 定义触发中断的方式
* digitalPinToInterrupt(pin) 将引脚转换为中断号
* mode: LOW CHANGE RISING FALLING HIGH
*/
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) // 设置一个外部中断

detachInterrupt(interrupt) // 关闭中断号的中断

interrupts() // 启用中断功能

noInterrupts() // 关闭中断功能

4.8 软件串口及其应用

概述

软件串口类库允许通过Arduino的数字引脚进行串行通信
限制:如果使用多个软件串口、同一时间只有一个能接收数据。

类库函数

使用SoftwareSerial库

SoftwareSerial mySerial(10, 11); // 定义10为RX,11为TX

mySerial.begin(speed) // 设置串行通信波特率

mySerial.available() // 获取串口缓冲区的带读取字节数

mySerial.read() // 读取一个字符

mySerial.write(val) // 写二进制数据到串口
mySerial.write(buf, len)

mySerial.isListening() // 测试串口是否正在监听

mySerial.listen() // 启用所选软件串行对象的侦听,只能有一个软串口在监听

mySerial.overflow() // 检查缓冲区是否溢出

mySerial.peek() // 读取字符,缓冲区不删除

mySerial.print()
mySerial.println() // 参考4.3.2

应用

4.9 EEPROM及其应用

概述

以字节为单位进行读写

类库函数

read()、write()、update()、put()、get()
write—写入数据范围0-255

EEPROM的应用

第5章 Arduino人机界面及接口技术

5.1 Arduino与按键的接口技术

考一题

5.2 Arduino与红外遥控器的接口技术

红外遥控器的工作原理

是一种发射装置,利用波长0.76~1.5um 的近红外线来传输控制信号的遥控设备
通过现代的编码技术,将按键信息进行编码
通过红外线二极管发射光波
红外线接收器将红外信号->电信号,处理器对信号解码,解调出相应指令,控制设备完成所需操作
红外遥控系统分为发送和接收两部分

红外发光二极管、红外接收二极管

5.5 Arduino与LCD的接口技术

LCD——液晶显示屏
优点:耗电量低、体积小、辐射低

LCD的分类及特点

点阵式液晶屏

LCD12864、每行128个点、每列64个点、

段码式液晶屏

某一指定位置显示不显示
只能显示字符和数字

字符式液晶屏

若干个点阵字符位组成,每个点阵字符位显示一个字符,专门显示字母、数字、符号

TFT彩屏

TFT——Thin Film Transistor 薄膜晶体管,显示色彩丰富的点阵图像、反应时间比较快、可视角度大、高速度、高亮度、高对比度显示屏幕信息

LCD1602 模块概述

字符型液晶显示器

模块说明

引脚功能说明

控制器接口显示原理

LCD1602 的类库函数

LiquidCrystal lcd(rs, rw ,enbale, d0, d1, d2, d3, d4, d5, d6, d7)

lcd.begin(cols, rows) // 设定显示模式

lcd.clear()

lcd.home() // 初始化光标在左上角

lcd.setCursor(col, row) // 设置光标位置

lcd.write(data) // 写一个字符 data——LCD1602内部字符和自定义字符在库表中的编码

lcd.print(data, BASE) // 打印文本

lcd.cursor() // 显示光标

lcd.noCursor() // 隐藏光杯

lcd.blink() // 显示闪烁的光标

lcd.noBunk() // 关闭光标闪烁

lcd.display() // 打开显示

lcd.noDisplay() // 关闭液晶显示

lcd.scrollDisplayLeft() // 左移一个字符

lcd.scrollDisplayRight() // 右移一个字符

lcd.autoscroll() // 启用自动滚动

lcd.noAutoScroll() // 关闭自动滚动

lcd.leftToRight() // 从左到右写入默认

lcd.rightToLeft() // 从右向左写入

lcd.createChar(num, data) // 创建用户自定义的字符
/*
* 八行,write(byte(0))
*/

实例

看中国加油实验

第6章 Arduino开发版常用模块及其应用

6.1 超声波测距

HC-SR04

SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN) // 定义对象sr04,初始化引脚
sr04.Distance() // 读取测量距离

引脚

引脚名称 引脚说明 Arduino引脚编号
VCC 电源 5V
Trig 触发输入端 6
Echo 回响信号输出端 7
GND GND

6.2 蜂鸣器

概述

按结构分类:压电蜂鸣器、电磁蜂鸣器
按驱动方式:有源蜂鸣器、无源蜂鸣器

有源蜂鸣器:9mm、用黑胶封闭、工作信号直流电
无源蜂鸣器:8mm、绿色电路板、工作信号方波

应用实例

蜂鸣器正极 ---> 引脚8(随便)
蜂鸣器负极 ---> GND

6.3 温湿度传感器

DHT11 概述

含有已校准数字信号输出的复合型传感器

DHT类库函数

DHT11.read(pin) // 获取读取温湿度数字的状态码

DHT11.humidity() // 读取的湿度值

DHT11.temperatire() // 读取的温度值

实例

引脚

DHT11 说明 Arduino
VCC 工作电源 5v
GND GND
DATA 双向数据线 3

6.4 直流电机

概念

将直流电转换为机械能、由定子和转子两部分组成
定子:静止不动、产生磁场
转子:转动的部分、产生电磁转矩和感应电动势、能量转换的枢纽、通常称为电枢

6.5 步进电机

概念

将电脉冲转换为角位移的执行器件

6.6 舵机

概述

0.5ms -> -90du

6.7 SD卡读写模块

概念

最通用的数据存储卡。
具有价格低廉、存储容量大、使用方便、通用性与安全性强等优点。
提供大容量数据存储和高速数据传输功能

6.10 三色LED灯

概述

由红、绿、蓝三块LED芯片而成,分共阴极和共阳极两种。

6.21 继电器

概念

电控制器件,把小信号转换成高电压大功率控制信号的一种“自动开关”

第7章 Arduino常用通信模块及其应用

7.1 蓝牙通信模块

概念

以无线取代有线连接,将固定和移动的信息设备组成局域网络,实现设备之间低成本的无线通信

7.2 ZigBee通信模块

概念

低成本、低功耗的短距离双向无线通信协议,可用于取代传统线路或用于新兴的感测网络设备。
XBee模块:把ZigBee协议内置在模块Flash里的ZigBee模块

7.3 Wi-Fi通信模块

Wi-Fi:将计算机、手持设备等终端以无线方式互相连接的技术

ESP8266

第8章 Arduino嵌入式系统综合应用

8.4 智能家居系统

物联网设计模版

posted @   lrui1  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示