在void SystemInit(void)中 添加
SCB->VTOR = FLASH_BASE | (VECT_TAB_OFFSET|0x4000);
然后有个大坑,iap 的boot中你用到的外设,在进入app后,需要HAL_UART_MspDeInit一下。
一天时间。。。。。
int rtthread_startup(void)
{
UART_HandleTypeDef huart;
huart.Instance = USART2;
rt_hw_interrupt_disable();
SCB->VTOR = FLASH_BASE | 0X4000;
__enable_irq();
__set_PRIMASK(0);
HAL_UART_MspDeInit(&huart);
。。。。。
}
在keil的link标签下,修改sct文件
LR_IROM1 0x08004000 0x000B0000 { ; load region size_region
ER_IROM1 0x08004000 0x000B0000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x0001fff0 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x2001fff0 UNINIT 0x00010 { ; RW data
.ANY (NO_INIT)
}
}
这里的搜索确实有些时候不太好
我有时候就用百度 然后 + rt-thread.org
这样可以让百度定位到这里。🤣
你这个遇到问题讲出来不错。
感觉你应该遇到了更具体的问题就是,刚跳转APP,然后中断就被触发了吧,整个系统就乱了,对吧。
看你这个问题,deinit 还是放回boot比较好,毕竟 app怎么会知道boot 开了多少中断与外设呢。