STM32 IIC 时序

起始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。
停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。

//产生IIC起始信号
void IIC_Start(void)
{
    SDA_OUT();  //sda线输出
    IIC_SDA=1;   // 拉高数据线        
    IIC_SCL=1;   // 拉高时钟线
    delay_us(4); //延迟 ,延迟是有必要的,参照I2C协议写的
     IIC_SDA=0; //START:when CLK is high,DATA change form high to low ,触发通讯
    delay_us(4);
    IIC_SCL=0; / / ?钳住I2C总线,准备发送或接收数据,方便数据线上的数据变化
}     

//产生IIC停止信号
void IIC_Stop(void)
{
    SDA_OUT();//sda线输出
    IIC_SCL=0; // ?
    IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
     delay_us(4);
    IIC_SCL=1;
    IIC_SDA=1;//发送I2C总线结束信号
    delay_us(4);                                   
}

REF

https://zhuanlan.zhihu.com/p/338377414

原文地址:https://www.cnblogs.com/emanlee/p/14265008.html