stm32h743iit6 iap升级固件

2024-08-23 12:44

本文主要是介绍stm32h743iit6 iap升级固件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

设置

boot运行在第一个扇区
app在第二个扇区
在这里插入图片描述

boot

关键代码

iap.c

#include "sys.h"
// #include "delay.h"
#include "usart.h"
#include "stmflash.h"
#include "iap.h"iapfun jump2app;
u32 iapbuf[512]; // 2K字节缓存
// appxaddr:应用程序的起始地址
// appbuf:应用程序CODE.
// appsize:应用程序大小(字节).
void iap_write_appbin(u32 appxaddr, u8 *appbuf, u32 appsize)
{u32 t;u16 i = 0;u32 temp;u32 fwaddr = appxaddr; // 当前写入的地址u8 *dfu = appbuf;for (t = 0; t < appsize; t += 4){temp = (u32)dfu[3] << 24;temp |= (u32)dfu[2] << 16;temp |= (u32)dfu[1] << 8;temp |= (u32)dfu[0];dfu += 4; // 偏移4个字节iapbuf[i++] = temp;if (i == 512){i = 0;STMFLASH_Write(fwaddr, iapbuf, 512);fwaddr += 2048; // 偏移2048  512*4=2048}}if (i)STMFLASH_Write(fwaddr, iapbuf, i); // 将最后的一些内容字节写进去.
}/* 开关全局中断的宏 */
#define ENABLE_INT()    __set_PRIMASK(0)    /* 使能全局中断 */
#define DISABLE_INT()    __set_PRIMASK(1)    /* 禁止全局中断 */
/*
******************************************************************************************************
*    函 数 名: JumpToBootloader
*    功能说明: 跳转到系统BootLoader
*    形    参: 无
*    返 回 值: 无    ******************************************************************************************************
*/void iap_load_app(u32 appxaddr)
{uint32_t i=0;void (*SysMemBootJump)(void);        /* 声明一个函数指针 */__IO uint32_t BootAddr = appxaddr; /* STM32H7的系统BootLoader地址 *//* 关闭全局中断 */DISABLE_INT();/* 关闭滴答定时器,复位到默认值 */SysTick->CTRL = 0;SysTick->LOAD = 0;SysTick->VAL = 0;HAL_RCC_DeInit();    //对RCC进行DeInit操作,防止APP卡死/* 设置所有时钟到默认状态,使用HSI时钟 */HAL_RCC_DeInit();/* 关闭所有中断,清除所有中断挂起标志 */for (i = 0; i < 8; i++){NVIC->ICER[i]=0xFFFFFFFF;NVIC->ICPR[i]=0xFFFFFFFF;}/* 使能全局中断 */ENABLE_INT();/* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));/* 设置主堆栈指针 */__set_MSP(*(uint32_t *)BootAddr);/* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */__set_CONTROL(0);/* 跳转到系统BootLoader */SysMemBootJump();/* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */while (1){}
}

iap.h

#ifndef __IAP_H__
#define __IAP_H__
#include "sys.h"  typedef  void (*iapfun)(void);				//定义一个函数类型的参数.   
#define FLASH_APP1_ADDR		0x08020000  	//第一个应用程序起始地址(存放在FLASH)//保留0X08000000~0X0801FFFF的空间为Bootloader使用(共128KB)	   
void iap_load_app(u32 appxaddr);			//跳转到APP程序执行
void iap_write_appbin(u32 appxaddr,u8 *appbuf,u32 applen);	//在指定地址开始,写入bin
#endif

使用
iap_load_app(FLASH_APP1_ADDR); // 执行FLASH APP代码

app

main.c

int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MPU Configuration--------------------------------------------------------*/MPU_Config();/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM4_Init();MX_UART4_Init();MX_UART5_Init();MX_UART7_Init();MX_UART8_Init();MX_USART1_UART_Init();MX_USART2_UART_Init();MX_USART3_UART_Init();MX_USART6_UART_Init();MX_ADC1_Init();MX_DAC1_Init();MX_FDCAN1_Init();MX_FDCAN2_Init();MX_I2C2_Init();MX_SPI1_Init();MX_SPI2_Init();MX_TIM1_Init();MX_TIM2_Init();MX_TIM3_Init();MX_TIM5_Init();MX_TIM8_Init();MX_TIM12_Init();MX_TIM13_Init();MX_TIM14_Init();MX_TIM15_Init();MX_TIM16_Init();MX_TIM17_Init();/* USER CODE BEGIN 2 */printf("app\r\n");//__disable_irq(); //关闭中断SCB->VTOR = FLASH_BANK1_BASE |  0x00020000UL;printf("app 0x%07X\r\n",FLASH_BANK1_BASE |  0x00020000UL);__enable_irq();//启用中断//0x8020000//VECT_TAB_OFFSET/* USER CODE END 2 *//* Init scheduler */osKernelInitialize();/* Call init function for freertos objects (in cmsis_os2.c) */MX_FREERTOS_Init();/* Start scheduler */osKernelStart();/* We should never get here as control is now taken by the scheduler *//* Infinite loop *//* USER CODE BEGIN WHILE *///SCB->VTOR = 0x08020000;;//while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

主要是这2行

	//设置中断向量表SCB->VTOR = FLASH_BANK1_BASE |  0x00020000UL;printf("app 0x%07X\r\n",FLASH_BANK1_BASE |  0x00020000UL);__enable_irq();//启用中断

其他

输出 bin 固件
在这里插入图片描述

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=@L.bin !L

这篇关于stm32h743iit6 iap升级固件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099421

相关文章

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

MySQL 升级到8.4版本的完整流程及操作方法

《MySQL升级到8.4版本的完整流程及操作方法》本文详细说明了MySQL升级至8.4的完整流程,涵盖升级前准备(备份、兼容性检查)、支持路径(原地、逻辑导出、复制)、关键变更(空间索引、保留关键字... 目录一、升级前准备 (3.1 Before You Begin)二、升级路径 (3.2 Upgrade

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中