你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
关于flash,AD,复位的纠结
[复制链接]
magiclakesz
提问时间:2012-3-8 08:42 /
stm32f103rbt6
需要在程序运行时写入从AD采集到的一个数值到flash 的0x800c000地址处。
第一次运行程序,成功启动系统,并且在0x800c000处成功写入AD采集到的数据。
但是,一旦复位,系统便无法运行:具体现象为晶振能起震,但main函数无法运行。
如果将操作flash的部分屏蔽,程序完全没有任何问题,复位也不会出现奇怪的现象。
flash的操作完全按照官方提供的样例程序进行。
请问我应该从何处下手解决此问题?
赞
0
收藏
0
评论
7
分享
发布时间:2012-3-8 08:42
举报
请先
登录
后回复
7个回答
废鱼
回答时间:2012-3-8 09:31:29
a0a.1 0b0c
RE:关于flash,AD,复位的纠结
FLASH处理的问题。FLASH只能写入一次,下次写入的时候需要擦除FLASH这个地址所在的这一片(有的可能叫这一区),才能再次写入。这个是由于FLASH本身的机制决定的。
赞
0
评论
回复
支持
反对
magiclakesz
回答时间:2012-3-8 10:42:37
a0a.1 0b0c
回复:关于flash,AD,复位的纠结
回复第 2 楼 于2012-03-08 01:31:29发表:
FLASH处理的问题。FLASH只能写入一次,下次写入的时候需要擦除FLASH这个地址所在的这一片(有的可能叫这一区),才能再次写入。这个是由于FLASH本身的机制决定的。
谢谢你的回复啊,有些问题还是不是很清楚:
const uint16_t ThresholdValue[]__at(0x800C000)={1000,1000,1000,1000,1000,1000,1000,1000} ;
/*wrtie to flash*/
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
if((ret1=FLASH_ErasePage((uint32_t)&ThresholdValue[0]))!=FLASH_COMPLETE)while(1)
Printf(" flash_erase_err=%d ",ret1);
for(i=0;i
赞
0
评论
回复
支持
反对
magiclakesz
回答时间:2012-3-8 13:47:22
a0a.1 0b0c
RE:关于flash,AD,复位的纠结
纠结啊
开始怀疑是擦除的时候把flash全部都插除了 所以第一次可以运行(在ram中有代码),第二次就没代码了。
于是将擦除前与擦除后的flash全部都通过串口读出来,发现是一样的。这样就不知道问题出在什么地方了。
有哪位朋友能提供点帮助啊 ,可能是什么地方出问题了呢 ?
赞
0
评论
回复
支持
反对
废鱼
回答时间:2012-3-8 14:46:04
a0a.1 0b0c
RE:关于flash,AD,复位的纠结
第二次写FLASH的时候,死到这里了, 擦除的时候用FLASH_ErasePage这个函数。
赞
0
评论
回复
支持
反对
火雷达
回答时间:2012-3-8 22:29:56
a0a.1 0b0c
回复:关于flash,AD,复位的纠结
是不是你有程序加密的功能?在程序里面加密?
我以前遇到过这种问题,如果有程序加密的话,写flash好像是有问题的。
赞
0
评论
回复
支持
反对
magiclakesz
回答时间:2012-3-9 19:56:41
a0a.1 0b0c
回复:关于flash,AD,复位的纠结
回复第 5 楼 于2012-03-08 06:46:04发表:
第二次写FLASH的时候,死到这里了, 擦除的时候用FLASH_ErasePage这个函数。
能麻烦说的稍微详细点么。 我擦除用的是FLASH_ErasePage这个函数啊。然后第二次擦除发生在系统复位重启后才发生,第二次复位后整个系统就无法启动了,测试了下根本就不会运行到flash擦除这个地方来。
如果我第一次运行程序在擦除flash前让系统复位,那么第二次就可以正常启动系统并运行程序。但如果第二次程序对flash进行过操作,那么复位后第三次就无法启动系统。
赞
0
评论
回复
支持
反对
magiclakesz
回答时间:2012-3-9 19:57:46
a0a.1 0b0c
回复:关于flash,AD,复位的纠结
回复第 6 楼 于2012-03-08 14:29:56发表:
是不是你有程序加密的功能?在程序里面加密?
我以前遇到过这种问题,如果有程序加密的话,写flash好像是有问题的。
我的程序没有设置加密功能,明天把加密选上试试看。太纠结了。
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:关于flash,AD,复位的纠结
回复:关于flash,AD,复位的纠结
FLASH处理的问题。FLASH只能写入一次,下次写入的时候需要擦除FLASH这个地址所在的这一片(有的可能叫这一区),才能再次写入。这个是由于FLASH本身的机制决定的。
谢谢你的回复啊,有些问题还是不是很清楚:
const uint16_t ThresholdValue[]__at(0x800C000)={1000,1000,1000,1000,1000,1000,1000,1000} ;
/*wrtie to flash*/
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);
if((ret1=FLASH_ErasePage((uint32_t)&ThresholdValue[0]))!=FLASH_COMPLETE)while(1)
Printf(" flash_erase_err=%d ",ret1);
for(i=0;i
RE:关于flash,AD,复位的纠结
开始怀疑是擦除的时候把flash全部都插除了 所以第一次可以运行(在ram中有代码),第二次就没代码了。
于是将擦除前与擦除后的flash全部都通过串口读出来,发现是一样的。这样就不知道问题出在什么地方了。
有哪位朋友能提供点帮助啊 ,可能是什么地方出问题了呢 ?
RE:关于flash,AD,复位的纠结
回复:关于flash,AD,复位的纠结
我以前遇到过这种问题,如果有程序加密的话,写flash好像是有问题的。
回复:关于flash,AD,复位的纠结
第二次写FLASH的时候,死到这里了, 擦除的时候用FLASH_ErasePage这个函数。
能麻烦说的稍微详细点么。 我擦除用的是FLASH_ErasePage这个函数啊。然后第二次擦除发生在系统复位重启后才发生,第二次复位后整个系统就无法启动了,测试了下根本就不会运行到flash擦除这个地方来。
如果我第一次运行程序在擦除flash前让系统复位,那么第二次就可以正常启动系统并运行程序。但如果第二次程序对flash进行过操作,那么复位后第三次就无法启动系统。
回复:关于flash,AD,复位的纠结
是不是你有程序加密的功能?在程序里面加密?
我以前遇到过这种问题,如果有程序加密的话,写flash好像是有问题的。
我的程序没有设置加密功能,明天把加密选上试试看。太纠结了。