STM32中的IIC可分为硬件IIC和软件IIC,但实际应用中更倾向于软件IIC。即可自行指定两个端口为数据线和时钟线进行IIC的模拟。但是相对于52单片机的IIC协议,STM32的IIC时序操作完全一致,唯一的差别在与STM32需要对端口的信号输入输出端口进行配置。
IIC总线协议之起始信号: IIC的启动实在SDA和SCL均为高电平期间,SDA拉低后SCL接着拉低。
void IIC_Start(void)
{
SDA_OUT(); // 配置SDA为输出模式
SDA_SET;
SCL_SET; // 初始状态SDA、SCL均为高电平
delay_us(5);
SDA_CLR; // SDA拉低
delay_us(5); // 延时5us以上
SCL_CLR;
}
IIC总线协议之停止信号:IIC的停止是发生在SCL为高电平期间,SDA突然拉高。
void IIC_Stop(void)
{
SDA_OUT();
SDA_CLR;
SCL_SET;
delay_us(5);
SDA_SET;
delay_us(5);
}
IIC总线协议之伪造应答:IIC从器件的应答主要是发生在SCL为高电平期间,SDA为低电平,延时5us以后SCL拉低。
void IIC_Ack(void)
{
SDA_OUT();
SDA_CLR;
SCL_SET;
delay_us(5);
SCL_CLR;
delay_us(5);
}
IIC总线协议之伪造非应答:IIC器件的非应答是指在SCL为高电平期间,SDA也为高电平,延时5us以后SC