打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
STM32F4跳转函数

JMP2APP

void JMP2APP(void){      pFunction Jump_To_Application;    uint32_t JumpAddress;       if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)    {      //将使用过的中断和外设全部关闭//      NVIC->ICER[TIM7_IRQn/32]|=1<<TIM7_IRQn2;//      NVIC->ICER[TIM3_IRQn/32]|=1<<TIM3_IRQn2;//      NVIC->ICER[TIM4_IRQn/32]|=1<<TIM4_IRQn2;      NVIC->ICER[OTG_FS_IRQn/32]|=1<<OTG_FS_IRQn2;            SysTick->CTRL&=~(1<<0);      SysTick->CTRL&=~(1<<1);      SysTick->LOAD=0;      RCC->APB1ENR&=~(1<<1);	//TIM3时钟关闭      RCC->APB1ENR&=~(1<<2);	//TIM4时钟关闭      RCC->APB1ENR&=~(1<<5);	//TIM7时钟关闭       RCC->APB2ENR&=~(1<<0);	//TIM1时钟关闭       RCC->APB2ENR&=~(1<<1);	//TIM8时钟关闭       RCC->AHB2ENR&=~(1<<7);    //关闭USB OTG时钟            ADC3->CR1=0;      ADC3->CR2=0;              //关闭AD转换器               UART4->CR1 = 0;      UART4->CR3 = 0;      UART5->CR1 = 0;      UART5->CR3 = 0;      USART6->CR1 = 0;      USART6->CR3 = 0;      USART1->CR1 = 0;      USART1->CR3 = 0;            DMA2_Stream0->NDTR=0;      DMA2_Stream0->CR=0;      //关闭ADC的DMA传输      DMA2_Stream1->NDTR=0;      DMA2_Stream1->CR=0;            DMA2_Stream2->NDTR=0;      DMA2_Stream2->CR=0;                  DMA1_Stream7->NDTR=0;      DMA1_Stream7->CR=0;      //关闭DMA传输      DMA1_Stream5->NDTR=0;      DMA1_Stream5->CR=0;      //关闭DMA传输      DMA1_Stream2->NDTR=0;      DMA1_Stream2->CR=0;      //关闭DMA传输      DMA1_Stream0->NDTR=0;      DMA1_Stream0->CR=0;      //关闭DMA传输                       RCC->APB2ENR&=~(1<<10);    //关闭ADC3      RCC->AHB1ENR&=~(1<<21);//DMA1时钟关闭        RCC->AHB1ENR&=~(1<<22);//DMA2时钟关闭                      RCC->APB1ENR&=~(1<<19);    //关闭USART4      RCC->APB1ENR&=~(1<<20);    //关闭USART5      RCC->APB2ENR&=~(1<<4);    //关闭USART1      RCC->APB2ENR&=~(1<<5);    //关闭USART6      RCC->APB2ENR&=~(1<<14);    //关闭SYSCFG时钟            /* Jump to user application */      JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS   4);      Jump_To_Application = (pFunction) JumpAddress;            //control_flag = __get_CONTROL();      __set_CONTROL(0);   //重置CONTROL,使线程模式处于特权等级,使用主栈指针      /* Initialize user application's Stack Pointer */      __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);      __set_PSP(*(__IO uint32_t*) APPLICATION_ADDRESS);      Jump_To_Application();    }}

跳转后的代码

SCB->VTOR = 0x08000000 | (0x20000 & (uint32_t)0x1FFFFF80);  //重映射到0x08020000__asm("CPSIE  I");
来源:https://www.icode9.com/content-4-718201.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
STM32F1系列之常用外设说明
无刷有感电机测速、速度闭环控制
电机的速度pid闭环控制代码及注释
STM32寄存器深入分析
stm32使用体会
【青风带你学stm32f051系列教程】第14课 DAC的运用 | 爱板网
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服