打印

GD32F130的I2C初始化设置问题

[复制链接]
7670|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ranlk1|  楼主 | 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接口响应

}
沙发
ranlk1|  楼主 | 2014-9-13 07:57 | 只看该作者
补充说明一下,完整的型号是GD32F130C8T6

使用特权

评论回复
板凳
sunmeat| | 2014-9-13 08:17 | 只看该作者
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM32F0系列的例程详解
4.看这个程序,看不出什么问题

使用特权

评论回复
地板
snowylin| | 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,试试。

使用特权

评论回复
5
ranlk1|  楼主 | 2014-10-2 17:59 | 只看该作者
sunmeat 发表于 2014-9-13 08:17
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM3 ...

IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。

使用特权

评论回复
6
ranlk1|  楼主 | 2014-10-2 17:59 | 只看该作者
sunmeat 发表于 2014-9-13 08:17
1.你抓波形,波形和预先配置好的是否一致
2.你烧官方给的程序看看试试
3.着重看你的硬件问题,可以参考STM3 ...

IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。

使用特权

评论回复
7
ranlk1|  楼主 | 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;
     ...

按你的方法试过了,没有效果。

使用特权

评论回复
8
xkxxzw| | 2014-10-8 15:28 | 只看该作者
首先确定I2C接口外部上拉,然后将下面两个函数调换一下顺序试试
I2C_Cmd(I2C2, ENABLE);                            //使能I2C接口
I2C_Init(I2C2, &I2C_InitStructure);               //I2C接口初始化

使用特权

评论回复
9
ranlk1|  楼主 | 2014-10-12 14:45 | 只看该作者
xkxxzw 发表于 2014-10-8 15:28
首先确定I2C接口外部上拉,然后将下面两个函数调换一下顺序试试
I2C_Cmd(I2C2, ENABLE);                   ...

谢谢你的回复,这些我都试过了,还是无效。不过我现在用软件模拟的方式可以用了。

使用特权

评论回复
10
heqiaosheng| | 2015-7-22 11:28 | 只看该作者
目前我也遇到这个问题,没有波形输出。。。无语。。。

使用特权

评论回复
11
zhangbo1985| | 2015-7-25 14:56 | 只看该作者
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;        //设置是否开启ACK响应   
ACK响应的很重要。

使用特权

评论回复
12
xzhihui| | 2015-11-3 10:12 | 只看该作者
我也有遇到过相同的问题。

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

最快捷有效的办法,就是使用软件模拟。

使用特权

评论回复
13
向楠| | 2015-11-3 10:33 | 只看该作者
xzhihui 发表于 2015-11-3 10:12
我也有遇到过相同的问题。

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

求软件模拟程序,谢谢,I2C发不了   

使用特权

评论回复
14
恋离1| | 2015-11-4 16:57 | 只看该作者
需修改AF配置,
PA0:AF_4(I2C_SCL)
PA1:AF_4(I2C_SDA)

使用特权

评论回复
15
zhangbo1985| | 2015-11-7 15:52 | 只看该作者
I2C_InitTypeDef  I2C_InitStructure;
        GPIO_InitTypeDef  GPIO_InitStructure;
这个定义的一定要仔细的

使用特权

评论回复
16
tongbu2015| | 2015-11-7 16:41 | 只看该作者
恋离1 发表于 2015-11-4 16:57
需修改AF配置,
PA0:AF_4(I2C_SCL)
PA1:AF_4(I2C_SDA)

楼上看的很仔细的,这个很不错。

使用特权

评论回复
17
xwindow| | 2016-1-15 10:10 | 只看该作者
I2C_Cmd(I2C2, ENABLE);                            //使能I2C接口
I2C_Init(I2C2, &I2C_InitStructure);               //I2C接口初始化

两行代码需要换个顺序。

使用特权

评论回复
18
vivilzb1985| | 2016-1-15 21:36 | 只看该作者
ranlk1 发表于 2014-10-2 17:59
IO口一点动静都没有,抓不到波形。我用的就是官方例程,只不过IO换了一下。 ...

这个用示波器的观察下的啦。

使用特权

评论回复
19
vivilzb1985| | 2016-1-15 21:55 | 只看该作者
GPIO_PinAFConfig( GPIOA , GPIO_PinSource0, GPIO_AF_1 );   
        GPIO_PinAFConfig( GPIOA , GPIO_PinSource1, GPIO_AF_1 );

这两句的就是选用IO口的第二功能的。

使用特权

评论回复
20
smilingangel| | 2016-1-19 23:02 | 只看该作者
这个注意第二功能的设置的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝