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

STM32F0xx_StdPeriph_Lib_。。。EEPROM24LC16读写的BUG

[复制链接]
damiaa 提问时间:2016-8-11 10:49 /
本帖最后由 damiaa 于 2017-11-30 14:49 编辑

STM32F0的标准库的 uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)                            uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
函数貌似有个BUG  其实也不一定说是BUG,至少是不方便,迷惑使用着吧,因为调用者不会老盯住sEEAddress去切换扇区啊
就是写24LC16时地址0X100以前的数据可以读写
0X100以上的数据又把0X100以内的空间覆盖了
有人遇到过吗?
怎么解决的?

已经解决:

一,调用该函数之前改变sEEAddress
//#define sEE_HW_ADDRESS     0xA0   /* E2 = 0 */
// /*#define sEE_HW_ADDRESS     0xA2*/ /* E2 = 0 */  
// /*#define sEE_HW_ADDRESS     0xA4*/ /* E2 = 0 */
// /*#define sEE_HW_ADDRESS     0xA6*/ /* E2 = 0 */
// /*#define sEE_HW_ADDRESS     0xA8*/ /* E2 = 0 *//
// /*#define sEE_HW_ADDRESS     0xAA*/ /* E2 = 0 *//
// /*#define sEE_HW_ADDRESS     0xAC*/ /* E2 = 0 *///
/*#define sEE_HW_ADDRESS     0xAE*/ /* E2 = 0 */  /* Get number of reload cycles */


二,函数内部改变sEEAddress
uint32_t sEE_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
{  
  uint32_t NumbOfSingle = 0, Count = 0, DataNum = 0, StartCom = 0;
  //还是这么改好:

        sEEAddress =0x00a0;        
        sEEAddress +=(ReadAddr>>7)&0x000e;///////////////////20160811
...
}

uint32_t sEE_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)
{   
  uint32_t DataNum = 0;
  sEE_WRITEALLOW();
    //sEEAddress要改变 ,或者在调用该函数之前改变
   //还是这么改好:
      sEEAddress =0x00a0;
        sEEAddress +=(WriteAddr>>7)&0x000e;///////////////////20160811
        

//        num=4;
//        test2[0] =0x10;
//        test2[1] =0x20;
//        test2[2] =0x30;
//        test2[3] =0x40;
//        test2[4] =0x50;
//        test2[5] =0x60;   
//        sEE_WriteBuffer(test2, 0x0, 4);
//        test2[0] =0x11;
//        test2[1] =0x22;
//        test2[2] =0x33;
//        test2[3] =0x44;
//        test2[4] =0x55;
//        test2[5] =0x66;
//        sEE_WriteBuffer(test2, 0x100, 4);
////        sEE_ReadBuffer(&test[0], 0x100,&num);
////        
////        sEE_ReadBuffer(&test[0], 0x0,&num);








评分

参与人数 1 ST金币 +5 收起 理由
zero99 + 5 赞一个!

查看全部评分

收藏 评论7 发布时间:2016-8-11 10:49

举报

7个回答
任风吹吹 回答时间:2016-8-11 12:29:54
moyanming2013 发表于 2016-8-11 12:19
不要动不动就说标准库有bug,多想想自己的代码问题。
0x100就是十进制的256,显然超过了一个uint8_t的范围 ...

应该就是这么回事
moyanming2013 回答时间:2016-8-11 12:19:27
不要动不动就说标准库有bug,多想想自己的代码问题。
0x100就是十进制的256,显然超过了一个uint8_t的范围,对于uint8_t* NumByteToWrite来说。
damiaa 回答时间:2016-8-11 12:53:33
本帖最后由 damiaa 于 2016-8-11 15:40 编辑

damiaa 回答时间:2016-8-11 12:54:38
本帖最后由 damiaa 于 2017-11-30 14:52 编辑
moyanming2013 发表于 2016-8-11 12:19
不要动不动就说标准库有bug,多想想自己的代码问题。
0x100就是十进制的256,显然超过了一个uint8_t的范围 ...

uint16_t WriteAddr 这个是地址。 uint8_t* NumByteToWrite 是写字节数
damiaa 回答时间:2016-8-11 15:21:28
已经解决,谢谢支持。
zero99 回答时间:2016-8-11 16:58:43
谢谢分享
damiaa 回答时间:2016-11-16 22:46:10
2楼3楼没有实际测试。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版