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

关于STM32F407的Flash操作

[复制链接]
shenxiaolin_mai 提问时间: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

查看全部评分

shenxiaolin_mai 回答时间: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
不知道哪里出现了问题,我查看了编程手册,库函数是按照编程手册的顺序来完成的。

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

刚刚定位了一下那个Flash状态寄存器发生变化是由于定时器中断使能,在启用NVIC_Init(&NVIC_InitStructure);之后就出现了上述的两个Flash状态标志位的置位现象,请问大佬知道原因么?
奏奏奏 回答时间:2018-11-28 10:10:47
首先搞清楚是不是数据长度的问题,这里是半字,不是半字节
其次是确认一下写入的地址在用的这款芯片里面存在吗?是不是刚好写到跨页了?这个型号的页是1K还是2K?

评分

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

查看全部评分

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

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

我先回答大佬的问题嘛,我用的是32的内部Flash
1:芯片地址是存在的,Jlink可以访问并读出数据
2:跨页这个问题需要确认
3:这个页是128K,
shenxiaolin_mai 回答时间: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擦除期间,必须禁止数据缓存

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

Flash解锁了,数据缓存没做。我试试看
废鱼 回答时间:2018-11-28 13:45:19
也就是定时中断打断了FLASH的操作,写入FLASH时,关闭所有中断试试。
shenxiaolin_mai 回答时间:2018-11-28 13:49:04
安 发表于 2018-11-28 13:45
也就是定时中断打断了FLASH的操作,写入FLASH时,关闭所有中断试试。

我在网上找了一个关于STM32F407的总中断的处理,但是好像没啥效果,不知道版主知不知道关闭总中断有啥好的方法不?目前用的是  
  1. __disable_irq() ;      //--关闭总中断--
  2.                          Flash_Test();
  3.                         __enable_irq() ;//--使能中断
复制代码
这样来处理的,
废鱼 回答时间:2018-11-28 14:28:42
楼主用的是什么编译器?keil的使用
__set_PRIMASK(1);//关闭总中断

__set_PRIMASK(0);//开放总中断
shenxiaolin_mai 回答时间:2018-11-28 15:28:50
本帖最后由 xiaoshen-372360 于 2018-11-28 15:37 编辑
安 发表于 2018-11-28 14:28
楼主用的是什么编译器?keil的使用
__set_PRIMASK(1);//关闭总中断

版主,出大问题了,刚刚不是说有Flash 的两个状态寄存器么?我软件端将Flash标志位清除了。现在只要操作Flash,整个芯片就出问题了……系统跑不起来,一上电就进hardfault,代码恢复到原来的样子也不行了……
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版