你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
任风吹吹 发表于 2016-11-23 16:18 RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE); 换成: __HAL_RCC_SYSCFG_CLK_ENABLE();
luscu 发表于 2016-11-24 10:00 问题已经解决。总结如下: 1、API工程只需修改目标器件即可。其他基本不需要修改。 2、APP工程的 flash的 ...
任风吹吹 发表于 2016-11-24 10:15 楼主,STM32程序的启动并不是一开始就进入main函数的,而是SystemInit,你看下S文件: ; Reset handler rou ...
STM32隐藏
5.18活动板子会不会是STM32L4呢
STM32 CUBE软件中找不到STM32L4系列单片机
Your UAT Feedback is needed within today.
应用
AAA
测试测试12345
群
tiwen
BBBB
你说的:从IAP跳转到APP后第一件事情就是需要立即重置VectorTable 这个是对的!试验成功。
但是这个文章并不是立即重置VectorTable ,我按照博客的顺序试验不成功! 按照分析是你说的对!
我改为:
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t i = 0;
for(i = 0; i < 48; i++)
{
VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}
__HAL_RCC_SYSCFG_CLK_ENABLE();
/* Remap SRAM at 0x00000000 */
__HAL_SYSCFG_REMAPMEMORY_SRAM();
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
1、API工程只需修改目标器件即可。其他基本不需要修改。
2、APP工程的 flash的起始地址改为:0x8003000, IRAM1的起始地址也是改为:0x200000C0。
注意:从IAP跳转到APP后第一件事情就是需要立即重置VectorTable,具体参考如下:
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t i = 0;
for(i = 0; i < 48; i++)
{
VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
}
__HAL_RCC_SYSCFG_CLK_ENABLE();
/* Remap SRAM at 0x00000000 */
__HAL_SYSCFG_REMAPMEMORY_SRAM();
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
谢谢大家!
楼主,STM32程序的启动并不是一开始就进入main函数的,而是SystemInit,你看下S文件:
; Reset handler routine
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
SystemInit()函数我是使用CUBEMX生产的,没有修改,那按这个分析,开机启动先进入SystemInit(),在入main前这个时候如果出现中断,产生的系统中断还是使用IAP中的向量 就会异常。现在我实际调试 进入SystemInit()一直到进入main没遇到中断,所以就没问题!我说的对吧?
谢谢你细心分析!