OpenEdv-开源电子网

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

请问SCB的VTOR寄存器的作用是什么?

[复制链接]

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
发表于 2022-10-28 11:02:45 | 显示全部楼层 |阅读模式
1金钱
下图是原子F407和F103的例程
其中F1的基址是0x08000000
F4的基址是0x00000000

不过根据手册介绍VTOR寄存器除了29位指示向量表位置在FLASH还是RAM外,只有【28:9】的部分有效啊?那个08000000应该不代表FLASH起始地址吧?
那F1里写的这个基址作用是什么呢?
还有这个VTOR寄存器中的偏移和keil软件里option的target处设置的FLASH偏移是什么关系呢?这里没太看懂 求大佬解释~

最佳答案

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

三种BOOT启动方式的描述: 在从FLASH启动时, The main Flash memory is aliased in the boot memory space(0x0000 0000),but still accessible from its original memory space(0x0800 0000). Inother words, the Flash memory contents can be accessed starting from address 0x0000 0000 or 0x0800 0000.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-28 11:02:46 | 显示全部楼层
本帖最后由 warship 于 2022-10-28 20:11 编辑

三种BOOT启动方式的描述:
在从FLASH启动时,
The main Flash memory is aliased in the boot memory space(0x0000 0000),but still accessible from its
original memory space(0x0800 0000). Inother words, the Flash memory contents can be accessed
starting from address 0x0000 0000 or 0x0800 0000.


我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-28 13:17:52 | 显示全部楼层
本帖最后由 warship 于 2022-10-28 13:21 编辑

我的理解很简单:VTOR整个就是一个偏移量寄存器,它用来标识向量表存放在什么位置。
不要管29位什么的,那些都是马后炮。
以F1为例,ROM和FLASH的起始地址分别是0800 0000和2000 0000
一般向量表要么放在ROM首址,要么放在FLASH首址,
根据你的情况就这么设就OK了。自然第29位就分别是0和1

至于你说的keil软件里option的target处设置:
这里是你对目标板的存储规划,
分别是代码区起始地址和大小、 RAM区的起始地址和大小。
跟上面说的是两回事儿,
不过,你可以把向量表放在代码区首址或者RAM区首址,
一般情况下就是这么干的。
当然,你也可以不放在首址,而是根据特殊需要的其它地址,
但不管怎样,必须通过VTOR来指示你究竟放在哪里。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-28 13:40:01 | 显示全部楼层
warship 发表于 2022-10-28 13:17
我的理解很简单:VTOR整个就是一个偏移量寄存器,它用来标识向量表存放在什么位置。
不要管29位什么的,那 ...

上午发帖太匆忙 忘记上传图片了 你看原子F407的配套例程中 寄存器版本的为什么VTOR的基地址写的是0呢?

我看库函数中官方提供的system_stm32f4xx.c里写的是08000000

通常情况下必须放在FLASH或者RAM的首地址 是不是因为通过BOOT的配置 启动后会从0地址跳转到这两种中的一种
如果不把基址写在这里就会找不到复位中断 之后就报错了呢?
F4-2.png
F4-1.png
F1-2.png
F1-1.png
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-28 14:18:29 | 显示全部楼层
warship 发表于 2022-10-28 13:17
我的理解很简单:VTOR整个就是一个偏移量寄存器,它用来标识向量表存放在什么位置。
不要管29位什么的,那 ...

还有我用DEBUG看VTOR寄存器一个是原子F1的寄存器版RTC实验程序 一个是我用CUBEMX写的一个只有串口功能的程序
我发现CUBEMX的VTOR也是0 但是并不影响使用 所以这个VTOR的基址作用到底是什么呢?
002.png
001.png
回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-28 18:52:53 | 显示全部楼层
大多数情况下,
0000 0000和0800 0000效果是一样的,
0800 0000也是要映射到0000 0000的。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-28 19:15:50 | 显示全部楼层
warship 发表于 2022-10-28 18:52
大多数情况下,
0000 0000和0800 0000效果是一样的,
0800 0000也是要映射到0000 0000的。

这个08000000映射到00000000是在哪里介绍的?就是这里不太懂……
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-29 13:03:09 | 显示全部楼层
warship 发表于 2022-10-28 11:02
三种BOOT启动方式的描述:
在从FLASH启动时,
The main Flash memory is aliased in the boot memory spa ...

……现在有点儿糊涂了
我看了一下原文 这里写的是通过BOOT的配置 可以选择把FLASH或系统存储器地址映射到0地址 同时也可以以他们的原地址进行访问 SRAM只能从它的原地址访问这句话感觉和向量表的偏移是两回事啊???
向量表的偏移在编写程序时已经确定了 而启动位置这个是实际工作时才定下来0地址指向了哪里

比如原子F407实验50 串口IAP实验
寄存器版在制作APP程序时向量表偏移了0x8000但是基址是0, 最后存到VTOR寄存器的值就是0x0000 8000
标准库版在制作APP程序时向量表偏移了0x10000 但是FLASH_BASE是0x0800 0000, 最后存到VTOR的值是0x0801 0000
设A代表偏移量0x8000(或0x10000)
为什么VTOR寄存器存的内容不一样 最后偏移的结果 都是在0x0800 0000的基础上将向量表偏移了A呢

这是VTOR寄存器各位具体含义的原文
Bits 29:9 TBLOFF: Vector table base offset field.
It contains bits [29:9] of the offset of the table base from memory address 0x00000000. When

setting TBLOFF, you must align the offset to the number of exception entries in the vector
table. The minimum alignment is 128 words. Table alignment requirements mean that bits[8:0]
of the table offset are always zero.
根据解释我可以理解为 VTOR存的东西从代表0地址偏移了多少 如果存的是0x0801 0000直接在FLASH首地址开始偏移没有问题;存0x0000 8000的话会因为0地址被映射到08000000 所以偏移也没问题
那如果采用从系统存储器启动时 在系统存储器地址的基础上偏移0x8000 不就有问题了嘛???


00.png
000.png
回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-30 11:22:18 | 显示全部楼层
babyrabbit 发表于 2022-10-29 13:03
……现在有点儿糊涂了
我看了一下原文 这里写的是通过BOOT的配置 可以选择把FLASH或系统存储器地址映射 ...

系统存储器启动时,系统存储器也被映射到0,
和FLASH是一样的情况。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-30 13:33:29 | 显示全部楼层
warship 发表于 2022-10-30 11:22
系统存储器启动时,系统存储器也被映射到0,
和FLASH是一样的情况。

我的意思是从系统存储器开始偏移的话 不就有问题了吗?因为程序的本意是想设置为从FLASH首地址进行偏移的
回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-30 16:11:01 | 显示全部楼层
babyrabbit 发表于 2022-10-30 13:33
我的意思是从系统存储器开始偏移的话 不就有问题了吗?因为程序的本意是想设置为从FLASH首地址进行偏移的

这个IAP没有具体玩过,
有没有具体的完整工程,
最好是F1的,
我玩玩研究研究。
我的邮箱是hsf100750@163.com
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-31 08:55:21 | 显示全部楼层
warship 发表于 2022-10-30 16:11
这个IAP没有具体玩过,
有没有具体的完整工程,
最好是F1的,

刚看到要F1的   我在附件里上传了 邮箱发的是F4的 这就是原子例程里的代码

实验47 串口IAP实验.rar

772.39 KB, 下载次数: 3

回复

使用道具 举报

31

主题

1953

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4462
金钱
4462
注册时间
2018-5-11
在线时间
932 小时
发表于 2022-10-31 18:32:35 | 显示全部楼层
本帖最后由 warship 于 2022-10-31 19:01 编辑
babyrabbit 发表于 2022-10-31 08:55
刚看到要F1的   我在附件里上传了 邮箱发的是F4的 这就是原子例程里的代码

简单看了一下这个F1版的代码,
这个好像和普通的程序没有什么两样啊,
它操作VTOR也正常和普通程序一样,
这个IAP程序只是一个BOOTLOADER,
只是接收APP并加载,
正确无误后将控制权完全交给APP了。
要研究设置VTOR的应该是APP吧?
有没有一个合适的APP的BIN文件拿来试一试
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

16

主题

426

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2765
金钱
2765
注册时间
2018-11-8
在线时间
438 小时
 楼主| 发表于 2022-10-31 22:42:46 | 显示全部楼层
warship 发表于 2022-10-31 18:32
简单看了一下这个F1版的代码,
这个好像和普通的程序没有什么两样啊,
它操作VTOR也正常和普通程序一样 ...

压缩包里不是有2个APP程序?一个是存在FLASH的RTC实验 一个是存在SRAM的触摸屏实验
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 22:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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