1.STM32CubeMX配置
就是将PB6.PB7设置为输出模式
2.代码
把i2c通信的驱动文件放进去,在头文件位置添加I2C的头文件
编写读写代码
void x24c02_write(unsigned char address,unsigned char info)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CSendByte(info);
I2CWaitAck();
I2CStop();
}
uint8_t x24c02_read(uint8_t address)
{
unsigned char Val;
I2CStart();
I2CSendByte(0Xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
Val = I2CReceiveByte();
I2CStop();
return (Val);
}
uint8_t Num;
Num = x24c02_read(0X02);
x24c02_write(0X02,++Num);
使用的时候注意要在读写函数后面添加延时函数。
处理第一次上电问题
void Write(unsigned char address,unsigned char info)
{
I2CStart();
I2CSendByte(0Xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CSendByte(info);
I2CWaitAck();
I2CStop();
}
uint8_t Read(unsigned char address)
{
I2CStart();
I2CSendByte(0xa0);
I2CWaitAck();
I2CSendByte(address);
I2CWaitAck();
I2CStop();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
unsigned char val = I2CReceiveByte();
I2CStop();
return val;
}
如果是第一次读取,0x00位置的数值大概率不等于50,然后更改为50,同时将初始值写入;
第二次及以后就直接读取数值。
void Value_Init()
{
if(Read(0x09)!=50)
{
HAL_Delay(10);Write(0x09,50);HAL_Delay(10);
Write(0x00,1); HAL_Delay(10);
sprintf((char*)TX,"%d\r\n",iic_value);
HAL_UART_Transmit_IT(&huart1,TX,strlen((char*)TX));
}
if(Read(0x09)==50)
{
HAL_Delay(10);
iic_value = Read(0x00);HAL_Delay(5);
sprintf((char*)TX,"%d\r\n",iic_value);
HAL_UART_Transmit_IT(&huart1,TX,strlen((char*)TX));
iic_value=iic_value+1;
Write(0x00,iic_value);HAL_Delay(5);
}
}