STM32 boot启动程序跳转

这篇具有很好参考价值的文章主要介绍了STM32 boot启动程序跳转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、通过STM32实现从Bootloader跳转至主程序

1.1 简介

  1. 在程序设计之前先划分内部flash区域
  2. 本文将boot区划分地址为: 0x08000000 ~ 0x0x08006FFF(可以根据需求自行划分),共28K(0x7000)
  3. 将主程序区划分地址为:0x08007000 ~ 0x0x08012FFF 共48K
  4. 本文根据串口打印信息判断跳转是否成功
  5. 注意事项: 控制Boot区程序不能超过28K大小,否则会损坏主程序

1.2 CubeMX配置

  • bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机
    bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机
    bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机
    接下来即可生成工程

1.3 Bootloader程序

main.c

#include "stdio.h"

#define APPLICATION_ADDRESS      0x08007000 //跳转目标地址,主程序起始地址

typedef void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddresss;
/*printf 重定向*/
int fputc(int ch, FILE * f)
{
    HAL_UART_Transmit(&huart3, (uint8_t *) &ch, 1, 0xFFFF);
    return ch;
}
void jump_to_APP(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART3_UART_Init();
  /* USER CODE BEGIN 2 */
	printf("boot....\r\n");
	HAL_Delay(1000);

	jump_to_APP();
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */ 

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}
void jump_to_APP(void)
{
	if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
	{
		printf("bootloader to APP\n");
		JumpAddresss = *(__IO uint32_t*)(APPLICATION_ADDRESS+4);
		JumpToApplication = (pFunction)JumpAddresss;

		__set_MSP(*(__IO uint32_t*)APPLICATION_ADDRESS);
		JumpToApplication();
	}
	else
	{
		printf("Jump to APP failed!\r\n");
		__disable_irq();
		NVIC_SystemReset();
	}
}

bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机

1.4 主程序

  1. CubeMX配置bootloader程序配置一样
  2. main.c
#include "stdio.h"

/*printf 重定向*/
int fputc(int ch, FILE * f)
{
    HAL_UART_Transmit(&huart3, (uint8_t *) &ch, 1, 0xFFFF);
    return ch;
}


int main(void)
{
  HAL_Init();
  SystemClock_Config();
  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART3_UART_Init();
  /* USER CODE BEGIN 2 */
	printf("start....\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  		printf("111111\r\n");
		HAL_Delay(1000);
    /* USER CODE END WHILE */ 

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机
注意修改以下内容:
bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机

1.5 将主程序,boot程序都烧录进去后,运行如下:

bootloder 跳转到应用程序段,stm32,嵌入式硬件,单片机

小白一枚,有不对的地方欢迎指教文章来源地址https://www.toymoban.com/news/detail-831168.html

到了这里,关于STM32 boot启动程序跳转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决因缺少COMDLG32.OCX无法启动应用程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个comdlg32.ocx文件进行安装(前提是找到适合的版本),当我们执行

    2024年01月15日
    浏览(67)
  • STM32 BOOT 启动配置 ISP升级 介绍

    在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。 启动模式选择引脚 启动模式 说明 BOOT1 BOOT0 X 0 主闪存存储器 主闪存存储器被选为启动区域 0 1 系统存储器 系统存储器被选为启动区域 1 1 内置SRAM 内置SRAM被选为启动区域 在系统复位后, SYSCLK的第4个上升沿, BOOT引

    2024年02月11日
    浏览(37)
  • STM32-IAP基本原理及应用 | ICP、IAP程序下载流程 | 程序执行流程 | 配置IAP到STM32F4xxx

    ①在线编程(ICP,In-Circuit Programming) :通过JTAG/SWD协议或者系统加载程序(Bootloader, 串口 )下载用户应用程序到微控制器中。 ②在程序中编程(IAP,In Application Programming) :通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中( 需要在此前通过在线编

    2024年02月07日
    浏览(45)
  • STM32 IAP应用开发--bootloader升级程序

    原文链接:https://blog.csdn.net/ShenZhen_zixian/article/details/129424077 什么是IAP? IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变程序。在应用编程(IAP)是用户的应用代码对片内Flash存储器进行擦除/编程的方法。这种方式的典型应用就

    2024年01月17日
    浏览(81)
  • unity学习(32)——跳转到角色选择界面(父子类问题)

     新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单,把ResceneScript也绑到canvas上就可以了 。 此时,在账号密码正确的情况下,是可以完成场景切换。  对应的代码如下: 切换完场景其实也就完成了完整的异步操作!

    2024年02月21日
    浏览(45)
  • Xamarin.Android | 界面跳转到手机自带的自启动管理界面,引导用户将APP加入自启动

    很多 Android 应用需要在后台运行,以便提供实时通知、定时任务等服务,但是部分 Android 系统通过限制应用程序后台运行,以降低电池消耗和提高系统性能。这就可能导致应用程序运行不稳定,通知延迟,定时任务无法正常执行等问题。因此,在某些情况下,将应用程序添加

    2024年02月16日
    浏览(51)
  • Android——跳转到小程序

    1.接入第三方时,一定要先看官方文档,防止出错 微信开放文档 这个是从Android跳转到微信小程序的官方文档说明,是比较简单的 这里主要说明一下appId,这个是移动应用的appId,不是小程序的appId,文档说得很清楚 移动应用的appId,需要去微信开放平台去注册获取:  微信开放

    2024年02月15日
    浏览(44)
  • uniapp 小程序 跳转到外部链接

    场景 :点击“积分列表”中的“积分兑换”,需要跳转到三方的“积分商城”链接进行兑换,兑换完成后,跳回小程序“积分列表”。 结论 :无法离开小程序,跳转到其他地址。只能通过web-view内嵌的形式,将三方链接内嵌进小程序。 参数传递方式 :拼接到src上 ,web-vie

    2024年02月11日
    浏览(79)
  • 微信小程序如何跳转到外部小程序

    要在微信小程序中跳转到外部小程序,您可以使用微信小程序提供的 wx.navigateToMiniProgram 方法。以下是实现步骤: 在需要跳转的页面或组件中,编写触发跳转的逻辑,例如点击按钮: 替换 \\\'外部小程序的AppID\\\' 和 \\\'外部小程序的路径\\\' 为实际的外部小程序的 AppID 和路径。 如果需

    2024年02月06日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包