前言:
在单片机中,将程序分为boot和app,这样可以实现一些功能:使用串口更新app等等;
需求:
编写boot和sys程序段,分别放在flash内存不同位置,先执行boot然后执行sys:boot使用串口发送“JUMP APP!!”,sys使用串口循环打印"GOOD DAY!!";
准备:
- IDE:IAR
- 硬件:stm32f103小蓝板
项目配置
一. 获得初始化代码
使用代码生成工具stm32cubeMX生成初始化代码,获得初始化项目boot:
同理获得初始化项目:
二. 配置Boot项目
boot项目不需要进行额外配置,知需要编写跳转函数就可以了,跳转地址: 0x8003000:
#define APP_FLASH_ADDRESS (0x8003000) // 根据需求设置app地址
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
uint32_t JumpAddress;
void JumpToApp(void)
{
/* Check if valid stack address (RAM address) then jump to user application */
if (((*(__IO uint32_t*)APP_FLASH_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
{
__disable_irq();
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (APP_FLASH_ADDRESS + 4);//此处保存的是中断向量表的复位中断地址
Jump_To_Application = (pFunction) JumpAddress;<