单个I/O既做输入口又做输出口使用问题的请教

2019-08-23 15:25发布

问题:
     对于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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
lqz9057
1楼-- · 2019-08-25 08:48
回复【13楼】aleda303:
---------------------------------
我已经实际测试了,“STM32 的IO 配置为 开漏+上拉电阻 方式”进行输入输出可行。
但是就是不知道假如STM32在IO口上输出了低电平,此时N-MOS导通了,那么下一时刻从外部引脚给了个高电平。

这是,内部的N-MOS就承担了“高”“低”电平的电压差,会过流烧坏么?

不敢实验。

我测试时是在输入前程序输出高,把N-MOS截止了。
aleda303
2楼-- · 2019-08-25 14:04
很有可能。 

开漏输出 一般用于总线, 输入输出都有上拉驱动, 多个并联在一起。  其它输出为高的时候, 其中一个为低 总线即为低, 而由于有上拉电阻的限流作用,不会烧毁。
lqz9057
3楼-- · 2019-08-25 18:41
回复【15楼】aleda303:
---------------------------------
嗯 有道理。

使用的地方不同,效果不同。
通用输入输出时,还是小心为妙。
wyudcl
4楼-- · 2019-08-25 23:25
我也在找这个问题的答案,谢谢楼主分享。
wyudcl
5楼-- · 2019-08-26 03:04
 精彩回答 2  元偷偷看……
youhm
6楼-- · 2019-08-26 05:51
回复【18楼】wyudcl:
---------------------------------
设开漏输出即可,外部接上拉电阻。

一周热门 更多>