前言
前面我们配置了LCD显示模块,本节我们学习配置iic模块对于EEPROM的通信。
I2C
1.原理图以及配置元素
分析:
由PB6、PB7IO口实现iic通信
2.Cubemx实现IO的配置
IO配置如下:
PB6、PB7为输出模式(其他参数均可不做修改)
3.生成工程
工程生成方法上节以及说明了┗|`O′|┛ 嗷~~
本例程,我们仍将代码放在function文件中
注:官方会提供i2c的驱动代码,大家添加到自己的工程即可。
我们先在function中写iic的读函数和写函数嗷
void IIC_Write(uint8_t address, uint8_t data)
{
I2CStart();
I2CSendByte(0xA0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CSendByte(data);
I2CWaitAck();
I2CStop();
}
uint8_t IIC_Read(uint8_t address)
{
uint16_t data;
I2CStart();
I2CSendByte(0xA0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CStart();
I2CSendByte(0xA1);
I2CWaitAck();
data = I2CReceiveByte();
I2CSendNotAck();
I2CStop();
return data;
}
iic测试代码如下:
代码如下:
aa = 14;
bb = 13;
IIC_Write(0xA3,bb);HAL_Delay(10);
IIC_Write(0xA4,aa);HAL_Delay(10);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
aa = IIC_Read(0xA3);HAL_Delay(10);
bb = IIC_Read(0xA4);HAL_Delay(10);
if(aa == 13 && bb == 14)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8 |GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
总结
以上就是iic的配置以及测试代码。
骚年、点个赞再走吧!