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

关于STM32F407的Flash操作

[复制链接]
xiaoshen-372360 提问时间:2018-11-28 09:59 /
本帖最后由 xiaoshen-372360 于 2018-11-28 16:33 编辑

说说现在的状况吧,我只是写了一个测试程序,都是用的库操作,但是在库函数的提示是正在执行Flash操作
先把代码贴出来
  1. #define Flash_BackUpAddr      0x080E0000   
复制代码
很简单的程序,但是在到这个函数的时候出现这个问题,在进行半字编程的时候直接跳过写入函数,提示的是:FLASH_ERROR_PROGRAM,但是不知道为啥会出现这种状况……在没有进行Flash操作的时候就出现下面的寄存器错误
err.png
仔细查找原因,是由于使能了定时器的时钟之后就出现了这个问题,不知道为啥会出现这个状况

err-1.png

所以这个就直接跳到  return 不知道啥原因,查了Flash编程手册也没找到原因,求大侠指导一下

Flash.png

Flash-3.png
大侠们帮帮忙,谢谢了



========================================================
解决的方式是这样的~~~~~~
========================================================


在需要写入前,先清掉两个状态标志位(根据手册上的来说是将该位写入1 则会将该位清零)
FLASH->SR |= FLASH_SR_PGSERR|FLASH_SR_PGPERR;
这样的话Flash 的标志位被清除掉就可以了,
需要注意的是,要按照flash编程手册上的来,遇到问题了再解决,哈哈哈哈哈,


评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20

查看全部评分

<
收藏 评论18 发布时间:2018-11-28 09:59

举报

18个回答
回答时间:2018-11-28 10:48:15
每次写入前,最好是不管擦没擦过,都进行一次擦除。这样是最好的操作。

评分

参与人数 2ST金币 +15 蝴蝶豆 +2 收起 理由
xiaoshen-372360 + 10
STMCU + 5 + 2

查看全部评分

奏奏奏 回答时间:2018-11-28 10:10:47
首先搞清楚是不是数据长度的问题,这里是半字,不是半字节
其次是确认一下写入的地址在用的这款芯片里面存在吗?是不是刚好写到跨页了?这个型号的页是1K还是2K?

评分

参与人数 1ST金币 +5 蝴蝶豆 +2 收起 理由
STMCU + 5 + 2

查看全部评分

回答时间:2018-11-28 10:14:15
先擦除,再写入。
xiaoshen-372360 回答时间:2018-11-28 10:17:10
安 发表于 2018-11-28 10:14
先擦除,再写入。

如果原始的数据位FF可以直接写入的,
xiaoshen-372360 回答时间:2018-11-28 10:18:46
奏奏奏 发表于 2018-11-28 10:10
首先搞清楚是不是数据长度的问题,这里是半字,不是半字节
其次是确认一下写入的地址在用的这款芯片里面存 ...

我先回答大佬的问题嘛,我用的是32的内部Flash
1:芯片地址是存在的,Jlink可以访问并读出数据
2:跨页这个问题需要确认
3:这个页是128K,
xiaoshen-372360 回答时间:2018-11-28 11:12:48
安 发表于 2018-11-28 10:14
先擦除,再写入。

我刚刚试了,擦除了再写入还是不行,那两个状态寄存器的标志一直在,不知道哪里出了问题
回答时间:2018-11-28 11:36:58
本帖最后由 安 于 2018-11-28 11:39 编辑

楼主操作的时候,有解锁FLASH吗?FLASH_Unlock
        FLASH_Unlock();                                                                        //解锁
        FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存

xiaoshen-372360 回答时间:2018-11-28 12:21:35
安 发表于 2018-11-28 11:36
楼主操作的时候,有解锁FLASH吗?FLASH_Unlock
        FLASH_Unlock();                                                                        //解锁
        FLASH_DataCacheCmd(DIS ...

Flash解锁了,数据缓存没做。我试试看
xiaoshen-372360 回答时间:2018-11-28 12:39:39
安 发表于 2018-11-28 11:36
楼主操作的时候,有解锁FLASH吗?FLASH_Unlock
        FLASH_Unlock();                                                                        //解锁
        FLASH_DataCacheCmd(DIS ...

刚刚试过了,还是不行
我的测试代码如下:
  1. void Flash_Test()
  2. {        
  3.     FLASH_Unlock();//--解锁Flash ----
  4.     FLASH_DataCacheCmd(DISABLE);//FLASH擦除期间,必须禁止数据缓存
  5.     FLASH_EraseSector(Flash_BackUpSector,VoltageRange_3);//--Flash-擦除扇区--
  6.     FLASH_ProgramHalfWord(Flash_BackUpAddr,0xaa55);
  7.     FLASH_DataCacheCmd(ENABLE);//FLASH擦除期间,必须禁止数据缓存
  8.     FLASH_Lock();  //--Flash 上锁--
  9. }
复制代码
但是,还是同样的问题。
在遇到状态监测这个函数的时候始终返回说:FLASH_ERROR_PROGRAM 返回的是这个状态位--而状态寄存器当前的状态是这个样子的
或者说从单片机一上电之后使能了定时器中断之后就是这个样子
err.png
不知道哪里出现了问题,我查看了编程手册,库函数是按照编程手册的顺序来完成的。

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