嵌入式学习笔记-MCU阶段--DAY09

发布于:2025-08-03 ⋅ 阅读:(13) ⋅ 点赞:(0)

1. oled屏幕的接口IIC

应用场合:

2.IIC通信原理

概念:

IIC(Inter-Integrated Circuit)其实是IICBus简称,所以中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,由飞利浦公司在1980年代为了让嵌入式系统或手机用以连接低速周边设备而发展。I²C的正确读法为“I平方C”("I-squared-C"),而“I二C”("I-two-C")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用I²C协议已经不需要支付专利费,但制造商仍然需要付费以获取I²C从属设备地址。

IIC:也是一种串行总线,半双工。

IIC是一种主从结构

主从结构的通信,必须有主机发送起始信号,才可以开始进行通信。

IIC总线对工程师的好处:

 专有名词:

IIC收发过程:

1 假设微控制器 A 要发送信息到微控制器 B

• 微控制器 A 主机 寻址(包含了读写标志)微控制器 B 从机 (从机要给应答信号)

• 微控制器 A 主机 发送器 发送数据到微控制器 B 从机 接收器

• 微控制器 A 终止传输(终止信号)

2 如果微控制器 A 想从微控制器 B 接收信息

• 微控制器 A 主机 寻址(包含了读写标志)微控制器 B 从机

• 微控制器 A 主机 接收器 从微控制器 B 从机 发送器 接收数据

• 微控制器 A 终止传输

IIC总线时序

IIC总线时序

硬件组成:

SDA 和 SCL 都是双向线路

SDA:根据数据传输配置输入或者输出---开漏输出

SCK:复用推挽输出(硬件IIC)

SCK:通用推挽输出(软件(模拟)IIC)

传输速率:

I2C 总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下可达 3.4Mbit/s 。

传输方式:按位传输(内部传输,主机或者从机内部)

数据的有效性:

SDA 线上的数据必须在时钟的高电平周期保持稳定 数据线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变

时钟为高电平,只能传输数据

时钟线为低电平,只能切换要传输的数据

起始信号和停止信号:

起始信号的状态:

时钟线为高电平的时候,数据线由高拉低

停止信号的状态:

时钟线为高电平的时候,数据线由低拉高

传输数据

发送到 SDA 线上的每个字节必须为 8 位 每次传输可以发送的字节数量不受限制 每个字节后必须跟一个响应位 首先传输的是数据的最高位 MSB

数据宽度:8bit

响应位:是否正确应答

响应:

时钟为高电平的时候,数据线输出稳定的低电平

单个数据发送的应答信号:

仲裁机制:

所有主机在 SCL 线上产生它们自己的时钟来传输 I2C 总线上的报文 数据只在时钟的高电平周期有效因此 需要一个确定的时钟进行逐位仲裁

从设备的地址格式:

7bit+读写标志位=8位

写操作:低电平

读操作:高电平

数据传输帧格式:

主机 发送器发送到从机 接收器 传输的方向不会改变

在第一个字节后 主机立即读从机

OLED屏幕介绍:

OLED屏幕的基本特性:

大小:0.96寸(对角线)

分辨率:128*64(0.96寸的屏幕上总共有128*64个像素点)

像素点:成像的最小单位

单色屏:由两种颜色组成,背景色和前景色都是只有一种,黑白 黑和蓝......

像素点大小:1bit 0或者1

多色屏幕中像素点的颜色显示格式:RGB565 RGB888

RGB565的颜色显示格式:一个像素点大小就是2字节

OLED屏幕的IO口:

写操作:

 保存的图像或者字符在OLED屏幕中保存方式:

128*64---像素点个数

长度128个像素点(128列)

高度64像素点(64行)

PAGE0(com0--com7)--第0页(0--7行)

因此我们的屏幕中就有8页。

指令部分:数据手册27页

IIC通信接口,只负责发送或者接收数据

比如:我需要在屏幕的第二行去显示字符,首先设置显示起始位置,因此我们在操作显示屏幕的时候,需要先发送指令,告诉从设备,主机先要执行那些操作。

代码编写部分:

软件IIC编写代码:

IIC通信连接在单片机的哪些IO口上:

PA6--CLK---通用推挽输出

PA7--SDA--开漏输出(只能输出低电平,无法输出高电平(是一个高阻态))

为什么不用推挽???

1.我们使用开漏输出,需要外界上拉电阻,IO内部结构中有上拉

2.选择开漏是因为,SDA数据线,还需要去接收从设备数据(输入)

这时如果设置成推挽,从设备给主机发送数据,此时主机还在输出,有可能产生短路

如果设置成开漏,当设备输入的时候,就可以直接检测外界的电平状态

内部上拉能力不够???这个时候就需要外接上拉电阻。

以上两个IO口为例,进行代码编写

1.参考官方提供的例程代码

 参考文件内容:

将以上OLED驱动和字体内容添加到工程

有一个错误需要修改:

显示字符串:

 

因为font.c中已经将全部的英文字符取模

全部是根据ASCII表格进行取模处理

直接网页搜索取模工具,也可以在线取模 


网站公告

今日签到

点亮在社区的每一天
去签到