OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5443|回复: 8

模拟I2C问题,请教高手

[复制链接]

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
发表于 2013-6-25 15:48:49 | 显示全部楼层 |阅读模式
STM32F103VB仿照I2C实验24C02,用PB6 PB7作为I2CSDA和I2CSCL,与串口扩展芯片SC16IS752进行通信,首先初始化SC16IS752寄存器(可以确定没问题),给SC16IS752的发送寄存器写内容,利用串口小助手读取发送内容,只给发送寄存器写了一次内容,串口小助手应收到一个字节才对,现在发现串口小助手不断的接收数据,请高手帮我看看是哪里出问题了
源码:
//初始化IIC
void IIC_Init(void)
{
    
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );
  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_7); //PB6,PB7 输出高  
}

void sc16is752_WriteOneByte(u8 sla,u8 chx,u8 WriteAddr,u8 DataToWrite)
{
 u8 temp;
 temp=WriteAddr<<3;
 temp|=chx;
 //temp&=0x7F;
 IIC_Start();
 IIC_Send_Byte(sla);    //发送写命令
 IIC_Wait_Ack();
 IIC_Send_Byte(temp);//发送寄存器地址
 IIC_Wait_Ack();     
 IIC_Send_Byte(DataToWrite);     //发送字节   
 IIC_Wait_Ack();         
 IIC_Stop();//产生一个停止条件 
 delay_ms(10);

}
u8 sc16is752_ReadOneByte(u8 sla,u8 chx,u8 ReadAddr)
{
  u8 temp;
  u8 temp1=0;


 temp=ReadAddr<<3;
 temp|=chx;
 IIC_Start();
 IIC_Send_Byte(sla);    //发送写命令
 IIC_Wait_Ack();
 IIC_Send_Byte(temp);//发送寄存器高地址
 IIC_Wait_Ack();   
 
 IIC_Start();     
 IIC_Send_Byte(sla|(0x01));           //进入接收模式   
 IIC_Wait_Ack();  
 temp1=IIC_Read_Byte(0);   
 IIC_Stop();//产生一个停止条件    


   return temp1;
}  

main 函数:
        delay_init();     //延时函数初始化  
        sc16is752_Init();

sc16is752_WriteOneByte(0x92,0x00,IS752_LCR,0x03);
sc16is752_WriteOneByte(0x92,0x00,IS752_IER,0x02);  //开发送中断

sc16is752_WriteOneByte(0x92,0x00,IS752_THR,0xFE);
key=sc16is752_ReadOneByte(0x92,0x00,IS752_THR);
key1=sc16is752_ReadOneByte(0x92,0x00,IS752_LCR);
key2=sc16is752_ReadOneByte(0x92,0x00,IS752_IER);

读取key ,key1,key2的值均为FF



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
 楼主| 发表于 2013-6-25 15:50:55 | 显示全部楼层
请问高手,是不是我的I2C的写函数有问题,根本没有写进去?
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
 楼主| 发表于 2013-6-25 15:52:31 | 显示全部楼层
还想问一下IO口的速率2MHZ会不会对发送数据产生影响,因为I2C的速率大概在400K左右
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
 楼主| 发表于 2013-6-25 17:33:44 | 显示全部楼层
求大神指点迷津!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-25 18:33:53 | 显示全部楼层
把你写进去的内容,读出来一下,对比就知道是IIC写寄存器失败了,还是其他问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-25 18:34:00 | 显示全部楼层
回复【3楼】雁过不留痕8:
---------------------------------
不影响.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
 楼主| 发表于 2013-6-26 08:27:04 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我用我自己的read函数读取寄存器里面的内容发现不管读哪个寄存器结果都是FF,就是意味着根本没有写到寄存器里面
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-26 10:27:46 | 显示全部楼层
检查代码了,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2013-6-6
在线时间
0 小时
 楼主| 发表于 2013-6-26 10:42:33 | 显示全部楼层
我用原子哥的教程里面的I2C实验,对E2进行读和写,使用simulater进行仿真,可以看到写到地址去了,读的数据也为FF
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 10:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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