STM32学习日志——I2C实验

2023-04-12 09:30   562   0  

今天学习的是I2C通信实验,I2C是一种两线式串行总线,有数据线SDA和时钟线SCL构成,可发送和接收数据,属于半双工通信。由于要有相同的时钟源,一般用于板内通信。


I2C有几个比较重要的状态:1)空闲状态,即两条线都拉高。2)起始信号:当SCL为高时SDA从高到低的跳变,停止信号:当SCL为高时,SDA从低到高的跳变。3)应答信号:每当发送器发送一个字节的数据时,在第九个脉冲,接收器会反馈一个应答信号ACK,低电平。如果接收器是主控器,则会发送一个非应答信号NACK,高电平,以通知发送方结束数据发送。4)数据有效性:数据必须在SCL的上升沿之前就准备好,并在SCL的下降沿结束前保持稳定。


2481f483-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


iic头文件2481f484-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


SDA线需要发送数据和接收数据,所以在发送数据时设为输出模式,接受数据时设为输入模式。


2481f485-ac51-11ed-bcd2-b8ca3a6cb5c4.webp2481f486-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


2481f487-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


前面这几条是根据通信协议写的2481f488-ac51-11ed-bcd2-b8ca3a6cb5c4.webp2481f489-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


这里使用I2C与E2PROM(电子可擦除可编程只读存储器)进行通信,可以读写E2PROM。地址位有三个,一个芯片最多能与2^3=8个E2PROM通信,这里将三个地址引脚接地,它的地址就为0。写保护引脚高电平有效(禁止写,只读),低电平失效。


2481f48a-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


2481f48b-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


设备码,读最低位为1,写最低位为02481f48c-ac51-11ed-bcd2-b8ca3a6cb5c4.webp2481f48d-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


根据24C02写的读时序,先是发送起始信号,然后发送设备码0xA0,返回ACK,发送地址,返回ACK,发送起始信号,发送设备码0xA1,返回ACK,读取数据,发送停止信号。


2481f48e-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


根据24C02写的写时序,先是发送起始信号,然后发送设备码0xA0,返回ACK,发送地址,返回ACK,发送字节,返回ACK,发送停止信号。


2481f48f-ac51-11ed-bcd2-b8ca3a6cb5c4.webp


检测24C02是否正常,通过在地址255写一个0x55,来判断24C02是否就绪,如果否的话主函数会不断地循环显示检测失败。今天晚上写的程序在等待应答那部分,还没将SDA设为输入模式,就将SCL拉高,导致返回ACK失败,程序一直卡在检测不到24C02的循环部分。找了一小时的bug,终于找到了。欣喜若狂!


25953460-ac51-11ed-bcd2-b8ca3a6cb5c4.webp25953461-ac51-11ed-bcd2-b8ca3a6cb5c4.webp25953462-ac51-11ed-bcd2-b8ca3a6cb5c4.webp




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。