问题:
对于I2C的SDA和DS18B20的数据线来讲,有时候是输出信号,有时候是输入信号。
疑惑:
51单片机的IO口是通用输入输出,随时可输入或输出,不用设置。
而STM32单片机IO口模式分成了输入模式和输出模式。
难道必须每次操作IO口前都设置下它的工作模式?当设置为输出模式时不能自动的识别输入?
必须执行“IO方向设置”?请高手指导下呗。
泪奔中。。。。
原子哥程序代码:
//IO方向设置
#define DS18B20_IO_IN() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=8<<12;}
#define DS18B20_IO_OUT() {GPIOG->CRH&=0XFFFF0FFF;GPIOG->CRH|=3<<12;}
////IO操作函数
#define DS18B20_DQ_OUT PGout(11) //数据端口 A0
#define DS18B20_DQ_IN PGin(11) //数据端口 A0
u8 DS18B20_Read_Bit(void) // read one bit
{
u8 data;
DS18B20_IO_OUT();//SET PA0 OUTPUT
DS18B20_DQ_OUT=0;
delay_us(2);
DS18B20_DQ_OUT=1;
DS18B20_IO_IN();//SET PA0 INPUT
delay_us(12);
if(DS18B20_DQ_IN)data=1;
else data=0;
delay_us(50);
return data;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
开漏输出 一般用于总线, 输入输出都有上拉驱动, 多个并联在一起。 其它输出为高的时候, 其中一个为低 总线即为低, 而由于有上拉电阻的限流作用,不会烧毁。
一周热门 更多>