OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8465|回复: 10

给程序加上读、写flash程序,重新上电后无法启动怎么回事?

[复制链接]

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-21
在线时间
21 小时
发表于 2014-9-17 17:04:30 | 显示全部楼层 |阅读模式
5金钱
如题,加上读写flash程序后,重新上电后无法启动,是为什么?
将加入的代码屏蔽后,恢复正常(重新上电后可重新启动)。
写入的地址是(0x800200+cnt*2)。
芯片为stm32f105RCT6  .
不知道是为什么
加入的flash写入代码如下,求大虾解答。。
[mw_shl_code=c,true] RCC_HSICmd(ENABLE); //解锁 FLASH 控制块// FLASH_Unlock(); //解锁FLASH编写擦除控制器。 // 清除一些标志位 // FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); // 擦除起始地址为 0x8002000 的 FLASH 页 // FLASH_ErasePage(0x8002000);//擦除一个FLASH页面,输入为指定擦除页的地址。返回擦除操作状态。 // 从 0x8002000 地址开始连续向 FLASH 写入 size 个 半字宽度(16位)数据 // cnt=0; do { FLASH_ProgramHalfWord((0x8002000 + cnt * 2), (u16)Ip[cnt]); //在指定地址编写半字(16位)。参数为待写入的地址和数据。 cnt++; }while(cnt <= Uart_Len); GPIO_SetBits(GPIOA,GPIO_Pin_0); //标志LED0 //锁定 FLASH 控制块// FLASH_Lock(); //锁定FLASH编写擦除控制器。 GPIO_SetBits(GPIOA,GPIO_Pin_0); //标志LED0 */[/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

你这地址这么低,这不会把烧写的程序给擦掉了吗
学海无涯苦作舟!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2014-9-17 17:04:31 | 显示全部楼层
你这地址这么低,这不会把烧写的程序给擦掉了吗

flash 读写操作.rar

472.8 KB, 下载次数: 1406

ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2014-9-17 17:04:31 | 显示全部楼层
地址偏移大一点.0x08010000开始写.并且你得设置烧录程序的时候不是芯片擦除.只是块擦除.
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-17 23:21:57 | 显示全部楼层
帮顶。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-21
在线时间
21 小时
 楼主| 发表于 2014-9-18 09:09:00 | 显示全部楼层
发现先读,再写,是错误的,读出的都是ff!怎么回事?必须是先写后读吗?那样就无法实现掉电保存数据啦,急啊~~有做过类似的没有
学海无涯苦作舟!
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-21
在线时间
21 小时
 楼主| 发表于 2014-9-18 12:01:20 | 显示全部楼层
回复【5楼】a4615800:
---------------------------------
太感谢大虾啦,的确是地址设置低了,换了0x08010000后就可以上电启动了。这个问题是解决了。额外加一个问题哈:程序提取短信中的公网ip数据放入数组后,通过该数组的ip可以建立tcp连接,但是重新打印出来是乱码呢,我就纳闷了,既然能建立tcp,为何打印出来不对呢。
学海无涯苦作舟!
回复

使用道具 举报

38

主题

302

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
440
金钱
440
注册时间
2012-3-6
在线时间
5 小时
发表于 2014-9-19 11:46:40 | 显示全部楼层
回复【6楼】jiayansushi:
----------------------------
我完全不能明白你说的是什么...
ES?全称?Embedded?Show;ES是由众多嵌入式爱好者组织的一个团队,致力于带领学生进步,帮助毕业生找到工作,更重要的是在职的嵌入式工作者提供自主外包和创业的机会。(详情进群查看) ES的宗旨是:交流共享与合作发展。ES?QQ群?第三群:152820643?。群内论坛有很多嵌入式开发模块解决方案可以参考。进群的立马共享自己做的模块简介。
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-21
在线时间
21 小时
 楼主| 发表于 2014-9-19 14:40:29 | 显示全部楼层
回复【7楼】a4615800:
---------------------------------
还是要感谢你,问题已经解决,方法是在建立tcp之前,先将数据写入flash。祝生活愉快!
学海无涯苦作舟!
回复

使用道具 举报

29

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1302
金钱
1302
注册时间
2013-1-11
在线时间
449 小时
发表于 2014-9-19 22:45:27 | 显示全部楼层
u32 Address = 0x8002000; //FLASH地址

while(1)
{
count = *((u8*)Address); //读FLASH
 
if((count >= 100) && (count != 0xff))
while(1);

count++;

FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(Address);
FLASH_ProgramHalfWord(Address, count);   //写FLASH
FLASH_Lock();

#ifdef Debug_Flash
Send_Hex_Uart1(count);
#endif
测试完全正确。

我的地址和你一样,测试OK的
回复

使用道具 举报

29

主题

136

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1302
金钱
1302
注册时间
2013-1-11
在线时间
449 小时
发表于 2014-9-19 22:45:52 | 显示全部楼层
u32 Address = 0x8002000; //FLASH地址

while(1)
{
count = *((u8*)Address); //读FLASH
 
if((count >= 100) && (count != 0xff))
while(1);

count++;

FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);
FLASH_ErasePage(Address);
FLASH_ProgramHalfWord(Address, count);   //写FLASH
FLASH_Lock();

#ifdef Debug_Flash
Send_Hex_Uart1(count);
#endif
测试完全正确。

我的地址和你一样,测试OK的
回复

使用道具 举报

9

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-8-21
在线时间
21 小时
 楼主| 发表于 2014-9-22 09:02:52 | 显示全部楼层
回复【10楼】aozhouduwang:
---------------------------------
谢谢回复。
学海无涯苦作舟!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-1 02:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表