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 | 串行 | 同步 | 报文的形式 | 多主无从 | |||||
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-03-09 OneDrive登录,win7安装IE11