【希望原子越来越好】关于IIC实验的疑惑?

2019-08-16 20:16发布

1.PNG
初始化IIC时候,我们已经默认SCL和SDL是推挽输出。
2.PNG
在头文件中我们设置SDL为输入或者输出。
1.PNG
问题是
在应答模式下,我们首先设置SDA是输入模式。怎么后边还能写IIC_SDA=1(这个不是输出模式吗?)
我觉得应该先写成:   先是输出,然后再改变成输入模式。
                        IIC_SDA=1;delay_us(1);          
                        IIC_SCL=1;delay_us(1);       
                        SDA_IN();   
不知道原子大哥,这么安排有什么特殊的地方吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
正点原子
1楼-- · 2019-08-16 22:37
 精彩回答 2  元偷偷看……
stm32fans
2楼-- · 2019-08-17 02:15
个人感觉如果很规范的写应该是下面这样吧:
SDA_OUT();
IIC_SDA=1;delay_us(1);           
IIC_SCL=1;delay_us(1);      
SDA_IN();   
沉默的疯狂
3楼-- · 2019-08-17 04:48
释放总线
谦190
4楼-- · 2019-08-17 10:17
stm32fans 发表于 2016-7-29 11:45
个人感觉如果很规范的写应该是下面这样吧:
SDA_OUT();
IIC_SDA=1;delay_us(1);           

这样也可以,其实默认的情况是初始化已经推挽输出了。
1376115749
5楼-- · 2019-08-17 12:40
这个目的是为了释放总线,如果你在设置成输入的时候,然后设置SDA成高电平,发送应答信号的器件在SCL变成高的时候可以拉低SDA,如果写成你的那种方式,在SCL变成高的时候,SDA_IN()还没有设置,这样应答器件就没法拉低SDA了,数据就通信错误了
谦190
6楼-- · 2019-08-17 16:13
 精彩回答 2  元偷偷看……

一周热门 更多>