OpenEdv-开源电子网

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

关于bootloader有个问题不是特别理解

[复制链接]

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
发表于 2014-3-11 12:40:04 | 显示全部楼层 |阅读模式
比如自己写了一个bootloader,他的主要功能是烧写程序,我把这个bootloader烧写在0x08000000地址,然后复位后开始执行,初始化一些外设,比如串口,这时不断检测有无固件更新,如果有的话就用串口更新固件,更新后就执行app程序,如果没有的话在bootloader里面呆5S退出,然后跳到app程序里面接着执行应用程序,这个时候继续执行app程序后是不是也需要标准的STM32启动模式呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-11 12:42:03 | 显示全部楼层
标准的启动过程有1、堆栈初始化;2、向量表定义;3、地址重映射以及中断向量转移;4、设置系统时钟;5、中断寄存器初始化;6、进入C的世界
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-11 12:43:59 | 显示全部楼层
回复【楼主位】数字鹰:
---------------------------------
自己写个bootloader就不要来回设置boot0的引脚了
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-3-11 15:05:39 | 显示全部楼层
回复【楼主位】数字鹰:
---------------------------------
是的,
不过有一部分需要注意:在BootLoader里面 尽量不要初始化过多的用不到的外设 , 
否则关不掉在执行过程中,则可能 APP里面反而不能重新初始化, 可能导致错误[如果配置不一样的话]。
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-11 16:25:19 | 显示全部楼层
回复【4楼】aleda303:
---------------------------------
那在应用程序里面是不是还要重新设置向量表的地址呢?我感觉是要的,重映射
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-3-11 17:00:45 | 显示全部楼层
回复【5楼】数字鹰:
---------------------------------
是的, 要设置的一致
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-12 16:30:02 | 显示全部楼层
回复【6楼】aleda303:
---------------------------------
但是我刚刚试的,为啥我的bin文件用J-Flash烧写在0x08000000或者0x08001000程序都是可以执行的呢?我程序里面设置的中断向量表是放在0x08000000地址的
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-12 16:39:51 | 显示全部楼层
回复【6楼】aleda303:
---------------------------------
刚刚试了下   烧写在其他地址的确是不能执行的   但是可以烧写在0x08000004   这和地址0x08000000是一样的,都可以运行   这也验证了第四个字节后存放的复位向量地址了
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-3-12 17:21:50 | 显示全部楼层
   // 跳转到用户程序
if (((*(vu32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
__MSR_MSP(*(vu32*) ApplicationAddress);
  (*(void (*)())(*(vu32*)(ApplicationAddress +4)))();
}
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-13 09:40:31 | 显示全部楼层
回复【9楼】aleda303:
---------------------------------
嗯   是的  还有个问题   就是我怎么都生成不了.bin文件,不知道为啥  就按文档上面说的步骤设置的,很奇怪
回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-13 09:42:47 | 显示全部楼层
这是设置的


为啥这有个引号呢   后面的DOS16是什么意思呢,要不要勾选呢,我不勾选的话就提示错误,勾选后没有错误但是也没有生成bin文件,很奇怪呀,我的Keil路径是D盘

回复 支持 反对

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
96
金钱
96
注册时间
2014-3-11
在线时间
0 小时
 楼主| 发表于 2014-3-13 09:44:20 | 显示全部楼层
而且我下了战舰的程序了,直接在里面编译也是不能生成bin文件,只有原来的bin文件,我想知道这是什么原因呢
回复 支持 反对

使用道具 举报

93

主题

746

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2012-9-16
在线时间
286 小时
发表于 2014-3-13 10:26:22 | 显示全部楼层
参考一下这里面的吧,有些不大匹配,自己调整一下!

使用STM32F2x7的以太网通信接口实施在应用编程IAP.pdf

20.04 MB, 下载次数: 2086

纵浪大化中,不喜亦不惧;应尽便须尽,无复独多虑!
回复 支持 反对

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-3-14 11:28:15 | 显示全部楼层
回复【11楼】数字鹰:
---------------------------------
D:\Program Files\Keil\ARM\ARMCC\bin\fromelf.exe  "output\T.axf" --bin --output "output\T.bin"

不同版本 路径有所区别

不加引号 也可以。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 23:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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