参考链接
http://www.51hei.com/bbs/dpj-40235-1.html
最近在做STM32F070xx 的OTA功能,也就是远程升级 但是程序跳转后,发现APP发生中断可以响应(仅WKUP ,其他的没试过,不敢妄下结论).。但是无法进入中断处理函数,经过排查,应该是中断向量的偏移没有设置好,之前在做F4的时候,是在程序的开头部分加上SCB->VTOR = FLASH_BASE | 0x8000(后面加上的是自己的偏移地址,可以自行设置) 但是发现在F0的库函数中,并没有发现这个寄存器的设置位置。所以查找了相关的文档后发现,M0的偏移要通过其他的方式来设置,以下是设置的步骤
1 在程序的开头加上 memcpy((void*)0x20000000, (void*)0x08002000, 0xc0);
SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
其中 0x20000000是不需要改动的 这个是SRAM的地址 后面加上的0x08002000是程序的偏移地址 可以自行更改 后面的0xc0是中断向量的的大小 可以在.s文件中查看定义的中断个数 比如
__Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler
; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog
DCD 0 ; Reserved
DCD RTC_IRQHandler ; RTC through EXTI Line
DCD FLASH_IRQHandler ; FLASH
DCD RCC_IRQHandler ; RCC
DCD EXTI0_1_IRQHandler ; EXTI Line 0 and 1
DCD EXTI2_3_IRQHandler ; EXTI Line 2 and 3
DCD EXTI4_15_IRQHandler ; EXTI Line 4 to 15
DCD 0 ; Reserved
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD DMA1_Channel2_3_IRQHandler ; DMA1 Channel 2 and Channel 3
DCD DMA1_Channel4_5_IRQHandler ; DMA1 Channel 4 and Channel 5
DCD ADC1_IRQHandler ; ADC1
DCD TIM1_BRK_UP_TRG_COM_IRQHandler ; TIM1 Break, Update, Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD 0 ; Reserved
DCD TIM3_IRQHandler ; TIM3
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD TIM14_IRQHandler ; TIM14
DCD 0 ; Reserved
DCD TIM16_IRQHandler ; TIM16
DCD TIM17_IRQHandler ; TIM17
DCD I2C1_IRQHandler ; I2C1
DCD 0 ; Reserved
DCD SPI1_IRQHandler ; SPI1
DCD 0 ; Reserved
DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD USB_IRQHandler ; USB
这里有48个 每个DCD4个字节 所以中断向量的大小为48*4 = oxC0 所以在
这边如红 {MOD}区域的设置。这样基本就解决了。