野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11227|回复: 14

关于I2C——EEPROM那一节的问题

[复制链接]
发表于 2017-4-11 09:26:16 | 显示全部楼层 |阅读模式
void IIC_EE_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        I2C_InitTypeDef        I2C_InitStructure;
       
        EEPROM_I2C_GPIO_APBxClkCmd(EEPROM_I2C_GPIO_CLK, ENABLE);
        EEPROM_I2C_APBxClkCmd(EEPROM_I2C_CLK,ENABLE);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
        GPIO_InitStructure.GPIO_Pin = EEPROM_I2C_SDA_GPIO_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(EEPROM_I2C_SDA_GPIO_PORT, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
        GPIO_InitStructure.GPIO_Pin = EEPROM_I2C_SCL_GPIO_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(EEPROM_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
       
        I2C_InitStructure.I2C_Ack        = I2C_Ack_Enable;
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
        I2C_InitStructure.I2C_ClockSpeed = EEPROM_I2C_BAUDRATE;
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
        I2C_InitStructure.I2C_OwnAddress1 = STM32_IIC_ADDR;
        I2C_Init(EEPROM_I2C, &I2C_InitStructure);       
       
        I2C_Cmd(EEPROM_I2C,ENABLE);
}

void EEPROM_Write_Byte(uint8_t Addr,uint8_t Date)
{
        I2C_GenerateSTART(EEPROM_I2C,ENABLE);
        while(!I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_MODE_SELECT));
       
        I2C_Send7bitAddress(EEPROM_I2C,EEPROM_ADDR,I2C_Direction_Transmitter);
        while(I2C_CheckEvent(EEPROM_I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == ERROR);

        I2C_SendData(EEPROM_I2C,Addr);
        while(I2C_CheckEvent(EEPROM_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTING) == ERROR);
       
        I2C_SendData(EEPROM_I2C,Date);
        while(I2C_CheckEvent(EEPROM_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTING) == ERROR);
       
        I2C_GenerateSTOP(EEPROM_I2C,ENABLE);       
}
上面那些宏定义我查了几遍没查出问题。
但程序死在这个while这里,也就是说发送启动信号不成功。
I2C_GenerateSTART(EEPROM_I2C,ENABLE);
while(!I2C_CheckEvent(EEPROM_I2C, I2C_EVENT_MASTER_MODE_SELECT));

求指导
回复

使用道具 举报

发表于 2017-4-11 10:43:30 | 显示全部楼层
用例程测试一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 11:07:29 | 显示全部楼层
flyleaf 发表于 2017-4-11 10:43
用例程测试一下

视频中的例程也打印不出EEPROM的东西来,串口是配置好的。
开发板上完整的例程测试了是成功的。硬件是没问题的。

不懂为什么视频中的例程也出错,而且按调试直接MDK出错退出软件无法调试。
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:02:53 | 显示全部楼层
AlanCc 发表于 2017-4-11 11:07
视频中的例程也打印不出EEPROM的东西来,串口是配置好的。
开发板上完整的例程测试了是成功的。硬件是没 ...

什么意思?如果用例程可以那就直接用例程的啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 14:54:51 | 显示全部楼层
flyleaf 发表于 2017-4-11 14:02
什么意思?如果用例程可以那就直接用例程的啊

视频课手打的代码不行,买板子带的光盘里的例程就行。
回复 支持 反对

使用道具 举报

发表于 2017-4-11 15:27:33 | 显示全部楼层
AlanCc 发表于 2017-4-11 14:54
视频课手打的代码不行,买板子带的光盘里的例程就行。

那可能是视频里的代码少了什么,讲课的时候没注意
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-12 08:49:57 | 显示全部楼层
flyleaf 发表于 2017-4-11 15:27
那可能是视频里的代码少了什么,讲课的时候没注意

老师,我发现板子上的例程中
void I2C_EE_ByteWrite(u8* pBuffer, u8 WriteAddr)
单独跑这一条函数会死在
while(!I2C_CheckEvent(macI2Cx, I2C_EVENT_MASTER_MODE_SELECT));
这里。
而我自己写的
void I2C_EE_ByteWrite(u8* pBuffer, u8 WriteAddr)
也是死在这里。
麻烦帮我看看是怎么回事
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-12 10:22:57 | 显示全部楼层
flyleaf 发表于 2017-4-11 15:27
那可能是视频里的代码少了什么,讲课的时候没注意

如果板子里的例程也测试失败是否是硬件问题导致?
刚刚又测试了一下,发现例程也测试失败
可以请教一下我该怎么做吗?
回复 支持 反对

使用道具 举报

发表于 2017-4-12 10:48:53 | 显示全部楼层
AlanCc 发表于 2017-4-12 10:22
如果板子里的例程也测试失败是否是硬件问题导致?
刚刚又测试了一下,发现例程也测试失败
可以请教一下 ...


这样硬件确实可能坏了,要换EEPROM芯片
回复 支持 反对

使用道具 举报

发表于 2017-9-8 09:23:45 | 显示全部楼层
我也遇到了同样的问题,我的可以确定存储芯片没问题,楼主找到了解决办法了吗
回复 支持 反对

使用道具 举报

发表于 2017-9-8 22:15:08 | 显示全部楼层
请问楼主解决了吗?跑例程可以证明硬件是没问题的,可是我对比下我的IIC初始化和例程的没问题,但到了检测这步也卡死了,哎
回复 支持 反对

使用道具 举报

发表于 2017-11-30 14:52:10 | 显示全部楼层
楼主的问题解决了吗
回复 支持 反对

使用道具 举报

发表于 2018-4-21 00:45:52 | 显示全部楼层
好像用while循环都会卡死,我的就卡死在发送数据以后,这个问题该怎么解决啊?
回复 支持 反对

使用道具 举报

发表于 2018-6-7 21:20:26 | 显示全部楼层
我的也是,调了一下午,没发现错误。然后程序源码里也不是视频里写的那个程序,帮顶。我也行知道哪里出错了
回复 支持 反对

使用道具 举报

发表于 2018-7-9 15:59:52 | 显示全部楼层
我也是卡到这个地方,只不过我的是GPIO初始化部分有问题,你也可以重点看下,尤其是scl和sdo这两个PIN的设置。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 10:43 , Processed in 0.029808 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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