跳转代码如下:/* DFU工具下载的子程序虽然起始地址不是0x08000000 (由项目属性Target选项卡中的IROM1配置) 但是也可以在Keil中直接下载程序, 而且还能使用ST-Link进行程序调试 只要在DFU主程序中禁用CRC校验就行 请确保system_stm32xxxx.c中设置的SCB->VTOR刚好等于程序的起始地址*/#define CRCEN 1 // 若想要直...
int main( void ) { // 取ApplicationAddress + 4地址的值 JumpAddress = *(__IO uint32_t*)(ApplicationAddress + 4); // 强制转换 Jump_To_Application = (pFunction) JumpAddress; // 设置堆栈指针指向目标app地址 __set_MSP(*(__IO uint32_t*)ApplicationAddress); // 跳转到app Jump_To_Appl...
Jump_To_Application(); } } 2、if (((*(volatile u32*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)分析: ApplicationAddress存放的是用户程序Flash的首地址,(*(volatile u32*)ApplicationAddress)的意思是取用户程序首地址里面的数据,这个数据就是用户代码的堆栈地址,堆栈地址指向RAM,而RAM的起始地址...
所以如果我们在bootloader里给这个指针赋一个application里一个函数的地址,就可以实现从bootloader到application的跳转。 函数内跳转 JumpToApplication = (pFunction) ((__IO uint32_t)(APPLICATION_ADDRESS + 4)); __set_MSP((__IO uint32_t) APPLICATION_ADDRESS); JumpToApplication(); //jump 这里刚接触bo...
void Jump_To_User_App(uint32_t addr) { pFunction Jump_To_Application; uint8_t i; if ( ( ( * ( __IO uint32_t * ) addr ) & 0x2FFE0000 ) == 0x20000000 ) { //检查栈顶地址是否合法. HAL_CAN_MspDeInit(&hcan1); HAL_TIM_Base_MspDeInit(&htim2); ...
pFunction JumpToApplication; uint32_t JumpAddress;//跳转到应用程序段//appxaddr:用户代码起始地址.voidiap_load_app(uint32_t appxaddr)//传进来的参数是FLASH_APP_ADDR 0x08008000{ __disable_irq ();//关闭总中断/*STM32F4的RAM分为好几块,不是单纯的0x20000000*///if(((*(vu32*)appxaddr)&0x...
Jump_To_Application();} static void BootLoader_SendByte(uint8_t data){ Usartx_SendArray(USART1,...
Jump_To_Application(); } } APP 工程配置 APP 的工程需要进行一些配置,以MDK为例,如下图所示,APP 程序存放的 FLASH 地址为 0x8010000,大小为 0x30000。 APP程序代码需要进行如下配置: 修改APP 内部 Flash 向量表重定位SCB->VTOR APP运行后,初始化函数中,开启中断,否则程序会运行异常 ...
void boot_jump_to_run(uint32_t addr) { uint32_t jmp_addr; /* Check if user code is programmed starting from address addr */ if (((*(uint32_t *)addr) & 0x2FFE0000) == 0x20000000) { /* Jump to user application */ jmp_addr = *(uint32_t *)(addr + 4); ...
JumpToApplication(); 方法二: 在应用层函数里添加代码 __IO uint32_t VectorTable[48] __attribute__((at(0x20000000))); /*Relocate by software the vector table to the internal SRAM at 0x20000000 ***//*Copy the vector table from the Flash (mapped at the base of the application ...