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

读stm32flash出错

[复制链接]
any012 提问时间:2016-9-23 10:27 /
悬赏1ST金币已解决
想实现这么个功能:
有三个二维数组paraa[4][7], error[4][7], resRefValue[4][7]需要保存,将三个数组写入到stm32f103内部flash的三个扇区里,上电时再重新读出来。

下面有读flash的函数,该函数只有一个参数。参数为0时,读出所有数据;参数为1-4时,读出存储的对应路数的数组。

计算好第一路的三个数组后,保存到了paraa[0][], error[0][], resRefValue[0][]里。
重新上电时,调用读flash函数,参数给的是0,应该读出所有参数,结果发现,第一路的前两个参数没有被保存,都是0,resRefValue[0][]倒是正常。
修改为上电时只读第一路的参数,结果倒是正常的。

  1. void FlashRead(u8 readChanelNUmber)
  2. {
  3.         u8 i;
  4.         if(readChanelNUmber == 0)
  5.         {
  6.                 for(i = 0; i < 4; i++)
  7.                 {
  8.                     STMFLASH_Read(FLASH_SAVE_ADDR+i*28, &paraa[i][0].u16_value[0], 28);
  9.                         STMFLASH_Read(FLASH_SAVE_ADDR+i*28+0x0400, &error[i][0].u16_value[0], 28);
  10.                         STMFLASH_Read(FLASH_SAVE_ADDR+i*28+0x0800, &resRefValue[i][0].u16_value[0], 28);
  11.         }
  12.         }
  13.         else if(readChanelNUmber > 0 && readChanelNUmber < 5)
  14.         {
  15.                 readChanelNUmber -= 1;
  16.                 STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28, ¶a[readChanelNUmber][0].u16_value[0], 28);
  17.                 STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28+0x0400, &error[readChanelNUmber][0].u16_value[0], 28);
  18.                 STMFLASH_Read(FLASH_SAVE_ADDR+readChanelNUmber*28+0x0800, &resRefValue[readChanelNUmber][0].u16_value[0], 28);
  19.                 efValue[%d][%d] = %d", readChanelNUmber, i, resRefValue[readChanelNUmber][i].u16_value[0]);
  20.         }        
  21. }
复制代码



最佳答案

查看完整内容

你首先要保证写操作是正确的。 对于STM32F1系列来言,内部FLASH仅支持16位半字写。
收藏 1 评论4 发布时间:2016-9-23 10:27

举报

4个回答
xmshao 回答时间:2016-9-23 10:27:25
你首先要保证写操作是正确的。

对于STM32F1系列来言,内部FLASH仅支持16位半字写。
高二毛 回答时间:2016-9-23 12:32:48
查看一下代码,是否跟你的连续读有关系吧。
any012 回答时间:2016-9-23 14:21:37
STMFLASH_Read(FLASH_SAVE_ADDR+i*28, &paraa[i][0].u16_value[0], 28);
该函数引用错误,第三个参数为写入的16位数据的个数,所以对应的第一个参数里的i*28就不合适了,应该改成i*14;
另,二维数组这样保存可能没必要,数组肯定是连着的。没必要加这个for循环,直接保存56个16位数据即可。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

any012 回答时间:2016-9-23 16:23:24
xmshao 发表于 2016-9-23 15:20
你首先要保证写操作是正确的。

对于STM32F1系列来言,内部FLASH仅支持16位半字写。 ...

已经解决,就是上边的问题,没有仔细看函数说明。

所属标签

相似问题

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