STM32 bootloader制作

SP指针和PC指针

SP指针:当前栈地址

PC指针:程序运行地址

FLASH存储位置

在FLASH地址的第一个地址记录着栈顶位置

第二个地址记录着Reset 函数的地址

代码

以下是使用stm32F103C8T6为例

MCU的flash起始地址为0x08000000

flash一个扇区为1KB,在实例中使用4KB,实际情况依据bootloader代码大小调整

设置bootloader程序大小为0x1000

那么app程序大小可使用空间为0x08000000-0x0800FFFF

那么app程序大小可使用空间为0x08001000-0x08010000

#define FLASH_ADRESS 0X8001000
#define FlASH_ROM 0xF000
typedef void(*PCFunction)();
	
void Jumptoapp(uint32_t adress)
{
	PCFunction PC_point=(PCFunction)(*(uint32_t*)(adress+4));
	if(((*(uint32_t*)(FLASH_ADRESS))&0x2FFE0000)==0x20000000)
		{
			 __set_MSP(*(__IO uint32_t*)adress);
		}
	PC_point();
}
void intobootload()
{
   /*刷写程序*/
}
int main(void){

	uint8_t count=0;
	while(1)
	{
 		if(/*刷写握手失败*/)
		{
			count++;
            /*可以添加delay*/
			if(/*count值大于握手限制*/)
				break;
		}
		else{
			intobootload();
		}
	}

		  Jumptoapp(FLASH_ADRESS);
		
}

Keil 设置

boot程序设置如下

 

 

app程序设置如下

 

 

 记得勾选user memory frome target dialog选项

 

如有错误感谢指正

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值