IIC_Wait_Ack()函数中为什么把sda设成输入以后还执行IIC_SDA=1

2019-08-17 09:23发布

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;   }


IIC_Wait_Ack()函数中为什么把sda设成输入以后还执行IIC_SDA=1,这个时候sda端口相当于一个输入口,把sda设成1没用把


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
正点原子
1楼-- · 2019-08-17 13:44
回复【楼主位】zjtzlqr:
---------------------------------
提供一个上拉。
gxuan1
2楼-- · 2019-08-17 18:50
回复【2楼】正点原子:
---------------------------------
我也有这个疑问,IIC_SDA=1等于是PAout()=1,但是这个时候寄存器被设置为输入状态,这个PAout()还起作用吗,具体是怎么个机理……
正点原子
3楼-- · 2019-08-17 21:41
回复【3楼】gxuan1:
---------------------------------
学会STM32的IO先。
好好看看我们的教程,按键输入实验。就知道在输入模式下,ODR可能有什么用!
gxuan1
4楼-- · 2019-08-17 22:57
恩,我再去看看……
gxuan1
5楼-- · 2019-08-18 04:05
 精彩回答 2  元偷偷看……
zjtzlqr
6楼-- · 2019-08-18 08:05
回复【4楼】正点原子:
---------------------------------
看了一下stm32的中文参考手册,里面的端口位配置表里面又讲到上拉下拉输入模式中ODR寄存器为0代表下拉输入,ODR寄存器为1代表上拉输入,这里在等待ACK的时候确实需要把odr寄存器置1.这样的画如果从器件有发送ack的话mcu就会收到

一周热门 更多>