中级会员
 
- 积分
- 459
- 金钱
- 459
- 注册时间
- 2016-7-7
- 在线时间
- 110 小时
|
发表于 2016-7-22 11:08:16
|
显示全部楼层
虽然过去了几年了,但是还是回复一下,我最近也遇到这个疑问了,原子配置的是推挽,但是网上好多用的是开漏,如你所说开漏输出该怎么读数据呢?我向硬件工程师问过开漏的原理后才明白,开漏输出自己是不能输出高电平,要靠外部上拉电阻,而且自己的管脚能检测到外部电压,配置开漏输出的时候,在receive函数你应该看到一个地方,
u8 I2C_ReceiveByte(void) //数据从高位到低位//
{
u8 i=8;
u8 ReceiveByte=0;
SDA_H;
while(i--)
{
ReceiveByte<<=1;
SCL_L;
I2C_delay();
SCL_H;
I2C_delay();
if(SDA_read)
{
ReceiveByte|=0x01;
}
}
SCL_L;
return ReceiveByte;
}
if(SDA_read)定义为#define SDA_read (GPIOB->IDR & GPIO_Pin_7),就是检测IO口的电平状态,由于开漏的特殊性,当从器件往主器件传输数据的时候,我们检测到的IO状态应该刚好为从器件的输出波形,所以就能读到数据了 |
|