我看了官方给的实例例程里面有个I2C_Master_Int的实例代码,里面也是使用I2c控制24C02存储芯片的。
之后我连上线路之后发现串口只会出现这个情况不能继续向下运行
于是我又查阅了关于24C01芯片的使用方法,发现当A1,A2,A3全部接GND之后设备地址为0XA0
于是我查看了示例代码中的地址,发现定义为0x10
于是我将设备地址修改为0xa0之后再次运行发现结果并没有变化
还是卡在那里并没有运行结束,于是我再代码各个地方添加了串口输出函数,判断是在那里卡住了
但发现当添加了输出函数之后并不会卡住,于是我就猜想可能是缺少延时,于是我在其中添加了延时函数
添加完成之后发现可以正常运行到最后
这时候我发现输出不正确
输出的结果
所以是写入的数据和输出的数据不一致导致的
于是我添加
输出结果如图(前面是读出来的数据,后面是写入的数据)
结果发现数据是错误的,但我从多次试验数据以及上网查阅了一些资料发现
可能是数据写入和读取的位置不一致导致的
于是我试图定义写入位置已寄读出位置,但很遗憾以失败告终
我并没有查询到关于这方面的内容,也实在是不知道怎么搞
但我从网上查阅资料发现当在写入数据的时候如果你写入的时候正好写入到一页的尾部,那么在读取的时候就会从这个页的初始位置开始读取
于是我修改了写入数据的大小
我查到的博客使用的大小为8,但我通过试验发现是16
紧接着我再次运行之后
写入数据与读出的数一致了;
至此算是完成了对存储芯片的写入与读出
但是很显然这样是不正确的,我想要的是写入数据,读出数据,我需要知道我将数据写到哪里了,应该从哪个位置读出数据,关于这方面的内容我没有从示例代码中找到
网上也有关于如何将数据写入到指定位置,但我发现他们的方法是这样的
在发送地址及写入位之后发送要写入的内存地址
但我发现
I2C_7bit_Addr_Send(I2C1, EEPROM_ADDRESS, I2C_DIRECTION_SEND);
I2C_Data_Send(I2C1, address); // 发送内存地址
I2C_Data_Send(I2C1, data); // 发送数据
都是这样子的,我很好奇这样发送内存地址为啥不会被认为是发送的普通数据
以及读出的时候也要发送,我也搞不明白
总之就是没学会,有没有大佬能帮帮我