赞
踩
STM32F103C8T6,keil5
Boot地址:0x08000000,大小:16K
App地址:0x08004000, 大小:48K
if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000) { Serial_PutString("Start program execution......\r\n\n"); __set_PRIMASK(1); /*关闭全局中断,APP程序中带有RTOS时,这个很重要*/ /* 关闭滴答时钟,复位*/ SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; HAL_SuspendTick(); // 挂起滴答定时器 /* 设置所以时钟默认状态 */ HAL_RCC_DeInit(); /* 关闭所有中断,清除中断挂起标志 */ for (i = 0; i < 8; i++) { NVIC->ICER[i]=0xFFFFFFFF; NVIC->ICPR[i]=0xFFFFFFFF; } /* execute the new program */ JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4); __set_PSP(*(__IO uint32_t*) APPLICATION_ADDRESS); /* Jump to user application */ JumpToApplication = (pFunction) JumpAddress; /* Initialize user application's Stack Pointer */ __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS); /* 设置主堆栈指针 */ /* 在 RTOS 工程,这条语句很重要,设置为特权级模式,使用 MSP 指针 */ __set_CONTROL(0); JumpToApplication(); }
APP程序按照正常的用户程序编写,编写完成之后修改中断偏移量,修改keil中地址。
修改前:
修改后:
修改前:
修改后:
(1)APP程序在裸机运行的情况下,Bootloader程序在跳转应用程序之前不关闭中断,跳转后应用程序可以正常运行。
(2)APP程序在FreeRTOS运行的情况下,Bootloader程序在跳转应用程序之前必须关闭中断,否则跳转后应用程序会跑飞。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。