野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 26832|回复: 13

求助各位大神 I2C的问题

[复制链接]
发表于 2014-6-3 21:05:29 | 显示全部楼层 |阅读模式
本帖最后由 侯希白 于 2014-6-6 19:06 编辑

我想用STM32F103VET6控制 I2C接口的数字电位器 X9119 。
不知道怎么控制,谁可以帮我下。
主要是时序我都知道,我也看了野火的I2C的E2PROM的DEMO,
我想用DEMO改下 来控制X9119 但是不得要领,谁知道麻烦告知下。
时序图我已经发上来了。
求哪位大神指点下
我用的是I2C 2接口  PB10.PB11,改的野火 I2C  E2PROM。DEMO
static void I2C_GPIO_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;

        /* 使能与 I2C1 有关的时钟 */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2,ENABLE);  

  /* PB6-I2C1_SCL、PB7-I2C1_SDA*/
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_10| GPIO_Pin_11;  就是改个接口其他没变
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;               // 开漏输出
  GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/*
* 函数名:I2C_Configuration
* 描述  :I2C 工作模式配置
* 输入  :无
* 输出  :无
* 调用  :内部调用
*/
static void I2C_Mode_Configu(void)
{
  I2C_InitTypeDef  I2C_InitStructure;

  /* I2C 配置 */
  I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStructure.I2C_OwnAddress1 =I2C1_OWN_ADDRESS7; //地址我已经改了
  I2C_InitStructure.I2C_Ack = I2C_Ack_Enable ;
  I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;

  /* 使能 I2C1 */
  I2C_Cmd(I2C2, ENABLE);

  /* I2C1 初始化 */
  I2C_Init(I2C2, &I2C_InitStructure);
}

改的是GPIO,不知道有没有问题。
重要就是下面
void I2C_TIST(void)
{
    while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY)); // Added by Najoua 27/08/2008

  /* Send START condition */
  I2C_GenerateSTART(I2C2, ENABLE);

  /* Test on EV5 and clear it */
  while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));

  /* Send EEPROM address for write */
  I2C_Send7bitAddress(I2C2,0X50, I2C_Direction_Transmitter);//地址为01010000

  /* Test on EV6 and clear it */
  while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));  

  /* Send the EEPROM's internal address to write to */   
  I2C_SendData(I2C2, 0xC0);  //写寄存器

  /* Test on EARM and clear it */
  while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C2, 0x00);  //写寄存器数据

  /* Test on EARM and clear it */
  while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
I2C_SendData(I2C2, 0xFF);  //写寄存器数据

  /* Test on EARM and clear it */
  while(! I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  /* Send STOP condition */
  I2C_GenerateSTOP(I2C2, ENABLE);
}
上面的我就不知道怎么改了,

希望大神告知
送大家代码生产器


X9119读写指令

X9119读写指令

X9119的时序图

X9119的时序图

24C02的时序图

24C02的时序图

X9119.pdf

281.77 KB, 下载次数: 13

X9119英文资料

STM32F1库函数代码自动生成器正式版.zip

763.79 KB, 下载次数: 9

回复

使用道具 举报

发表于 2014-6-4 09:08:46 | 显示全部楼层
野火的时序都写好了,你现在只要调用函数读写寄存器来控制就可以了,具体要根据文档里的说明来操作
回复 支持 反对

使用道具 举报

发表于 2014-6-4 11:04:36 | 显示全部楼层
直接套用野火的底层,你只需要更改命令就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-4 12:49:36 | 显示全部楼层
本帖最后由 侯希白 于 2014-6-4 12:51 编辑

我就是不会改,所以困惑。
不知道哪位仁兄知道。
看了库开发指南,也云里雾里的。
回复 支持 反对

使用道具 举报

发表于 2014-6-4 14:00:50 | 显示全部楼层
侯希白 发表于 2014-6-4 12:49
我就是不会改,所以困惑。
不知道哪位仁兄知道。
看了库开发指南,也云里雾里的。

还是得参考野火的代码,看看人家是怎么用IIC的协议与AT24C02通信的,看看AT24C02的手册里面有命令格式
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-4 15:28:56 | 显示全部楼层
看了24C24的手册,但是发现与X9119前面是一样的,就是输入数据的时候不一样,等
看了李想视频,再想一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-4 15:51:34 | 显示全部楼层
本帖最后由 侯希白 于 2014-6-4 15:52 编辑

李想视频讲的基础多些,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 15:46:19 | 显示全部楼层
还是没有搞出来,郁闷啊,谁搞过数字电位器指导下,谢谢了,前面GPIO初始化我都知道,就是后面写入数据,循环一多,我就乱了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 15:54:11 | 显示全部楼层
还是没有搞出来,郁闷啊,谁搞过数字电位器指导下,谢谢了,前面GPIO初始化我都知道,就是后面写入数据,循环一多,我就乱了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-5 20:59:06 | 显示全部楼层
自己顶一下,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-6 12:31:05 | 显示全部楼层
内容还是没有人回复啊,都没人用数字电位器啊!
回复 支持 反对

使用道具 举报

发表于 2014-6-6 15:58:20 | 显示全部楼层
侯希白 发表于 2014-6-6 12:31
内容还是没有人回复啊,都没人用数字电位器啊!

还是自己来吧,这个参考下说明书还是能做好的,或者去找卖你模块的商家,应该会提供现成的51程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-6 17:24:21 | 显示全部楼层
公孙璇娟 发表于 2014-6-6 15:58
还是自己来吧,这个参考下说明书还是能做好的,或者去找卖你模块的商家,应该会提供现成的51程序

谢谢回答,
我关键就是指令不知道哪改,不是很明白
商家都没有联系了,我自己都忘记了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-9 18:56:10 | 显示全部楼层
查了一圈资料,都说STM32 硬件I2C 有问题
看了刘洋的视频  改为模拟的   结果还是不行
继续挂示波器看吧   哎
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 06:33 , Processed in 0.050050 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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