打印
[STM32L0]

请教STM32L051做bootloader时的SCB->VTOR设置

[复制链接]
7324|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aozima|  楼主 | 2017-1-11 12:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aozima 于 2017-1-11 15:41 编辑

之前了解到M0不支持通过SCB->VTOR来修改中断向量,
所以STM32L0提供了把SRAM映射到0地址的功能。

当使用bootloader功能时,把APP的中断向量复制到 0x20000000
然后由ST把0x20000000映射到0地址去。
        // SYSCFG->SYSCFG_CFGR1.MEM_MODE = 11: SRAM mapped at 0x0000 0000.
    memcpy((int *)0x20000000, (const int *)app_address, 256);
        __HAL_RCC_SYSCFG_CLK_ENABLE();
        __HAL_SYSCFG_REMAPMEMORY_SRAM();


结果发现APP的中断还是进了bootloader中的。
无意间发现默认的 system_stm32l0xx.c 代码有配置 VTOR寄存器
于是
    SCB->VTOR = 0x20000000; /* TODO: M0竟然也有VTOR? */


然后APP的中断就正常了。

请问这是什么情况?


评论
zlf1208 2020-9-10 13:41 回复TA
没有仔细看手册,L0系列的芯片是M0+内核,与M0内核不同。M0+内核有VTOR寄存器 
沙发
feelhyq| | 2017-1-11 15:18 | 只看该作者
中断向量表由硬件决定,单纯的进行数据拷贝肯定是没有效果。 既然重定向了中断向量表而且依你所说 APP中断正常了,至少说明你是用的那个片子支持中断向量重定向。

使用特权

评论回复
板凳
aozima|  楼主 | 2017-1-11 20:04 | 只看该作者
从arm.com下载 “Cortex™-M0 Devices Generic User Guide”
The vector table is fixed at address 0x00000000.


而 “Cortex™-M0+ Devices Generic User Guide”中有写可选VTOR,所以看来STM32L0是可以有VTOR的。
1.1.3 Cortex-M0+ processor features summary
• Thumb instruction set with Thumb-2 technology.
• High code density with 32-bit performance.
• Optional Unprivileged and Privileged mode execution.
• Tools and binary upwards compatible with Cortex-M processor family.
• Integrated ultra low-power sleep modes.
• Efficient code execution enabling slower processor clock or increased sleep time.
• Optional single-cycle 32-bit hardware multiplier.
• Zero jitter interrupt handling.
• Optional Memory Protection Unit (MPU) for safety-critical applications.
• Optional single-cycle I/O port.
• Optional Vector Table Offset Register (VTOR).
• Extensive debug capabilities.

使用特权

评论回复
地板
dugujian00| | 2017-3-23 22:50 | 只看该作者
正解,找这个问题也找了很久,参考F0的来写也不行。
无意中看到 /* Set the Vector Table base location at 0x08004000
    (this is already done in system_stm32l0xx.c file) */

然后去那个文件里改了下VECT_TAB_OFFSET的值,从IAP跳到APP就正常跑了。

使用特权

评论回复
5
lrzxc1| | 2018-11-16 10:56 | 只看该作者
dugujian00 发表于 2017-3-23 22:50
正解,找这个问题也找了很久,参考F0的来写也不行。
无意中看到 /* Set the Vector Table base location at ...

多谢经验分享。

使用特权

评论回复
6
香水城| | 2020-9-10 13:58 | 只看该作者
STM32f0是M0的核,没有VTOR寄存器,
STM32L0/G0都是M0+的核,有VTOR寄存器。

使用特权

评论回复
7
勇敢的大白菜| | 2020-9-10 14:41 | 只看该作者
多谢分享,学到了很多知识,不错,确实不错的说。感觉不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:RTOS RT-Thread

55

主题

2016

帖子

23

粉丝