STM32 IIC讀取AT24C02
1、數(shù)量:I2C1與I2C2
2、時(shí)鐘: RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 |RCC_APB1Periph_I2C2,ENABLE);
3、IO配置為開漏輸出,在輸入時(shí)亦可讀取,此處使用功能復(fù)用。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE );
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB, &GPIO_InitStructure);
4、IIC本身配置
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C ; //配置為普通IIC模式
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x0a; //自身設(shè)備地址
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; //使能自動應(yīng)答
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 5000; //40K的速度?
I2C_Init(I2C1, &I2C_InitStructure);
I2C_Cmd(I2C1,ENABLE);
I2C_AcknowledgeConfig(I2C1, ENABLE);
5、IIC讀取一個(gè)字節(jié):生成一個(gè)起始信號-》發(fā)送命令碼-》等待信號-》發(fā)送地址-》發(fā)送起始信號-》發(fā)送讀取命令-》接收數(shù)據(jù)-》發(fā)送發(fā)送終止信號-》讀取寄存器接收值 么一步都有應(yīng)答信號,是從設(shè)備發(fā)送的一個(gè)低信號。
vu8 IIC_Read(vu8 addr)
{
vu8 dataValue;
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
I2C_GenerateSTART(I2C1,ENABLE);//起始信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,ATMADDR,I2C_Direction_Transmitter);//發(fā)送設(shè)備地址+寫信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//
I2C_Cmd(I2C1,ENABLE);
I2C_SendData(I2C1,addr);//發(fā)送存儲單元地址,從0開始
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTART(I2C1,ENABLE);//起始信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,ATMADDR,I2C_Direction_Receiver);//發(fā)送設(shè)備地址+讀信號
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
I2C_AcknowledgeConfig(I2C1,DISABLE);
I2C_GenerateSTOP(I2C1,ENABLE);
while(!(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)));
dataValue=I2C_ReceiveData(I2C1);//讀出寄存器數(shù)據(jù)
return dataValue;
}
6、寫一個(gè)字節(jié):產(chǎn)生起始信號-》發(fā)送設(shè)備號+指令-》發(fā)送地址-》產(chǎn)生起始信號-》讀取數(shù)據(jù)-》產(chǎn)生結(jié)束信號
void IIC_Write(vu8 addr,vu8 dataValue)
{
I2C_GenerateSTART(I2C1,ENABLE);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(I2C1,ATMADDR,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
I2C_SendData(I2C1,addr);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C1,dataValue);
while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_GenerateSTOP(I2C1,ENABLE);
}
7、AT24C02相關(guān)
2K大?。?56*8bits 也就是256頁,每頁8個(gè)bits
地址從0x00開始到0xff個(gè)字節(jié)