你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

主发送I2C发送完数据后没有接收到应答信号

[复制链接]
watercici 提问时间:2018-3-26 15:09 /
阅读主题, 点击返回1楼
收藏 评论34 发布时间:2018-3-26 15:09
34个回答
watercici 回答时间:2018-3-27 10:59:55
安 发表于 2018-3-27 10:51
这个是我找的例程,我以前用过是可以用的。103下面使用,配置的是输出。

就是不用管IO的方向呗,我把我的设置IO方向的语句去掉,的确是可以接收到ACK的,但也有一条语句接收的是NACK,看这个样子是不用设置IO的方向,但是我之前参考了两三版程序都有设置IO的方向,那到底用不用设置IO的方向。我们这个IO的方向一直都配置的是输出啊
废鱼 回答时间:2018-3-27 11:05:28
我这里用的是没有配置。可能MCU不同,你应该参考ST的。
watercici 回答时间:2018-3-27 11:10:53
安 发表于 2018-3-27 11:05
我这里用的是没有配置。可能MCU不同,你应该参考ST的。

这个是我用逻辑分析仪抓到的数据,第二个写寄存器地址,收到的响应是NACK,这说明什么呢?
图片2.png
废鱼 回答时间:2018-3-27 11:26:22
写完以后,记得要STOP一下,可能是因为8563处于忙状态。
watercici 回答时间:2018-3-27 11:35:15
安 发表于 2018-3-27 11:26
写完以后,记得要STOP一下,可能是因为8563处于忙状态。

您说的这个STOP一下,应该不是发一个停止信号吧,因为I2C的时序不是发送从地址等待ACK,发送要写的数据等ACK,最后发STOP信号啊。还是你说的这个stop是把SDA和SCL都拉高呢?
废鱼 回答时间:2018-3-27 11:36:05
/*  
* 函数名: static void I2C_Stop(void)
* 描述  : 终止信号
* 输入  : 无
* 输出  : 无
* 说明  :  
*/  
static void I2C_Stop(void)  
{  
    SCL_L;  
    I2C_delay();  
    SDA_L;  
    I2C_delay();  
    SCL_H;  
    I2C_delay();  
    SDA_H;  
    I2C_delay();  
}  
watercici 回答时间:2018-3-27 12:53:51
安 发表于 2018-3-27 11:36
/*  
* 函数名: static void I2C_Stop(void)
* 描述  : 终止信号

可是不对啊,I2C的时序不是发从设备地址等ACK,发寄存器地址等ACK,发要写入的数据等ACK,最后发STOP信号吗?您是想让我在每一个等ACK前都发一个STOP信号吗?
废鱼 回答时间:2018-3-27 13:36:11
我是说每次完整的通讯完成后。
watercici 回答时间:2018-3-27 13:39:55
安 发表于 2018-3-27 13:36
我是说每次完整的通讯完成后。

我有啊,有STOP信号
watercici 回答时间:2018-3-27 13:48:26
安 发表于 2018-3-27 13:36
我是说每次完整的通讯完成后。

我粘贴的那个图上,不是有stop信号吗,我觉得不是这个原因
枫天123 回答时间:2018-3-27 14:29:34
我调试半天IIC死活不通,后来发现板子引脚反了

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

watercici 回答时间:2018-3-27 14:37:06
枫天2015 发表于 2018-3-27 14:29
我调试半天IIC死活不通,后来发现板子引脚反了

看我抓取的图像,引脚应该没有接反,谢谢您的帮助
watercici 回答时间:2018-3-28 10:41:06
结贴:
I2C通信,首先肯定STM32F103要进行I2C通信,这要设置SDA的方向;
其次,之所以一直接收到NACK ,说明从设备没有收到有效的地址,可是主设备发送没有错,于是用示波器测了从设备的电压,和时钟,发现晶振有问题,竞争给的不正常

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3 结帖奖励

查看全部评分

STM1024 回答时间:2018-3-28 18:07:12
本帖最后由 stm1024 于 2018-3-28 18:09 编辑

你的STM32在作为主机发送数据到IIC总线上时,配置为输出模式,这个OK,但是需要从PCF8563中得到应答,相当于是要从总线上读取数据,这个时候GPIO应该配置为输入模式,但似乎并没有看到类似的语句或代码,SDA_IN吗?也不太清楚具体代码如何,所以不好判断。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

watercici 回答时间:2018-4-11 15:46:58
结贴:
没有收到应答原因:是晶振有问题,给的时钟不对

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版