[mw_shl_code=c,true]u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //
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;//
return 0;
} [/mw_shl_code]
在这个函数中,SDA_IN(); //将SDA设置成输入,然后执行IIC_SDA=1,是什么意思?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我也突然发现这个表面上的逻辑矛盾,你明白了吗?有没有大神解答一下疑惑!
哈哈,看来大家都是脑子突然乱了,自己回去看了一眼,顺便解答一下(有问题请大家及时指正,只是自己的看法)
另外一个帖中原子哥回复网友的话,看了大概有一点开壳。另外原子哥让我们回去看按键实验教程,
但是貌似教程也没有展开得太详细,因为重点都是在讲程序上了。而且开发指南也只是说了输入配置下,
对输入数据寄存器可读。如下图:
看看GPIO口的寄存器,其中端口模式寄存器决定是输入还是输出,另外,输入输出数据寄存器应该也还是可以
单独进行读或者写(输入数据寄存器只能读),这样根据原理图,输入模式下,使输出数据寄存器为1,,代表一个上拉,输入数据寄存器也是1,
就默认是IIC接受的无应答信号,在等待一个为0的应答信号。
[mw_shl_code=c,true]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;
} [/mw_shl_code]
IIC_SCL是PB8的输出数据,IIC_SDA是PB9的输出数据
[mw_shl_code=applescript,true]//IO方向设置
#define SDA_IN() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;} //PB9输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //PB9输出模式
//IO操作函数
#define IIC_SCL PBout(8) //SCL
#define IIC_SDA PBout(9) //SDA
#define READ_SDA PBin(9) //输入SDA [/mw_shl_code]
其实,疑问又有了,这个时候上下拉寄存器是干在干嘛的?
希望大家帮忙看一下我的回答有没有大问题,另外最后一个红 {MOD}的问题怎么理解
一周热门 更多>