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_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");
STM32F4跳转函数的更多相关文章
- 自定义PHP页面跳转函数redirect($url, $time = 0, $msg = '')
利用PHP的header()函数,可以实现页面跳转,如 header("Location: " . $url); 但它有个缺点,一旦HTTP报头块已经发送,就不能使用 header ...
- 微信小程序跳转函数总结
微信小程序跳转函数总结 笔者在微信小程序前端的开发过程中,在不同的情况下遇到了需要使用不同的页面跳转逻辑的情况,以下是我对这些函数的使用场景的一个总结介绍. wx.navigateTo 这是最常用 ...
- discuz二次开发笔记(二)------跳转函数运用
前几天在增加修改功能时,突然用到一个提示函数,有点不理解,看了他的由来后果断做下笔记,感觉这在以后的开发中肯定还是要用的上的.有些地方不是很理解,在以后慢慢纠正.查补. Htm页面中用的js跳转: $ ...
- sublime ctags跳转函数使用
sublime 点击某函数 按F12可以查到相关函数文件 正题: 1.下载ctags客户端文件 http://prdownloads.sourceforge.net/ctags/ctags58.zip ...
- sublime3跳转函数
点击Preferences->Browse Packages进入Packages目录,然后打开User目录,查看User目录里面有没有Default (Windows).sublime-mous ...
- 简单灵活的 PHP页面跳转函数
<? function Location($url = ,) == ,) === ,) === ) { $pro ...
- 3.STM32F4按键扫描函数
//按键处理函数 //返回按键值 //mode:0,不支持连续按;1,支持连续按; //0,没有任何按键按下 //1, KEY0 按下 2, KEY1 按下 3, KEY2 按下 4, WKUP 按下 ...
- setjmp与longjmp非局部跳转函数的使用
[root@bogon code]# cat c.c #include<stdio.h> #include<setjmp.h> static jmp_buf env;//定义全 ...
- PHP : 封装跳转函数,实现三个页面的跳转
具体实现:有a,b两个页面,一个跳转页面c,在a执行完后先进行c页面的提示,再跳转到b 1.文件设计: 2.c页面封装方法内容(function.php): a页面内容(a.html): a页面的后台 ...
- sublime 函数跳转插件 — ctags 安装和使用
ctags 是 sublime 下一个函数跳转的插件,可以让你方便地从函数调用的位置跳到函数定义的位置.相对于其他插件,ctags 的安装稍微有点复杂,这里记录下备忘. 首先,假设已经安装 Packa ...
随机推荐
- 【Java并发005】原理层面:volatile关键字全解析
一.前言 在Java 5之前,volatile是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以重获生机. volatile关键字虽然 ...
- Training: Encodings I
原题链接:http://www.wechall.net/challenge/training/encodings1/index.php 根据题目信息貌似是让我们用这个JPK来解码,我们先点击JPK去下 ...
- 重学c#系列——订阅发布与事件[二十六]
前言 简单介绍一下订阅发布与事件. 正文 先来看一下委托的订阅与发布. public delegate void TestDelegate(); public class Cat { public T ...
- Django的manytomany字段
manytomany字段 用于表示多对多的关系,最常见的就是老师和班级的例子 一个老师可以教多个班级,一个班级也可以有多个老师 add 添加关系 teachers=models.Teacher.obj ...
- 【消息队列面试】15-17:高性能和高吞吐、pull和push、各种MQ的区别
十五.kafka高性能.高吞吐的原因 1.应用 日志收集(高频率.数据量大) 2.如何保证 (1)磁盘的顺序读写-pagecache关联 rabbitmq基于内存读写,而kafka基于磁盘读写,但却拥 ...
- K8S 核心组件 kubelet 与 kube-proxy 分析
kubelet kubelet 进程用于处理master 下发的任务, 管理pod 中的容器, 注册 自身所在的节点. 节点管理 启动参数说明 --register-node #如果设置为true 则 ...
- K8s 超详细总结
一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...
- Py2neo:一种快速导入百万数据到Neo4j的方式
Py2neo:一种快速导入百万数据到Neo4j的方式 Py2neo是一个可以和Neo4j图数据库进行交互的python包.虽然py2neo操作简单方便,但是当节点和关系达几十上百万时,直接创建和导入节 ...
- 如何使用Abstract类?抽象类的威力
简介: 今天我想谈谈如何使用抽象类,以及抽象类真正的威力.本文将结合具体业务来说明如何使用抽象类. 业务简述: 本人目前只接触过PMS(物业管理系统),公司主要业务的是美国的租房业务.由于美国租房和中 ...
- 一阶段目标检测网络-RetinaNet 详解
摘要 1,引言 2,相关工作 3,网络架构 3.1,Backbone 3.2,Neck 3.3,Head 4,Focal Loss 4.1,Cross Entropy 4.2,Balanced Cro ...