请教一下。我将GPIO设置成如下:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOC, &GPIO_InitStructure);
外加上拉电阻。进行I2C通讯。在应答时设置为:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOC, &GPIO_InitStructure) ;
为什么在I2C应答时,GPIO口电平拉不下来,在1.8V左右。
对于GPIO的设置有问题么???
而且在我GPIO开漏配置模式下,不外部上拉,对它置高,有2V左右的电平。这样的电平对么?
PC6和PC8不是I2C的管脚
外部上拉电阻是多大?
rePC6和PC8不是I2C的管脚
我不是用硬件I2C的。只是用两个GPIO进行模拟的。原先是上拉1K的。
后来把外部上拉到10K后,GPIO口电平拉不下来,在0.5V左右。
但是另外一个问题:在GPIO为开漏配置模式下,不加外部上拉,对它置高,进行验证,应该是低电平的吧。结果有2V左右的电平。这样的电平对么?
配置为开漏模式的GPIO必须外加上拉电阻
一般外部上拉电阻上能够有至少1mA左右的电流,这样看来上拉10K就不够了。
如果配置为开漏模式的GPIO没有加上拉电阻,这个口基本等同于浮空,因此很难确定它的电平数值。
配置为开漏模式的GPIO是要外加上拉电阻
配置为开漏模式的GPIO在应用中是要外加上拉电阻,这个了解。
但如果没外加上拉电阻,GPIO等同浮空,没给它置高时为0V,置高差不多为2V。虽不确定他的电平数值,但它是怎么来的??我给他置高,它应该没有驱动能力拉高吧?会不会是这个原因导致在I2C应答时电平拉不下来呢?
不知道你是想解决实际问题还是要搞清这个工作原理
如果你在开发中有实际的问题要解决,我可以尽力帮助你;但如果是要研究它的实现机制,研究它的工作原理,我就很难帮你了。
你可以看看STM32技术参考手册中第79页的图12,这是一个I/O管脚的内部构造图,也许对你的问题有所帮助。图中可以看到,即使是开路配置,管脚上仍然有两个处于截止的P-MOS和N-MOS管,和两个反相的保护二极管,因为他们的电阻不是无穷大,所以形成一个弱上拉,估计这是你看到现象的原因。
RE
谢谢香主的热心帮助。
正因为开发中有实际问题,才想搞清楚它工作原理。看了那图,也就说它还不是彻彻底底的开漏了。