打印
[STM32F1]

I2C的复用开漏输出问题

[复制链接]
4378|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 | 只看该作者
开漏输出加上拉电阻就行

使用特权

评论回复
5
cl1517|  楼主 | 2014-10-21 11:41 | 只看该作者
dingsujie 发表于 2014-10-21 10:08
开漏输出加上拉电阻就行

接口是要双向传递数据,只开漏输出做不到

使用特权

评论回复
6
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);
}
你先按照这个来;让后用逻辑分析仪测下

使用特权

评论回复
7
cl1517|  楼主 | 2014-10-21 16:26 | 只看该作者
dingsujie 发表于 2014-10-21 13:39
/*
* º¯ÊýÃû£ºI2C_GPIO_Config
* ÃèÊö  £ºI2C1 I/OÅäÖÃ

管脚电平一直为高电平。
你们接上拉电阻一般阻值是多少,我接的10K的上拉

使用特权

评论回复
8
dingsujie| | 2014-10-21 16:51 | 只看该作者
cl1517 发表于 2014-10-21 16:26
管脚电平一直为高电平。
你们接上拉电阻一般阻值是多少,我接的10K的上拉 ...

10K可以;不过我习惯4.7K

使用特权

评论回复
9
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

粉丝