STM32L476芯片在KEIL环境下BOOT跳转APP注意事项

BOOT工程

分配BOOT程序地址、设置参数地址、APP程序地址、下载缓冲区地址

#define BOOT_SECTOR_ADDR        0x08000000
#define BOOT_SECTOR_SIZE        0x0000A000
#define SETTING_SECTOR_ADDR     0x0800A000
#define SETTING_SECTOR_SIZE     0x00002000
#define APP_SECTOR_ADDR         0x0800E000
#define APP_SECTOR_SIZE         0x00019000  
#define DOWNLOAD_SECTOR_ADDR    0x08027000 
#define DOWNLOAD_SECTOR_SIZE    0x00019000

程序跳转函数

uint16_t JumpToApp(void)
{
    void (*SysJumpToApp)(void);        /* 声明一个函数指针 */
    __IO uint32_t AppAddr = APP_SECTOR_ADDR; /* STM32的系统BootLoader地址 */

    if (((*(__IO uint32_t * )AppAddr) & MSP_MASK ) == 0x20000000) /*检测MSP是否在内存地址内 */
    {
        /* 跳转到系统App,首地址是MSP,地址+4是复位中断服务程序地址 */
        SysJumpToApp = (void (*)(void)) (*((uint32_t *) (AppAddr + 4)));
        /* 设置主堆栈指针 */
        __set_MSP(*(__IO uint32_t *)AppAddr);
        /* 跳转到系统App */
        SysJumpToApp();
    }
    
    /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
    while (1)
    {
    }
}

ROM地址及大小设置

在这里插入图片描述

代码优化等级设置

在这里插入图片描述

JLINK设置内FLASH下载地址设置

在这里插入图片描述

APP工程

中断向量表偏移地址修改

#define USER_VECT_TAB_ADDRESS 
#if defined(USER_VECT_TAB_ADDRESS)
/*!< Uncomment the following line if you need to relocate your vector Table
     in Sram else user remap will be done in Flash. */
/* #define VECT_TAB_SRAM */

#if defined(VECT_TAB_SRAM)
#define VECT_TAB_BASE_ADDRESS   SRAM1_BASE      /*!< Vector Table base address field.
                                                     This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x0000E000U     /*!< Vector Table base offset field.
                                                     This value must be a multiple of 0x200. */
#else
#define VECT_TAB_BASE_ADDRESS   FLASH_BASE      /*!< Vector Table base address field.
                                                     This value must be a multiple of 0x200. */
#define VECT_TAB_OFFSET         0x0000E000U     /*!< Vector Table base offset field.
                                                     This value must be a multiple of 0x200. */
#endif /* VECT_TAB_SRAM */
#endif /* USER_VECT_TAB_ADDRESS */

ROM地址及大小设置

在这里插入图片描述

JLINK设置内FLASH下载地址设置

在这里插入图片描述

BIN文件生成设置

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值