stm32 bootloader写法

news2024/10/18 8:47:08
  1. bootloader写法:
    1. 假设app的起始地址:0x08020000,则bootloader的范围是0x0800,0000~0x0801,FFFF。
    2. #define APP_ADDR 0x08020000 // 应用程序首地址定义
      typedef void (*APP_FUNC)(void); // 函数指针类型定义
      /*main函数中调用rum_app,进入app程序,其中app_addr是app程序的flash首地址,也就是0x08020000*/
      void run_app(uint32_t app_addr)
      {
          uint32_t reset_addr = 0;
          APP_FUNC jump2app;
      
          /* 下面的判断语句是说app程序的烧写首地址存放的是SRAM中的栈地址,
      需要判断一下这个站地址是不是在以0x2000,0000为开始地址的SRAM,
      这个地址是stm32的内部RAM首地址。这里意义不大,因为首地址中存放的栈地址,
      是在启动文件中定义,由汇编编译器和链接器生成的不会有错 */
          if (((*(uint32_t *)app_addr) & 0x2FFE0000) == 0x20000000) // 判断是否是在128k的SRAM里面。
          {
              /* 设置栈指针,这是一个内联函数,定义在cmsis_armcc.h中 */          
      	    __set_MSP(*(volatile uint32_t *)app_addr); //把app_addr地址中的内容放到站寄存器中
              /* 获取复位地址 */
              reset_addr = *(uint32_t *)(app_addr + 4); //app程序入口地址是在0x08020004上
              jump2app   = (APP_FUNC)reset_addr;
             __disable_irq();; //hal库中的关所有中断函数
              jump2app();
          }
      }
      
      

    3.  /* Initialize all configured peripherals */
          MX_GPIO_Init();
          MX_USART1_UART_Init();
          /* USER CODE BEGIN 2 */   
          run_app(APP_ADDR);
          /* USER CODE END 2 */
      
          /* Infinite loop */
      
      在main中插入上面的代码run_app(APP_ADDR);就行

  2. app写法:
    1.  /* Configure the system clock */
          SystemClock_Config();
      
          /* USER CODE BEGIN SysInit */
          /*因为在项目启动文件(startup_stm32f401xc.s)中,会先于用户main函数之前,调用中断初始化函数SystemInit(system_stm32f4xx.c文件中),这个函数中有条语句:
      
        /* Configure the Vector Table location -------------------------------------*/
      #if defined(USER_VECT_TAB_ADDRESS)
        SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
      #endif /* USER_VECT_TAB_ADDRESS */
      
      其中:VECT_TAB_BASE_ADDRESS =FLASH_BASE=0x0800,0000
           VECT_TAB_OFFSET = 0
      
      这个中断向量表地址是没有跳转的中断向量表地址,所以需要用到下面的语句更换一下。
      
      */
          SCB ->VTOR = FLASH_BASE | 0x20000;//这里就是app程序的起始地址
      	__enable_irq();  //hal库开所有中断
          /* USER CODE END SysInit */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2217654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】Unity Shader学习笔记(八)基础纹理2:高度纹理、法线纹理、模型空间下的法线纹理、切线空间下的法线纹理光照计算

文章目录 凹凸映射法线纹理设置高度纹理(Height Map)法线纹理(Normal Map)模型空间的法线纹理切线空间的法线纹理优劣对比 切线空间下的法线纹理光照计算最终效果完整代码TANGENT语义内置宏 TANGENT_SPACE_ROTATIONObjSpaceLightD…

前缀和--一维和二维模板

前缀和 【模板】前缀和 描述 给定一个长度为n的数组a1,a2,…ana1,a2,…a**n. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出alal1…ara**la**l1…a**r 输入描述: 第一行包含两个整数n和q. 第二行包含n个整数, 表示a1,a2,…ana1,a2,…a**n.…

JavaWeb——Maven(4/8):Maven坐标,idea集成-导入maven项目(两种方式)

目录 Maven坐标 导入Maven项目 第一种方式 第二种方式 Maven坐标 Maven 坐标 是 Maven 当中资源的唯一标识。通过这个坐标,我们就能够唯一定位资源的位置。 Maven 坐标主要用在两个地方。第一个地方:我们可以使用坐标来定义项目。第二个地方&#…

CLANet:基于明场图像的跨批次细胞系识别综合框架|文献速递-基于深度学习的医学影像分类,分割与多模态应用

Title 题目 CLANet: A comprehensive framework for cross-batch cell line identificationusing brightfield images CLANet:基于明场图像的跨批次细胞系识别综合框架 01 文献速递介绍 细胞系鉴定(Cell Line Authentication,CLA&#x…

英飞达医学影像存档与通信系统 WebUserLogin.asmx 信息泄露漏洞复现

0x01 产品简介 英飞达医学影像存档与通信系统 Picture Archiving and Communication System,它是应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声,各种X光机,各种红外仪、显微仪等设备产生的图像)通过各种接口(模拟,DICOM,网络…

二叉树与堆讲解

目录 1.树的概念及结构 1.树的概念 2.树的相关概念 3.树的表示 2.二叉树 1.概念 2.特殊的二叉树 1.满二叉树 2.完全二叉树 3.二叉树的性质 4.二叉树的存储结构 1.顺序结构 2.链式存储 3.堆 1.堆的概念及结构 2.堆的实现 1.堆的创建 2.堆的初始化(H…

力扣力扣力:206. 反转链表

leetcode链接:206. 反转链表 题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5]输出:[5,4,3,2,1] 示例 2: 输入&#xff1…

手写Spring IOC-简易版

目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…

面试八股(自用)

什么是java序列化,什么时候需要序列化? 序列化是指将java对象转化成字节流的过程,反序列化是指将字节流转化成java对象的过程。 当java对象需要在网络上传输 或者 持久化到存储文件中,就需要对java对象进行序列化处理。 JVM的主要组成部分…

Leetcode—1242. 多线程网页爬虫【中等】Plus(多线程)

2024每日刷题&#xff08;187&#xff09; Leetcode—1242. 多线程网页爬虫 实现代码 /*** // This is the HtmlParsers API interface.* // You should not implement it, or speculate about its implementation* class HtmlParser {* public:* vector<string>…

【Java 并发编程】阻塞队列与仿真餐厅

前言 阻塞队列 (BlockingQueue) 顾名思义是一种支持阻塞操作的队列&#xff0c;因为内部机制中添加了 wait 和 notify 方法&#xff0c;所以阻塞队列具备了线程之前相互协调的功能。阻塞队列主要运用于两个场景&#xff0c;一是生产者与消费者模型&#xff0c;二是线程池。本章…

【C语言】循环嵌套:乘法表

循环嵌套&#xff0c;外层循环执行一次&#xff0c;内层循环执行i次。分别控制 在循环的过程中加一层循环。 多层循环属于循环嵌套、嵌套循环 #include <stdio.h> #include <math.h> /* 功能&#xff1a;循环嵌套 乘法表 时间&#xff1a;2024年10月 地点&#xf…

可编辑73页PPT | 企业智慧能源管控平台建设方案

荐言分享&#xff1a;随着全球能源形势的日益紧张和智能化技术的快速发展&#xff0c;企业对于能源的高效利用和精细化管理需求愈发迫切。智慧能源管控平台作为一种集成了物联网、大数据、云计算、人工智能等先进技术的综合管理系统&#xff0c;旨在帮助企业实现能源数据的实时…

【线性回归分析】:基于实验数据的模型构建与可视化

目录 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 1. 数据准备 2. 构建线性回归模型 3. 可视化 数据分析的核心 构建预测模型 应用场景 预测模型中的挑战 结论 线性回归分析&#xff1a;基于实验数据的模型构建与可视化 在数据分析领域&#xff0c;线性…

永恒之蓝漏洞

MS17-010是微软于2017年3月发布的一个安全补丁&#xff0c;旨在修复Windows操作系统中的一个严重漏洞&#xff0c;该漏洞被称为“永恒之蓝”&#xff08;EternalBlue&#xff09;。这个漏洞影响了Windows的Server Message Block&#xff08;SMB&#xff09;协议&#xff0c;允许…

JavaEE-线程安全问题

1.多线程带来的的⻛险-线程安全 1.1 观察线性不安全 // 此处定义⼀个 int 类型的变量 private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {// 对 count 变量进⾏⾃增 5w 次for (int i 0; i…

基于Java微信小程序的水果销售系统详细设计和实现(源码+lw+部署文档+讲解等)

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

Prometheus运维监控平台之监控指标注册到consul脚本开发、自定义监控项采集配置调试(三)

系列文章目录 运维监控平台搭建 运维监控平台监控标签 golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置V1版本 文章目录 系列文章目录目的一、监控指标注册到consul的golang脚本开发1、修改settings.yaml文件2、修改config/ocnsul,go文件3、修改core/consul…

视频剪辑和转换gif一体化UI页面【可以解决gif体积过大】

视频剪辑和转换gif一体化UI页面 一&#xff0c;简介 这段代码实现了一个简单的 GUI 应用程序&#xff0c;主要功能包括&#xff1a; 选择视频文件&#xff1a;用户可以通过点击“选择视频”按钮打开文件选择对话框&#xff0c;选择 MP4 格式的视频文件。 转换为 GIF&#xf…

Axure复选框全选反选取消高级交互

亲爱的小伙伴&#xff0c;在您浏览之前&#xff0c;烦请关注一下&#xff0c;在此深表感谢&#xff01; 课程主题&#xff1a;复选框全选反选取消制作 主要内容&#xff1a;点击复选框&#xff0c;实现列表数据项全选选中、反选和取消选中效果 应用场景&#xff1a;多项选定…