STM32F4跳转函数
2024-09-18 17:19:15
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_IRQn%32;
// NVIC->ICER[TIM3_IRQn/32]|=1<<TIM3_IRQn%32;
// NVIC->ICER[TIM4_IRQn/32]|=1<<TIM4_IRQn%32;
NVIC->ICER[OTG_FS_IRQn/32]|=1<<OTG_FS_IRQn%32;
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");
最新文章
- 网站缓存数据到tomcat服务器
- JS中遍历普通数组和字典数组的区别
- HW7.5
- matlab高斯模板生成,K是归一化系数,上面是一个半径200的高斯模板用来做MSR
- Fibonacci数列的java实现
- Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文
- AtCoder Beginner Contest 071 D - Coloring Dominoes
- C语言笔试经典-查找多位数重复数字以及次数
- 【转】用信鸽来解释 HTTPS
- 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解
- [复习]动态dp
- [codechef July Challenge 2017] Calculator
- [转帖]Mysql 最简单的参数调优配置
- 团队Git使用教程
- MySQL Crash Course #03# Chapter 5. 6 排序. BETWEEN. IS NULL
- POJ 2229 Sumsets(技巧题, 背包变形)
- ORM 查询
- Oracle 左连接(+)加号用法及常用语法之间的关系
- _heap_alloc_base 奔溃,奔溃原因:堆被破坏
- Controlling Session Behavior in Asp.Net MVC4
热门文章
- Centos 7.6 安装部署 openGauss 3.1.0 企业版一主两备集群
- webrtc编译,不使用内置boringssl,使用openssl的
- Vscode连接gitee远程仓库
- linux mint 归档管理器报错Extraction not performd
- CompletionService 使用小结
- EndNote设置导出参考文献格式为中文国标GBT7714
- Qt网络编程-书接上文,浅谈TCP文件收发,以及心跳包
- 第一百一十四篇: JS数组Array(三)数组常用方法
- JavaScript冒泡排序+Vue可视化冒泡动画
- 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)