STM32_IIC
一.介绍
1.1 IIC总线协议介绍
IIC:Inter Integrated Circuit,集成电路总线,是一种同步 串行 半双工通信总线。
1.2 IIC结构图

1.3 IIC协议

IIC协议时序:

信号类型 | SCL | SDA |
起始信号 | 高电平 | 由高向低 |
停止信号 | 高电平 | 由低向高 |
应答信号 | 高电平 | 低电平 |
起始和停止信号:

应答和非应答信号:

发送数据:

二.AT24C02介绍
EEPROM是一种掉电后数据不丢失的储存器,常用来存储一些配置信息,在系统重新上电时就可以加载。
AT24C02是一个2K bit的EEPROM存储器,使用IIC通信方式。

A0/1/2 : 设备地址决定引脚
SCL : 时钟线
WP : 写保护引脚
SDA : 数据线

AT24Cxx | 容量(bit) | 页数 | 页内字节数 | 数据地址(占用bit数) |
AT24C01 | 1K bit (128 B) | 16 | 8 Byte | 7bit |
AT24C02 | 2K bit (256 B) | 32 | 8 Byte | 8bit |
AT24C04 | 4K bit (512 B) | 32 | 16 Byte | 9bit |
AT24C08 | 8K bit (1024 B) | 64 | 16 Byte | 10bit |
AT24C16 | 16K bit (2048 B) | 128 | 16 Byte | 11bit |
AT24C32 | 32K bit (4096 B) | 128 | 32 Byte | 12bit |
AT24C64 | 64K bit (8192 B) | 256 | 32 Byte | 13bit |
AT24C128 | 128K bit (16384 B) | 256 | 64 Byte | 14bit |
AT24C256 | 256K bit (32768 B) | 512 | 64 Byte | 15bit |
AT24C512 | 512K bit (65535 B) | 512 | 128 Byte | 16bit |
AT24C02通讯地址:



三.AT24C02的读写和驱动
3.1 AT24C02的读写
写操作:
T24C02支持字节写模式和页写模式。
字节写模式就是一个地址一个数据进行写入。
页写模式就是连续写入数据。只需要写一个地址,连续写入数据时地址会自增,但存在页的限制,超出一页时,超出数据覆盖原先写入的数据。但读会自动翻页。

读操作:
AT24C02支持当前地址读模式,随机地址读模式和顺序读模式。
当前读模式是基于上一次读/写操作的最后位置继续读出数据。
随机地址读模式是指定地址读出数据。
顺序读模式是连续读出数据。

3.2AT24C02驱动步骤
3.2.1软硬件比较
IIC | 用法 | 速度 | 稳定性 | 管脚 |
硬件IIC | 比较复杂 | 快 | 较稳定 | 需使用特定管脚 |
软件IIC | 操作过程比较清晰 | 较慢 | 稳定 | 任意管脚,比较灵活 |
分类 | AT24C02****模块引脚 | |||
供电脚(3.3V) | 时钟线(SCL) | 数据线(SDA) | 地(GND) | |
MINI板 | VCC | PC12 | PC11 | GND |
精英板 | VCC | PB6 | PB7 | GND |
战舰板 | VCC | PB6 | PB7 | GND |
探索板 | VCC | PB8 | PB9 | GND |
阿波罗 | VCC | PH4 | PH5 | GND |
北极星 | VCC | PH4 | PH5 | GND |
MINIPro H750 | VCC | PB10 | PB11 | GND |
四.IIC相关库函数
IIC写函数:
函数:HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
功能:IIC写数据
参数:
*hi2c 设置使用的是那个IIC 例:&hi2c2
DevAddress 写入的地址 设置写入数据的地址 例 0xA0
*pData 需要写入的数据
Size 要发送的字节数
Timeout 最大传输时间,超过传输时间将自动退出传输函数
IIC读函数
函数:HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
功能:IIC读一个字节
参数:
*hi2c: 设置使用的是那个IIC 例:&hi2c2
DevAddress: 写入的地址 设置写入数据的地址 例 0xA0
*pDat:a 存储读取到的数据
Size: 发送的字节数
Timeout: 最大读取时间,超过时间将自动退出读取函数
IIC写数据函数
函数:HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
功能: IIC写多个数据 该函数适用于IIC外设里面还有子地址寄存器的设备,比方说E2PROM,除了设备地址,每个存储字节都有其对应的地址
参数:
*hi2c: I2C设备号指针,设置使用的是那个IIC 例:&hi2c2
DevAddress: 从设备地址 从设备的IIC地址 例E2PROM的设备地址 0xA0
MemAddress: 从机寄存器地址 ,每写入一个字节数据,地址就会自动+1
MemAddSize: 从机寄存器地址字节长度 8位或16位
写入数据的字节类型 8位还是16位
I2C_MEMADD_SIZE_8BIT
I2C_MEMADD_SIZE_16BIT
在stm32f1xx_hal_i2c.h中有定义
*pData: 需要写入的的数据的起始地址
Size: 传输数据的大小 多少个字节
Timeout: 最大读取时间,超过时间将自动退出函数