Universal Asynchronous Receiver Transmitter,即通用异步收发器。
是一种通用的串行、异步通信总线。
该总线有两条数据线,可以实现全双工的发送和接收。
使用TTL电平信号,TTL(晶体管-晶体管逻辑电平)电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。
数据按照二进制从低位到高位一位一位的传输。
通信双方需要使用一致的的波特率才能正常通信。
发送端将来自控制设备(如 CPU)的并行数据转换为串行形式,接着将其串行传输到接收端,然后接收端将串行数据转换回并行数据以供接收设备使用。
Serial库
Serial.begin() //串口工作前的配置,包括波特率和数据格式
Serial.read() //从接收缓存中读取一个字节的数据
Serial.write() //向发送缓存里写入新字节
Serial.available() //返回当前接收缓存(接收数组)内尚未读取的字节数
Serial.print() //串口输出数据,写入字符数据到串口。将数据输出到串口。数据会以ASCII码形式输出
Serial.println() //将数据输出到串口,并回车换行
更多内容请见:Serial库函数
UART的底层物理层协议。为解决UART的以下问题:
RS-232规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V,采用以下的9孔结构
由于处理器产生的是TTL信号,一般还需要MAX-232将TTL信号转化为RS-232信号。
RS-232只能实现点对点通信。
RS232-C接口标准出现较早,难免有不足之处,包括;
RS-485做出的改进:
IIC总线是一种串行、半双工总线,主要用于近距离,低速的芯片之间的通信
IIC总线有两根信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步
IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机,主机可以发起和结束一次通信,而从机只能被主机呼叫
每个连接到IIC总线上的器件有一个7位地址
主机发送起始信号后发送一个字节,该字节的前7位为地址,第8位为传输方向
IIC总线通信时每个字节长度为8位,先传输高位后传输低位,发送器发送完1个字节后接收器必须 发送1位应答位来回应,即一个帧有9位。
Wire库
Wire.begin() //初始化iic连接,并作为主机或者从机设备加入iic总线
Wire.requestFrom() //机向从机发送数据请求信号。使用 requestFrom() 后,从机端可以使用 onRequest() 注册一个事件用以响应主机的请求
Wire.beginTransmission() //设定传输数据到指定地址的从机设备,随后可以使用 write() 函数发送数据
Wire.endTransmission() //结束数据传输
Wire.available() // 返回接收到的字节数
Wire.write() //将要发送的数据加入发送队列
Wire.read() // 读取一个字节的数据。在主机中,当使用 requestFrom() 函数发送数据请求信号后,需要使用 read() 函数来获取数据
更多请见:Wire库函数
Serial Peripheral Interface,高速的、全双工、同步的串行通信总线
采用主从方式工作,一般有一个主机和一个到多个从机
至少要4根线:MISO,MOSI,SCLK时钟线,CS片选线
主机要与某个从机通信时,主机需要先向对应的从机的片选线上发送使能信号表示选中该设备
SPI总线在进行数据传送时,先传送高位后传送低位
数据线为高电平表示逻辑‘1’,低电平表示逻辑‘0’,一个字节传输完成后无需应答即可开始下个字节的传送
SPI总线采用同步方式工作,时钟线在上升沿或下降沿时发送器向数据线上发送数据,在紧接着的下降沿或上升沿接收器从数据线上读取数据,完成一位数据传送,八个时钟周期即可完成一个字节数据的传送。
SPI总线有四种不同的工作模式,取决于极性(CPOL)和相位(CPHL)这两个因素 CPOL表示SCLK空闲时的状态
SPI库
SPI.begin()
SPI.end()
SPI.beginTransaction()
SPI.endTransaction()
SPI.setBitOrder()
SPI.setClockDivider()
SPI.setDataMode()
SPI.transfer()
更多请见:SPI库函数
本文章使用limfx的vscode插件快速发布