GPIO问题

nanjingzhangjun   2008-5-21 14:32 楼主
请教一下。我将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左右的电平。这样的电平对么?

回复评论 (6)

PC6和PC8不是I2C的管脚

                                 外部上拉电阻是多大?
点赞  2008-5-21 15:43

rePC6和PC8不是I2C的管脚

我不是用硬件I2C的。只是用两个GPIO进行模拟的。原先是上拉1K的。
后来把外部上拉到10K后,GPIO口电平拉不下来,在0.5V左右。

但是另外一个问题:在GPIO为开漏配置模式下,不加外部上拉,对它置高,进行验证,应该是低电平的吧。结果有2V左右的电平。这样的电平对么?
点赞  2008-5-21 19:22

配置为开漏模式的GPIO必须外加上拉电阻

一般外部上拉电阻上能够有至少1mA左右的电流,这样看来上拉10K就不够了。

如果配置为开漏模式的GPIO没有加上拉电阻,这个口基本等同于浮空,因此很难确定它的电平数值。
点赞  2008-5-21 21:47

配置为开漏模式的GPIO是要外加上拉电阻

配置为开漏模式的GPIO在应用中是要外加上拉电阻,这个了解。
但如果没外加上拉电阻,GPIO等同浮空,没给它置高时为0V,置高差不多为2V。虽不确定他的电平数值,但它是怎么来的??我给他置高,它应该没有驱动能力拉高吧?会不会是这个原因导致在I2C应答时电平拉不下来呢?
点赞  2008-5-22 10:27

不知道你是想解决实际问题还是要搞清这个工作原理

如果你在开发中有实际的问题要解决,我可以尽力帮助你;但如果是要研究它的实现机制,研究它的工作原理,我就很难帮你了。

你可以看看STM32技术参考手册中第79页的图12,这是一个I/O管脚的内部构造图,也许对你的问题有所帮助。图中可以看到,即使是开路配置,管脚上仍然有两个处于截止的P-MOS和N-MOS管,和两个反相的保护二极管,因为他们的电阻不是无穷大,所以形成一个弱上拉,估计这是你看到现象的原因。
点赞  2008-5-22 10:46

RE

谢谢香主的热心帮助。
正因为开发中有实际问题,才想搞清楚它工作原理。看了那图,也就说它还不是彻彻底底的开漏了。
点赞  2008-5-22 11:00
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复