STMF4的I2C程序和C51I2C程序的区别

2019-07-20 17:28发布

举个例子:结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。 这是库函数指南上写的 ,正确I2C协议
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;                                                                                                     一开始SCL,SDA是低电平,延时4US  SCL变高电平,然后SDA变高电平,延时。这能识别出来结束信号吗?
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);
这是我以前看到用C51写的
void ADXL345_Stop()
{
    SDA = 0;                    //拉低数据线                     先让SCL变高,然后延时,SDA再拉高。 同样是SCL先高SDA再高,但我总觉得这个更符合,或是更安全。。。
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    SDA = 1;                    //产生上升沿
    Delay5us();                 //延时
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
我要学习嵌入式
1楼-- · 2019-07-20 23:01
 精彩回答 2  元偷偷看……
lvehe
2楼-- · 2019-07-20 23:34
void ADXL345_Stop()
如果之前SCL是高电平,那么SDA拉低的话就会被认为是Start了。所以先拉低SCL比较保险。
但不加一般也是没有问题的。因为如果一直按照流程来运行,Start,发送、接收 数据和Ack/nack最后都会拉低SCL。所以通常发送Stop之前SCL已经是低电平了。

一周热门 更多>