UART、IIC、SPI

详情看B站收藏视频
UART:

帧格式

 

起始位、数据位、校验位、停止位

全双工所以有两条线,一条发,一条收
异步,即收发双方时钟不同步
限制位数,5-8位数据位,一次最多发一个字节,这与IIC和SPI不同,后两者均为同步
数据低位先发(右边为低)
不允许连续发送,每次都要先停止后,重新开始计时发送,目的是避免累积误差
累积误差的原因在于发送方和接收方的计时误差
为什么要计时,因为不计时无法区分发送方发送的是01还是0011,计时就是为了计算位数,根据波特率(单位bps(bit per second)每秒钟发送的位数)来计算。

 

 上面的收发过程了解即可,关键是对寄存器的操作

设置寄存器

首先要设置值GPIOCON控制寄存器,设置为UART...然后下图

 

回环模式

 

 CPU和外围硬件,包括串口的交互方式:

1.轮询 polling CPU主动去询问是否有数据

2.中断 串口有数据时,CPU被动去相应

3.DMA 不需要CPU过问,直接将数据存到内存

先采用轮询的方式

寄存器的type中的R表示只读,RW表示可读可写

 

 while循环是为了防止cpu跑飞,因为现在还没有进程的概念

 上面的有问题是发送的不一定是按照ABCD的顺序进行,因为串口发送器从缓冲器读取并发送的速度远低于CPU写入发送缓冲器的速度,所以串口每次发送后都是读取当时CPU发来的数据

所以需要修改,CPU在每次写入缓冲器时都要对其进行判断,当缓冲为空时才会写入

代码整理,模块化

   }

代码在编译看视频

输入输出重定向

 

 在开发板上移植Linux系统后,系统的输出不在是屏幕而是串口,需要设置


I2C:结构简单,就两根线

 

 

 

 

 

 

 

 

 

 

 

 IIC总线的细节的实现

起始信号和停止信号

 

 

 

mpu6050

 

 IIC接口的芯片,一般都不止一个地址可以设置,比如6050就有两种,目的是防止地址冲突,IIC线上的每个芯片都要有各自不同的地址

 

......


SPI

与 IIC 区别

 

 采样即接收数据,CPHA设置为0表示下降沿接收,反之上升沿接收

为什么要有这几种模式?

是为了满足外围芯片,因为有些外围芯片的极性和相位是固定的,所以要根据不同的从机芯片来设置

 

 

UART 串行 全双工 异步 一次5-8位,不可连发 先低位后高位 无应答 点对点 有起始停止位  快
IIC 串行 半双工 同步 一次发若干个8位 先高位后低位 有应答 多主多从 有起始停止位  最慢
SPI 串行 全双工 同步 不限位数 先高位后低位 无应答 一主多从 无起始停止位  最快

 

CAN 串行   同步 报文的形式     多主无从    
                   
posted @   18751612782  阅读(194)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-03-09 OneDrive登录,win7安装IE11
点击右上角即可分享
微信分享提示