你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
安 发表于 2018-3-27 10:51 这个是我找的例程,我以前用过是可以用的。103下面使用,配置的是输出。
安 发表于 2018-3-27 11:05 我这里用的是没有配置。可能MCU不同,你应该参考ST的。
安 发表于 2018-3-27 11:26 写完以后,记得要STOP一下,可能是因为8563处于忙状态。
安 发表于 2018-3-27 11:36 /* * 函数名: static void I2C_Stop(void) * 描述 : 终止信号
安 发表于 2018-3-27 13:36 我是说每次完整的通讯完成后。
查看全部评分
枫天2015 发表于 2018-3-27 14:29 我调试半天IIC死活不通,后来发现板子引脚反了
就是不用管IO的方向呗,我把我的设置IO方向的语句去掉,的确是可以接收到ACK的,但也有一条语句接收的是NACK,看这个样子是不用设置IO的方向,但是我之前参考了两三版程序都有设置IO的方向,那到底用不用设置IO的方向。我们这个IO的方向一直都配置的是输出啊
这个是我用逻辑分析仪抓到的数据,第二个写寄存器地址,收到的响应是NACK,这说明什么呢?
您说的这个STOP一下,应该不是发一个停止信号吧,因为I2C的时序不是发送从地址等待ACK,发送要写的数据等ACK,最后发STOP信号啊。还是你说的这个stop是把SDA和SCL都拉高呢?
* 函数名: 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();
}
可是不对啊,I2C的时序不是发从设备地址等ACK,发寄存器地址等ACK,发要写入的数据等ACK,最后发STOP信号吗?您是想让我在每一个等ACK前都发一个STOP信号吗?
我有啊,有STOP信号
我粘贴的那个图上,不是有stop信号吗,我觉得不是这个原因
评分
查看全部评分
看我抓取的图像,引脚应该没有接反,谢谢您的帮助
I2C通信,首先肯定STM32F103要进行I2C通信,这要设置SDA的方向;
其次,之所以一直接收到NACK ,说明从设备没有收到有效的地址,可是主设备发送没有错,于是用示波器测了从设备的电压,和时钟,发现晶振有问题,竞争给的不正常
评分
查看全部评分
你的STM32在作为主机发送数据到IIC总线上时,配置为输出模式,这个OK,但是需要从PCF8563中得到应答,相当于是要从总线上读取数据,这个时候GPIO应该配置为输入模式,但似乎并没有看到类似的语句或代码,SDA_IN吗?也不太清楚具体代码如何,所以不好判断。
评分
查看全部评分
没有收到应答原因:是晶振有问题,给的时钟不对