GD32F130的I2C初始化设置问题

[复制链接]
4503|30
 楼主 | 2014-9-8 12:43 | 显示全部楼层 |阅读模式
我按下面的方法初始化GD32F130的I2C接口,再调用I2C_GenerateSTART(I2C2, ENABLE);发送Start信号,SDA和SCL均无反应,各位大师帮忙看看。
         
void I2C_Configuration(void)
{
        I2C_InitTypeDef  I2C_InitStructure;
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);


                /* Connect pin to Periph */
        GPIO_PinAFConfig( GPIOA , GPIO_PinSource0, GPIO_AF_1 );   
        GPIO_PinAFConfig( GPIOA , GPIO_PinSource1, GPIO_AF_1 );
   

        /* PA0,1 SCL and SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType= GPIO_OType_OD;    //设置管脚为复用功能开漏输出
        GPIO_Init(GPIOA, &GPIO_InitStructure);          //I2C接口使用的GPIO管脚初始化
       
    I2C_DeInit(I2C2);
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;         //设置I2C接口模式
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; //设置I2C接口的高低电平周期
    I2C_InitStructure.I2C_OwnAddress1 = 0x30;          //设置I2C接口的主机地址
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;        //设置是否开启ACK响应         
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 100000;        //100K速度
   
        I2C_Cmd(I2C2, ENABLE);                            //使能I2C接口
        I2C_Init(I2C2, &I2C_InitStructure);               //I2C接口初始化
        /*允许1字节1应答模式*/
        I2C_AcknowledgeConfig(I2C2, ENABLE);              //使能I2C接口响应

}
 楼主 | 2014-9-13 07:57 | 显示全部楼层
补充说明一下,完整的型号是GD32F130C8T6
| 2014-9-13 08:17 | 显示全部楼层
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM32F0系列的例程详解
4.看这个程序,看不出什么问题
| 2014-9-18 22:57 | 显示全部楼层
        /* PA0,1 SCL and SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_OType= GPIO_OType_OD;    //设置管脚为复用功能开漏输出
        GPIO_Init(GPIOA, &GPIO_InitStructure);          //I2C接口使用的GPIO管脚初始化

SCL设置为PP,SDA设置为OD,试试。
 楼主 | 2014-10-2 17:59 | 显示全部楼层
sunmeat 发表于 2014-9-13 08:17
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM3 ...

IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。
 楼主 | 2014-10-2 17:59 | 显示全部楼层
sunmeat 发表于 2014-9-13 08:17
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM3 ...

IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。
 楼主 | 2014-10-2 18:00 | 显示全部楼层
snowylin 发表于 2014-9-18 22:57
/* PA0,1 SCL and SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0 | GPIO_Pin_1;
     ...

按你的方法试过了,没有效果。
| 2014-10-8 15:28 | 显示全部楼层
首先确定I2C接口外部上拉,然后将下面两个函数调换一下顺序试试
I2C_Cmd(I2C2, ENABLE);                            //使能I2C接口
I2C_Init(I2C2, &I2C_InitStructure);               //I2C接口初始化
 楼主 | 2014-10-12 14:45 | 显示全部楼层
xkxxzw 发表于 2014-10-8 15:28
首先确定I2C接口外部上拉,然后将下面两个函数调换一下顺序试试
I2C_Cmd(I2C2, ENABLE);                   ...

谢谢你的回复,这些我都试过了,还是无效。不过我现在用软件模拟的方式可以用了。
| 2015-7-22 11:28 | 显示全部楼层
目前我也遇到这个问题,没有波形输出。。。无语。。。
| 2015-7-25 14:56 | 显示全部楼层
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;        //设置是否开启ACK响应   
ACK响应的很重要。
| 2015-11-3 10:12 | 显示全部楼层
我也有遇到过相同的问题。

现象就是IIC一直在处于忙的状态,开始位都不能发送成功,觉得有点离谱,之前用使stm32f030c8t6一点问题都没有。

最快捷有效的办法,就是使用软件模拟。
| 2015-11-3 10:33 | 显示全部楼层
xzhihui 发表于 2015-11-3 10:12
我也有遇到过相同的问题。

现象就是IIC一直在处于忙的状态,开始位都不能发送成功,觉得有点离谱,之前用 ...

求软件模拟程序,谢谢,I2C发不了   
| 2015-11-4 16:57 | 显示全部楼层
需修改AF配置,
PA0:AF_4(I2C_SCL)
PA1:AF_4(I2C_SDA)
| 2015-11-7 15:52 | 显示全部楼层
I2C_InitTypeDef  I2C_InitStructure;
        GPIO_InitTypeDef  GPIO_InitStructure;
这个定义的一定要仔细的
| 2015-11-7 16:41 | 显示全部楼层
恋离1 发表于 2015-11-4 16:57
需修改AF配置,
PA0:AF_4(I2C_SCL)
PA1:AF_4(I2C_SDA)

楼上看的很仔细的,这个很不错。
| 2016-1-15 10:10 | 显示全部楼层
I2C_Cmd(I2C2, ENABLE);                            //使能I2C接口
I2C_Init(I2C2, &I2C_InitStructure);               //I2C接口初始化

两行代码需要换个顺序。
| 2016-1-15 21:36 | 显示全部楼层
ranlk1 发表于 2014-10-2 17:59
IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。 ...

这个用示波器的观察下的啦。
| 2016-1-15 21:55 | 显示全部楼层
GPIO_PinAFConfig( GPIOA , GPIO_PinSource0, GPIO_AF_1 );   
        GPIO_PinAFConfig( GPIOA , GPIO_PinSource1, GPIO_AF_1 );

这两句的就是选用IO口的第二功能的。
| 2016-1-19 23:02 | 显示全部楼层
这个注意第二功能的设置的。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表