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

读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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版