你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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好像是有问题的。
我的程序没有设置加密功能,明天把加密选上试试看。太纠结了。