IIC最重要的就是时序,主要如下:
1. 起始条件(Start Condition):
-I2C通信开始时,主设备将SDA从高电平切换到低电平时,SCL处于高电平状态。
-起始条件至少需要持续一个SCL周期。
2. 地址传输(Address Transmission):
-主设备发送设备地址和读写位(R/W)位来选择特定的从设备。
-地址传输是以一个起始位开始的,表示数据的开始。
-7位地址模式:主设备发送7位设备地址,最后一位是R/W位,指示读取(R=1)或写入(W=0)操作。
-10位地址模式:主设备先发送第一个字节的高6位,然后发送一个仅包含从设备地址的位(R/W位)的起始位,最后发送第一个字节的低位。
3. 应答位(ACK/NACK):
-在每个字节的传输之后,接收设备需要提供一个应答位(ACK或NACK)。
-主设备接收到每个字节的最后一个位后,会释放SDA线,接收设备通过将SDA线拉低来提供应答位。
-如果接收设备成功接收到数据,则提供ACK(拉低SDA线),否则提供NACK(保持SDA线为高电平)。
4. 数据传输(Data Transmission):
-主设备发送数据字节给从设备,每个字节由8个数据位和一个应答位组成。
-数据传输是以起始位开始的,并在每个SCL周期传输一个位。
-每个数据位都在SCL的上升沿或下降沿传输。
-数据传输的最后一个位由接收设备提供应答位。
5. 停止条件(Stop Condition):
-主设备将SDA从低电平切换到高电平时,SCL处于高电平状态。
-停止条件至少需要持续一个SCL周期。
-停止条件表示I2C通信的结束。
6. 时钟速率(Clock Speed):
-I2C总线的时钟速率由主设备控制。
-标准模式下,时钟频率为100 kHz;快速模式下,时钟频率为400 kHz。
-高速模式和超高速模式下,时钟频率更高。
上图就是物联网开发板上面的OLED模块的原理图,哪里来的?为什么是这样的?请大家打开改OLED的数据手册就知道了,如下图:
这个就是数据手册提供的原理图,是不是和蓝桥杯物联网开发板上面的原理图一模一样?当芯片厂家提供了参考电路设计图,我们工程师只需要把它COPY就可以啦。
需要注意的是OLED模块的供电引脚是A_3V3,如下:
而A_3V3引脚又是同过STM32L071KBU6来控制的,如下图:
通过上图看出来,当PB5为低电平时,三极管SI2301导通,A_3V3得电,OLED工作;反之,三极管SI2301不导通,A_3V3失电,OLED熄灭。
说完OLED的电源引脚,来看看OLED的IIC引脚,如下:
看得出来STM32与OLED引脚的关系:
STM32引脚 | OLED引脚 |
PA8 | I2C3_CS |
PB4 | I2C3_SDA |
第一步:配置PB5为输出模式,并初始化为低电平,使得OLED可以正常工作,不要忘记和6处一样使用用户标签哦。
第二步:配置OLED的I2C3,如下图:配置完后PA8和PB4会自动变成绿色。
第一步:找到比赛提供的代码驱动,将oled.h和font.h粘贴到“项目名/Core/Inc”文件夹中,如下图:
第二步:找到比赛提供的代码驱动,将oled.c粘贴到“项目名/Core/Src”文件夹中,如下图:
第三步:按照如下图将oled.c文件添加到项目中,如下图:注意oled.c文件的目录,在“项目名/Core/Src”中,不要选到其他位置,否则编译过程中会报错。
第四步:添加之后会看见oled.c,如下图:然后改点“Colse”点“Colse”,改点“OK”点“OK”。
第五步:可以看见项目栏的多了一个oled.c文件,如下图:
第六步:编译代码,发现有一个错误,如下图:原来是OLED_Write函数有问题。这个函数就是需要我们手写的OLED的驱动。
第七步:编写OLED_Write函数,如下图:
第八步:添加头文件,如下图:
第九步:编写OLED相关代码。如下图:
注意:
1,下载程序的时候,请选择A开发板。
现象:OLED第一行显示”Hello”。
来源:撞上电子微信公众号
版权:东莞市东城墨竹公子电子工作室
日期:2023.06.07
全部0条评论
快来发表一下你的评论吧 !