最近做个modbus网关,用到的MCU是stm32L152,这个项目是和别人合作,我做顶层的算法和从机协议,从机读回来的数据要存到外部flash中,而外部flash的索引地址要保存到内部的eeprom中,底层驱动合作方已经写好了,直接拿来使用。测试代码如下:

FLASH_Status writeEEPROMByte(uint32_t address, uint8_t data) {

FLASH_Status status = FLASH_COMPLETE;

address = address + EEPROM_START_ADDR;

DATA_EEPROM_Unlock(); //Unprotect the EEPROM to allow writing

while(FLASH_GetStatus()!=FLASH_COMPLETE);

status = DATA_EEPROM_ProgramByte(address, data);

DATA_EEPROM_Lock(); // Reprotect the EEPROM

return status;

}

uint8_t readEEPROMByte(uint32_t address) {

uint8_t tmp = 0;

address = address + EEPROM_START_ADDR;

tmp = *(__IO uint32_t*)address;

return tmp;

}

/*********************************************************************************

* Function Name : initAddrParameter

* Output : none

* Return : None

**********************************************************************************/

void initAddrParameter(void)

{

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 1)

//    if(readEEPROMByte(0x24) == 0x55)

{

writeEEPROMByte(0x24,0x55);

initParameter();

W25QXX_Erase_Sector(0);

}else

{

//¶ÁÊý¾ÝµØÖ·

write_Addr.wBlock_Addr = readEEPROMByte(0x00);                    // 0-255

write_Addr.wSector_Addr = readEEPROMByte(0x04);

write_Addr.wPage_Addr = readEEPROMByte(0x08);

write_Addr.wOffset_Addr = readEEPROMByte(0x0c);

write_Addr.wOver_take = readEEPROMByte(0x10);

read_Addr.rBlock_Addr = readEEPROMByte(0x14);

read_Addr.rSector_Addr = readEEPROMByte(0x18);

read_Addr.rPage_Addr = readEEPROMByte(0x1c);

read_Addr.rOffset_Addr = readEEPROMByte(0x20);

}

//        initParameter();

//        W25QXX_Erase_Sector(0);

//

}

void saveAddrParameter(void)

{

FLASH_Status status = FLASH_COMPLETE;

u8 tempaddr = 0;

__disable_irq() ;

//

writeEEPROMByte(0x00,write_Addr.wBlock_Addr);                     // 0-255

writeEEPROMByte(0x04,write_Addr.wSector_Addr);

writeEEPROMByte(0x08,write_Addr.wPage_Addr);

writeEEPROMByte(0x0c,write_Addr.wOffset_Addr);

writeEEPROMByte(0x10,write_Addr.wOver_take);

tempaddr = read_Addr.rBlock_Addr;

status= writeEEPROMByte(0x14,2);

tempaddr = read_Addr.rSector_Addr;

status=    writeEEPROMByte(0x18,9);

tempaddr = read_Addr.rPage_Addr;

status=    writeEEPROMByte(0x1c,6);

tempaddr = read_Addr.rOffset_Addr;

status=    writeEEPROMByte(0x20,1);

__enable_irq() ;

}

读写测试OK

当把该程序加主程序中,从机读取完数据要保存时调用saveAddrParameter()函数出现 FLASH_ERROR_WRP 错误

调用改函数后 在往 flash 中写数据 就会发生错误。

经过一晚上的反复调试终于确定了错误。

在readDataFromFlash()中 调用了readWriteConpare这个参数

然后就出现了错误。

细心的朋友 ,我想已经发现了错误。

上层函数调用的时候传递进来的参数是NULL ,也就是说 PeerAddr是空

而我在这个函数中给空赋值,导致出错,也就是出现ASH_ERROR_WR 的病根,本身读写程序并没有错误。

给朋友们提个醒,传递指针的时候要格外小心,看清楚,找个错误很是费时间啊!!

stm32L152 使用内部内部flash做EEPROM 出FLASH_ERROR_WRP问题及解决办法相关推荐

  1. Windows自动弹出MSN中文网界面解决办法

    Windows自动弹出MSN中文网界面解决办法 原因:每当用户连接到网络时,Windows 会向微软的一个域名发送访问请求,访问结果作为网络连接状况指示器(Network Connectivity S ...

  2. Adobe flash player 因过期而遭到阻止 解决办法

    首先检查是否是最新版本,并安装最新版本! 若打开网页总是出现"Adobe flash player 因过期而遭到阻止"而无法加载! 解决办法很简单,打开Chrome插件列表,可以在 ...

  3. 苹果手机(IOS)下载不上安装不上charles证书(不弹出下载框)终极解决办法

    基本上能找到这里的,肯定都试过很多方法了 下载官网证书的办法也试过,将charles的证书文件下载到苹果手机也试过,但是还是不可以安装证书, 官网安装的证书不匹配. 下面给出终极解决办法: 利用fid ...

  4. pycharm 总弹出modify setUp的解决办法

    问题原因:pycharm在初始设置时,没有让pycharm 找到你的pyghon解释器位置. 解决办法: 1.找到电脑中python解释器保存的位置.如果忘记保存到哪里了.可以同时按住win+R,在弹 ...

  5. 【014】Flash Builder4.7打不开的解决办法

    平时Flash Builder4.7用的好好的,突然有一天打不开了,双击exe文件后只出现一个进度条,等进度条走完后就什么也没有了.后来我找到了如下解决办法: 一.在C盘搜索workbench.xml ...

  6. 光纤激光切机计算机无法启动,激光切割机不出光原因及解决办法

    激光切割机 激光切割机的激光管不发光通常有三个原因:一是激光管突然不发光,二是使用激光管的光线越来越弱,最后是一切都开始正常工作,第二天激光切割机开机后没有光. 首先,关于没有光的原因. 解决办法:检 ...

  7. c++cmath无法打开_卸载wps后打开excel文件出错?问题原来出在这,解决办法也很简单...

    wps和office是我们工作中经常需要用到的软件,有人说wps可能更加适合国人的使用习惯,也有人说office稳定性更好,两个软件各有利弊,我觉得这个看个人使用习惯.因为这两个软件分属于不同的公司, ...

  8. win7桌面空白处右键弹出菜单很慢解决办法

    使用win7系统有时会遇到在桌面空白处右键鼠标,电脑反应迟钝一直显示圈圈状态,很是郁闷,亲测可用,希望可以帮助大家: 1:点击左下角的"开始"菜单里的"命令提示符&quo ...

  9. ewomail 内部通讯_EwoMail邮件系统提示“无法连接服务器”的解决办法

    最近一直在调试EwoMail邮件系统,当然,出现了各种问题,不然也不能叫调试,就因为各种问题,各种折腾,也是出现了各种问题,这不又出现了,无法链接服务器这个问题,具体请看下图: 登录EwoMail邮件 ...

最新文章

  1. 亿级系统的Redis缓存如何设计???
  2. 警方建立了一个人工智能来预测暴力犯罪,它有严重缺陷
  3. No qualifying bean of type xxx‘ available 的一种解决方法
  4. map和foreach的区别和应用场景_浅析项目中常用的 VO、DTO、DO、PO的概念、区别和用处...
  5. Excel-怎样实现行列转置
  6. Java Web项目的发布
  7. 有向加权图 最大弱连通分支_买入加权组合式等价对敲
  8. 向量值函数在计算机工程与应用,拟Newton法在高阶矩阵中的应用-计算机工程与应用.PDF...
  9. python入门系列:深入Python的set和dict
  10. Python issubclass 函数 - Python零基础入门教程 2021-07-14 09:24:43
  11. html中图片响应式怎么写,如何使用 HTML5 的picture元素处理响应式图片
  12. c++ 删除vector里面的第一个元素_C++提高第三篇2 STL常用容器 vector
  13. yii mysql 查询 类型转换_Yii2.0 API改造(返回数据库对应字段数据类型)
  14. vue ---- 数组的常用方法
  15. ★LeetCode(39)——组合总和(JavaScript)
  16. 特斯拉电动卡车霸气发布,还有一个意外惊喜(全新跑车)
  17. (转)HTML5开发中Access-Control-Allow-Origin跨域问题
  18. Appium下载遇到的问题
  19. 测试用例管理系统 TestRail测试用例
  20. mysql 查询条件为空则_MySql当查询条件为空时不作为条件查询

热门文章

  1. Aop简介 Aop术语 SpringAOP
  2. 室内制图如何让您的办公室受益
  3. unreal无损音乐百度云_嵐-IN THE SUMMER[FLAC]
  4. 肖仰华谈知识图谱:知识将比数据更重要,得知识者得天下
  5. 全容灾、热备份、温归档、智融合,电信运营商的数据保护黄金法则
  6. 超级玛丽亚游戏开发素材
  7. 【蓝桥杯】【调和级数】
  8. 软件工程毕业,在北京工作两年后再来理解《人月神话》
  9. JS:验证、限制纯数字或者英尺英寸格式的值
  10. 和同事技术争吵_注意数据争吵