[STM32F1] I2C的复用开漏输出问题

[复制链接]
4779|8
 楼主| cl1517 发表于 2014-10-20 15:45 | 显示全部楼层 |阅读模式

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | \
                           RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD,\
                           ENABLE);
    //Æô¶¯AFIO
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
   
  RCC_APB2PeriphClockCmd(TP_I2C_SCL_GPIO_CLK | TP_I2C_SDA_GPIO_CLK , ENABLE);  
  GPIO_InitStructure.GPIO_Pin = TP_I2C_SCL_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
  GPIO_Init(TP_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);

  /*!< Configure TP_I2C pins: SDA */
  GPIO_InitStructure.GPIO_Pin = TP_I2C_SDA_PIN;
  GPIO_Init(TP_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);

  最近调试stm32的i2c,按照演示例程设置管脚定义如上(外部已接上拉电阻)。但检测发现SCL和SDA脚一直为低电平。
将管脚输出模式改为GPIO_Mode_Out_OD(开漏输出)后输出高低电平正常。是我哪个地方忘设置了吗?
mmuuss586 发表于 2014-10-20 18:40 | 显示全部楼层
双向IO的话,比如SDA脚,设置成浮空输入;
 楼主| cl1517 发表于 2014-10-21 09:08 | 显示全部楼层
mmuuss586 发表于 2014-10-20 18:40
双向IO的话,比如SDA脚,设置成浮空输入;

如果设为浮空输入的话,到时不是需要选输出。输入输出转换不会感觉有点麻烦吗?
我现在好奇的是设为复用开漏输出(已加上拉)后管脚输出电平会一直为低.
dingsujie 发表于 2014-10-21 10:08 | 显示全部楼层
开漏输出加上拉电阻就行
 楼主| cl1517 发表于 2014-10-21 11:41 | 显示全部楼层
dingsujie 发表于 2014-10-21 10:08
开漏输出加上拉电阻就行

接口是要双向传递数据,只开漏输出做不到
dingsujie 发表于 2014-10-21 13:39 | 显示全部楼层
cl1517 发表于 2014-10-21 11:41
接口是要双向传递数据,只开漏输出做不到

/*
* º¯ÊýÃû£ºI2C_GPIO_Config
* ÃèÊö  £ºI2C1 I/OÅäÖÃ
* ÊäÈë  £ºÎÞ
* Êä³ö  £ºÎÞ
* µ÷Óà £ºÄÚ²¿µ÷ÓÃ
*/
static void I2C_GPIO_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

        /* ʹÄÜÓë I2C1 ÓйصÄʱÖÓ */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);  
   
  /* PB6-I2C1_SCL¡¢PB7-I2C1_SDA*/
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;               // ¿ªÂ©Êä³ö
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}
你先按照这个来;让后用逻辑分析仪测下
 楼主| cl1517 发表于 2014-10-21 16:26 | 显示全部楼层
dingsujie 发表于 2014-10-21 13:39
/*
* º¯ÊýÃû£ºI2C_GPIO_Config
* ÃèÊö  £ºI2C1 I/OÅäÖÃ

管脚电平一直为高电平。
你们接上拉电阻一般阻值是多少,我接的10K的上拉
dingsujie 发表于 2014-10-21 16:51 | 显示全部楼层
cl1517 发表于 2014-10-21 16:26
管脚电平一直为高电平。
你们接上拉电阻一般阻值是多少,我接的10K的上拉 ...

10K可以;不过我习惯4.7K
yang4469 发表于 2014-10-22 10:41 | 显示全部楼层
cl1517 发表于 2014-10-21 16:26
管脚电平一直为高电平。
你们接上拉电阻一般阻值是多少,我接的10K的上拉 ...

上啦电阻最好是5v 4.7k ,3.3v  3k 电流不能超过300mA
F1的I2C  IO口的配置为GPIO_Mode_AF_OD
可以参考官网的i2c例子:AN2824或者stsw-stm32020、stsw-stm32094(这个是I2C的iap)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

18

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部