二、软件IIC
通过时序电路可以模拟IIC
时序电路可以看之前发的IIC学习之路
直接上代码
1.对IO口进行配置
void OLED_GPIO_Inite(void)
{
GPIO_InitTypeDef OLED_GPIO;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
OLED_GPIO.GPIO_Mode = GPIO_Mode_Out_OD;
OLED_GPIO.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
OLED_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &OLED_GPIO);
OLED_SCL_SET();
OLED_SDA_SET();
}这里以stm32f10x的PB0和PB1为例子
2.模拟起始信号
void OLED_IIC_Start(void)
{
OLED_SCL_SET();
OLED_SDA_SET();
delay_us(1);
OLED_SDA_RESET();
delay_us(1);
OLED_SCL_RESET();
delay_us(1);
}
3.模拟结束信号
void OLED_IIC_End(void)
{
OLED_SDA_RESET();
delay_us(1);
OLED_SCL_SET();
delay_us(1);
OLED_SDA_SET();
delay_us(1);
}
4.模拟应答位
unsigned char OLED_IIC_Ack(void)
{
unsigned char ack;
OLED_SCL_RESET();
delay_us(1);
OLED_SDA_SET();
delay_us(1);
OLED_SCL_SET();
delay_us(1);
if(OLED_SDA_Read())
{
ack = IIC_NACK;
}
else
{
ack = IIC_ACK;
}
OLED_SCL_RESET();
delay_us(1);
return ack;
}
读写字节参考硬件IIC