OpenEdv-开源电子网

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

STM32F103的官方IAP中没有看到把代码搬移到RAM的程序,位于内部FLASH上的IAP可以直接擦除STM的内部FLASH的部分空间然后编程吗?

[复制链接]

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-5-28
在线时间
0 小时
发表于 2014-6-5 10:28:56 | 显示全部楼层 |阅读模式
5金钱
如题,近来下载了一个STM32的官方IAP,里面先使用串口下载主程序到RAM空间,然后擦除内部FLASH的相应空间,并把RAM空间的代码拷贝到内部FLASH上去。我看了看整体的代码,没有发现这个IAP是先把自己拷贝到RAM中再去执行擦除、编程内部FLASH的,难道STM32上的FLASH可以一边运行着在上面的IAP程序,一边去擦除自己的其它部分然后编程吗?理解不了,请前辈们给指点迷津。
向着目标前进
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-6-5 12:54:35 | 显示全部楼层
你主要不是擦出bootloader程序的空间即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2014-6-5 14:12:02 | 显示全部楼层
向量表可以重映射,ROM里面就可以存在多个API
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-5-28
在线时间
0 小时
 楼主| 发表于 2014-6-5 14:21:42 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
我不明白,bootloader的所处的位置也是在内部FLASH里面的啊,执行内部FLASH擦除与编程操作的时候,处理器还能读到bootloader里面的程序语句并执行吗?
向着目标前进
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-5-28
在线时间
0 小时
 楼主| 发表于 2014-6-5 14:27:19 | 显示全部楼层
回复【3楼】DongInker:
---------------------------------
你好,我不能理解我所遇到的疑问和你说的API之间的直接关系,能解释一下吗?
向着目标前进
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2014-6-5 14:37:31 | 显示全部楼层
目前是我是使用STM32提供的电池供电内存赋值通知BOOT要执行哪儿API, 
如ROM分布 BOOT 、 API1、 API2 
默认正常执行BOOT然后API1
当API1执行要跳转到API2时,API1会向电池供电标记一个值,然后进入软重启,BOOT开始执行检测标记值为执行API2,BOOT就跳转到API2执行,
这样就可以控制三者之间的跳转或代码升级。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2014-5-28
在线时间
0 小时
 楼主| 发表于 2014-6-5 15:30:15 | 显示全部楼层
回复【6楼】DongInker:
---------------------------------
我的板子上镶嵌了一颗M25P16存储器,我使用板子上的GPRS模块和电脑上位机软件通信,当更新了硬件程序的时候,我对板子下发一个升级指令,板子开始自动接收我通过流量给它的程序,一边接收一边把程序存储到M25P16上去,接收完毕,验证正确,就在M25的一个单元做一个标志,然后软件自动复位处理器。处理器在0x08000000处执行bootloader,自动检测位于M25上的那个标志单元,如果置位,说明有升级程序, 然后先擦除原来主程序空间,开始于0x8005000处,然后再把M25上的程序段拷贝到内部FLASH的0x08005000处。擦除M25上的程序。并开始跳转到主程序执行。
我下载了STM32官方的一个IAP程序,把它修改后放到了0x08000000处,能够正常按照我的思路执行。但是,我现在的问题是我在官方的IAP程序中没有把这个bootloader搬运到ram中执行,STM32为什么可以一边执行着它自0x08000000处开始的boot程序,一边对位于0x08005000处开始的空间进行擦除和编程呢?
向着目标前进
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-6-6 12:44:32 | 显示全部楼层
回复【4楼】xuanfeng008200:
---------------------------------
谁叫你整个ROM擦除的?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

5

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2014-12-2
在线时间
34 小时
发表于 2016-9-24 09:53:04 | 显示全部楼层
八度空间 发表于 2014-6-6 12:44
回复【4楼】xuanfeng008200:
---------------------------------
谁叫你整个ROM擦除的?

hi
  这个是不能全部擦除的吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 21:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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