本帖最后由 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的中断就正常了。
请问这是什么情况?
|
没有仔细看手册,L0系列的芯片是M0+内核,与M0内核不同。M0+内核有VTOR寄存器