采用“配置成开漏输出,再外接上拉”的方式,在输出的时候,直接输出,这一点是没有问题。但是在如何读入数据的时候,问题来了:在读取之前,要不要先把STM32的引脚输出高电平?
所以我就做了一个实验,以下是实验内容。
因为本实验的结果是应用于AT24C16,所以实验电路就直接在这个电路图的基础上改的。
上电之后,用万用表测试引脚SCL与引脚SDA的电压,发现不论STM是输出高还是低,SDA和SCL的电压都是是等于STM32输出的,所以可以确定AT24C16的SCL与SDA在刚上电的时候,都是高电平。
然后将SCL与SDA短接,并运行程序
结果:
可以看到读0正确,读1不正确
所以,可以得到结论:要想实现STM引脚即输入又输出,需要:
- 引脚配置成开漏输出
- 外部需要上拉
- 在输入的时候,要先将STM的引脚置高
试验中的错误:
前次实验,我直接把3.3V加到SDA引脚上,再去读取SDA的时候,发现不管有没有把STM的引脚置高,STM读取到的都是1,我所以就很高兴地得到了一个能跟理论不一致的结论:可以直接读取SDA上的数据。
当VCC与GND短接的时候,测得的电压是VCC,这是符合生活经验的,手里攥着220V,脚下踩着GND,结果是会死人的。
![](https://i-blog.csdnimg.cn/blog_migrate/186ab9bbdd16560cd8bc91eabe1018fd.png)
关于进一步了解开漏输出,或STM32引脚的输入输出各种模式,可以参考: