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

关于STM32F4 HAL库操作外部EEPROM的疑惑

[复制链接]
kgq398 提问时间:2014-11-3 10:58 /
阅读主题, 点击返回1楼
收藏 评论22 发布时间:2014-11-3 10:58
22个回答
wtliu 回答时间:2015-5-17 13:57:53
create_ce 发表于 2014-11-4 13:51
解决了
HAL_StatusTypeDef EEPROM_WriteData(uint16_t MemAddress, uint8_t *pData, uint16_t Size)
{

I2C的芯片都很慢,读写时序需要比较长。最可靠的方法就是一个字节一个字节第写。
yyblike-263448 回答时间:2015-5-18 09:59:07
wtliu 发表于 2015-5-17 13:57
I2C的芯片都很慢,读写时序需要比较长。最可靠的方法就是一个字节一个字节第写。 ...

I2C总线的速度是慢,EEPROM读写最快也就400K,但是你要一个字节一个字节的写那就1K的速度都达不到了。建议查看下EEPROM的分页和页写延时。如果你一个字节一个字节写,要保证第一个字节写进去了然后再写第二个字节,那必须等5ms的延时,才能写下一个,但是处理好了分页操作之后,可以在写入N个字节之后再等待一个5ms的写操作延时。
慧创使者 回答时间:2015-7-20 00:52:38
create_ce 发表于 2014-11-3 15:13
我写正常,就是读多字节的时候不太正常

我的读好像也不正常。你怎么解决的?
慧创使者 回答时间:2015-7-20 00:56:23
create_ce 发表于 2014-11-4 13:51
解决了
HAL_StatusTypeDef EEPROM_WriteData(uint16_t MemAddress, uint8_t *pData, uint16_t Size)
{

我现在按照你的程序,每次都32字节还是异常,每次读出来不一样,太奇怪了
Tony_Duan 回答时间:2015-8-26 09:24:06
我的在这里就已经死掉了,单片机为是stm32f103zet6,  eeprom是at24c512c. while(HAL_I2C_IsDeviceReady(&hi2c1,0x00A0,10,1000)!=HAL_OK)

读写也全都得不到HAL_OK,请大家帮忙分析,另外板子是自己做的。

谢谢
Tony_Duan 回答时间:2015-9-20 13:39:03
我的情况是连续写多字节没问题,也能调用到HAL_I2C_MemTxCpltCallback函数。但是读就问题来了,第一次读能正确读取连续数据,但是不能调用HAL_I2C_MemRxCpltCallback,说明读取没有结束,然后就没有然后了,读写都不行了。我尝试了模拟gpio读写,问题是一样的。HAL_I2C_GetState也没有返回,我的上拉电阻是4.7k,我甚至都怀疑是不是eeprom有问题了,头大ing
riansum 回答时间:2016-4-30 23:43:28
Tony_Duan 发表于 2015-8-26 09:24
我的在这里就已经死掉了,单片机为是stm32f103zet6,  eeprom是at24c512c. while(HAL_I2C_IsDeviceReady(&hi ...

你好,我在写EEP的时候也出现了同样的问题。。。。调用这个函数判断地址是否有效while(HAL_I2C_IsDeviceReady(&hi2c2,EEP1_Write_CmdToAT25c,2,timeout)!=HAL_OK),发现总线一直处于忙状态,挂在这个位置,
/* Wait until BUSY flag is reset */
   if(I2C_WaitOnFlagUntilTimeout(hi2c, I2C_FLAG_BUSY, SET, I2C_TIMEOUT_BUSY_FLAG) != HAL_OK)
    {
      return HAL_BUSY;
    },但是都没有操作总线。请问,你当初的解决方案是?
seven101 回答时间:2017-6-1 18:46:56
mark


12
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版