STM32 - BOOTLOAD 基本配置

1 篇文章 0 订阅
1 篇文章 0 订阅

STM32 - BOOTLOAD 基本配置

这里简单介绍一下stm32 bootload的配置:

代码是通过stm32CubeMX生成,是最新的库,最主要的不一样的地方就是应用的跳转地址方式有所不同

假设单片机已经完整的获取到需要升级的 xxx.bin文件了,并写到带代码区了:

1、bootload代码部分

1.1、bootload代码部分
在这里插入图片描述

1.2、
跳转到应用程序 最好放在外设(带有中断的外设)前跳转,(有网络的,放在网络初始化之前跳转)否则可能会调整不成功. 所以通常我在收到文件后先存在一个特定的空间,然后重启单片机,将文件写入到内部flash ,然后跳转

 /**
  * @brief	跳转到应用程序段.
  * @retval AppxAddr 跳转地址
  */
void IAP_Jump_APP( uint32_t AppxAddress )
{
	typedef void (*pFunction)(void);
	pFunction Jump_To_Application;

	uint32_t 	JumpAddress;

	/* Check if valid stack address (RAM address) then jump to user application */
	if(( (*(__IO uint32_t*)AppxAddress) & 0x2FFE0000 ) == 0x20000000 )
	{
		printf("\r\n Stack Address Valid. jump 0x%08X \r\n\r\n",(*(__IO uint32_t*)AppxAddress));

		// 关闭所有中断
		__set_PRIMASK(1);
		HAL_SuspendTick();					
		
		/* Jump to user application */
		JumpAddress = *(__IO uint32_t*) (AppxAddress + 4);
		Jump_To_Application =   (pFunction)JumpAddress;
		/* Initialize user application's Stack Pointer */
		__set_MSP(*(__IO uint32_t*) AppxAddress);
		Jump_To_Application();
		/* do nothing */
		while(1){};		
	}
	else{
		printf("\r\n Stack Address Error Data = 0x%08X",(*(__IO uint32_t*)AppxAddress));
	}
}

2.用户应用文件:

2.1、

int main(void)
{
  /* USER CODE BEGIN 1 */
	/* system.stm32f1xx.c 设置跳转 #define VECT_TAB_OFFSET  0x00010000U */
	__set_PRIMASK(0);
  /* USER CODE END 1 */


/* 省略 */
}

2.2、
system.stm32f1xx.c 设置跳转 #define VECT_TAB_OFFSET  0x00010000U

2.3
system.stm32f1xx.c 设置跳转 #define VECT_TAB_OFFSET 0x00010000U

这个值需要更具2.2的跳转地址来设置
2.4、
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值