参考:江科大单片机教程 STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
IIC通讯协议 | SPI通信协议 | UART通信协议 | |
速度 | 100k-400khz | 4Mhz- | |
线数 | 2 CLK,DATA | 4CLK,ENB,IO,OI | |
额外设备 | |||
一主多从 | 一主多从 |
一般不用自己写,都有相应的库或官方提供相应的,改改就行,没有了再去看视频或是从其它处移植过来,改改;
IIC通讯协议
通信时序 发送数据过程 发送地址 接收1位 发送数据 置高 继续接收 继续发送
可以软件模拟
因为多设备,并且只有两条线,因为设备内有多个寄存器,从而数据发送,读写时,需要发送设备地址和设备寄存器地址(连接上地线)
写时序 : 七位设备地址,和一位读写位 ;设备应答后,发送写入的地址,应答后,写入数据
设备地址和内部寄存器地址
读时序:当前地址读;因为地址为当前地址,从而要读特定地址时,要用写时序写入地址,不发送数据,然后发送重新开始信号,再进行读时序
连续写,连续读,只要接收或读取数据后,给出应答,即会连续
一条CLK 一条DATA线
多个设备
因为时钟线为主机控制,所以可以中断停止后再继续接收,发送
SPI通信协议
可以软件模拟(但软件模拟从机时,容易出现丢帧,导致后续数据都是错的。。。但可以用于LCD等
CLK,MOSI,MISO,CS1,CS2,CS3
一对多;多个设备;对设备的选择通过CS1,CS2,CS3的拉底来实现
采用循环发送数据模式;MOSI 发出一位的同时置换回MISO内的一位,直到一个字节发送完,同时也接收了从机的一个字节
读写格式,依不同的设备而定;没有统一的,按具体设备翻看手册
连续读写,只要cs线没断开就可以连续;断开则停止
因为时钟线为主机控制,所以可以中断停止后再继续接收,发送
UART通信协议
一对一
TX RX GND
使用内部时钟作为时钟,导致通信双方需要相同的波特率;
因为内部时钟,从而有校验位,为信息传递进行准备性,抗干扰设置
读写协议格式:自已协定
连续读写:连续
一般不会使用到,使用到时通常有操作系统,或是驱动已经集成了,只需要使用即可;使用于嵌入式,高效,稳定阶段,有专门的驱动,不需
多设备同时传输,从而需要确定传输方是谁,多人同时传输,只有两线,从而决定,谁先谁后,从而协议;
时钟来源:主设备,还是内部时钟
SPI,UART,I2C 因从设备选择由主机控制,实现主从,从而不需要确定传输方和仲裁先后
*CAN通信协议
需要额外外部电路
一对多,主从可以变化
信息稳定性,同时传输
从而有仲裁,信息传输正确;从而使用协议验证
传输距离,稳定性
*USB通信协议
差分电路,抗干扰,运输长度
有多设备,从而有总线仲裁,谁先使用
有多设备,从而信息传递中,信息的传输方来源,使用信息符带地址,验证,信息
一,不需要重新写协议,除非你要移植到新出的产品上,(一般也只需要使用原有的修改一下即可,要了解具体的过程的
二,一般都会提供相应的协议的实现的,不需要再
三,具体场景具体使用,不需要使用高的,一般的需求已经满足了,高的用不到——
连线方式
uart
rx->tx tx->rx gnd->gnd
spi
SCL ->SCL ; MISO->MOSI GND->GND
I2C
CLK->CLK; DAT ->DAT
arudino
I2C 协议 与 移植
asrpro
1.添加头文件
2.修改函数
SSD1306 移值
ssd1306的核心函数
PCA9865