stm8s105c6硬件I2C例子

IDE:IAR
MCU:STM8S105C6
外设IC:PL1167(2.4GRF)
下面贡献一下两个关键函数
void Write2Byte(u8 RomAddress,u8 v1,u8 v2)
{
SS_ENABLE;
I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_TX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
I2C_SendData(RomAddress);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));
I2C_SendData(v1);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));
I2C_SendData(v2);
while(!I2C_GetFlagStatus(I2C_FLAG_TRANSFERFINISHED));
I2C_GenerateSTOP(ENABLE);
SS_DISABLE;
}

u16 PL1167_Read2Byte(u8 RomAddress)
{
u8 dat1,dat2;
u16 dat;
dat1=0;
dat2=0;
dat=0;
SS_ENABLE;
I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_TX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
I2C_SendData(RomAddress);
while(!I2C_GetFlagStatus(I2C_FLAG_TXEMPTY));

I2C_GenerateSTART(ENABLE);
while(!I2C_GetFlagStatus(I2C_FLAG_STARTDETECTION));
I2C_Send7bitAddress(DeviceAddress, I2C_DIRECTION_RX);
while(!I2C_GetFlagStatus(I2C_FLAG_ADDRESSSENTMATCHED));
I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);// must add
while(!I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY));
I2C_AcknowledgeConfig(I2C_ACK_CURR);
dat1=I2C_ReceiveData();
I2C_AcknowledgeConfig(I2C_ACK_NONE);
while(!I2C_GetFlagStatus(I2C_FLAG_RXNOTEMPTY));
dat2=I2C_ReceiveData();
I2C_GenerateSTOP(ENABLE);
dat|=dat1;
dat<<=8;
dat|=dat2;
SS_DISABLE;
return dat;
}

相关文档
最新文档