• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于STM32通过IIC与INA226芯片通信的问题

小男孩丶 2018-10-30 浏览量:3931

有大佬用过这个芯片吗?我使用的时候出现了一个很奇葩的问题就是能够和芯片通信就是读数据的时候低八位读不出来...有点郁闷

TIM图片20181030185242.png

上面是通信格式说明...

下面是我通信部分的程序现在只有读和写IIC通信协议用的是正点原子的软件模拟IIC库..

/*
¶ÔINA226½øÐжÁ²Ù×÷:
Ê×ÏȸüÐÂÖ¸Õëµ½addr
*/
u16 INA226_ReadData(u8 addr)
{
	u16 res = 0;
	//----1
	IIC_Start();
	IIC_Send_Byte(INA226_ADDR);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	IIC_Send_Byte(addr);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}	
	IIC_Stop();
	delay_ms(1);
	//---2
	
	
	IIC_Start();
	IIC_Send_Byte(INA226_ADDR|0x01);//¶Á²Ù×÷
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	res = IIC_Read_Byte(1);
	res <<= 8;
	res |= IIC_Read_Byte(0);
	IIC_Stop();
	return res;
}

u8 INA226_WriteData(u8 addru16 data)
{
	u8 res;
	IIC_Start();
	IIC_Send_Byte(INA226_ADDR);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	IIC_Send_Byte(addr);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	IIC_Send_Byte(data>>8);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	IIC_Send_Byte(data&0x00ff);
	res = IIC_Wait_Ack();
	if(res)
	{
		return 0xff;
	}
	IIC_Stop();
	//printf("h:0x%02xl:0x%02x\r\n"data>>8data&0x00ff);
	return 0x66;
}
今天跟这玩意耗了一天....着实委屈..



0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 应该还是时序上的问题了,模拟的IIC,在延时上要很注意,要使用逻辑分析仪进行测量 一下时间延时是不是够了

    还有时序上协议上的问题了,

    • 发布于 2018-11-27
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:10
  • 延时太短,每次发送8位数据后增加一些延时试试看
    • 发布于2018-10-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 找到问题了原因在SDA线的输入输出的切换上...
    • 发布于2018-10-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 用逻辑分析仪看看单片机的时序对不对,ack有没有正确响应,sda输出模式对不对。
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 没看到主函数,IIC时序不能错,几个通信步骤,按照这个来一般就不会有问题的!
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 检查下延时,和中断的参数
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 低8位读不到这种情况我也遇到过,我的是因为IIC总线上没加上拉,加上就好了,希望对题主有用
    • 发布于2018-10-31
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个要检查一下你的地址设置,有可能是你的地址设置有问题导致的
    • 发布于2018-11-27
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般都是你的时序读取的问题,要使用示波器观察一下通信的时序
    • 发布于2018-11-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议用逻辑分析仪看一下你的数据情况,根据数据来分析
    • 发布于2018-12-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先要检查你的延时和定时,时序的问题比较大
    • 发布于2018-12-14
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于STM32通过IIC与INA226芯片通信的问题