关于理解端口复用和I2C从机应答函数的疑问

2019-08-14 07:26发布

【问题1】使用I2C的时候,IIC_SCL和IIC_SDA分别连到PB6和PB7上,这时PB6和PB7是不是不能作为普通IO口用了呢,那是不是属于端口复用呢?
【问题2】I2C例程里面的等待从机应答的函数中,SDA_IN()这句意思是把PB7设置为上拉/下拉输入模式,紧接着下一句是IIC_SDA=1即输出高电平,请问既然是输入模式了那怎么能让IIC_SDA输出高电平呢,而且在这里SDA为什么设置成高电平而不是低电平呢?下面附上这部分例程代码。
u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();      //SDA设置为输入  
        IIC_SDA=1;delay_us(1);          
        IIC_SCL=1;delay_us(1);         
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=0;//时钟输出0           
        return 0;  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
hgr211
1楼-- · 2019-08-14 11:01
=1的意思是释放控制线,让sda受从机控制,回复应答信号。
zhengsize
2楼-- · 2019-08-14 13:12
hgr211 发表于 2017-8-19 08:10
=1的意思是释放控制线,让sda受从机控制,回复应答信号。

在输入模式下主机还能控制SDA让其释放吗?
Acuity
3楼-- · 2019-08-14 18:57
1、模拟i2c没有用到复用功能,如果用其硬件i2c就用到复用功能;一般情况下,同一io口用其单一功能,比如2个io可以设置为uart又可以设置为i2c,一般只用其中一个功能,当然2个分时用也学也可以,但没必要;
2、模拟i2c io设置为开漏模式无须切换输入输出。
hgr211
4楼-- · 2019-08-14 23:17
 精彩回答 2  元偷偷看……

一周热门 更多>