打印
[其他ST产品]

从用户代码区跳转使用内置无效

[复制链接]
405|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2022-8-17 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32L431RCT6 从用户代码区跳转使用内置system memory bootloader 无效。
1. 跳转代码如下,这个代码 可以在STM32F407VET6上正常跳转 内置的bootloader  并且STM32CubeProgrammer 连接更新程序。

static void JumpToBootloader(void)
{
    uint32_t i=0;
    void (*SysMemBootJump)(void);        /* 声明一个函数指针 */
     __IO uint32_t BootAddr = 0x1FFF0000; /* F407系统BootLoader地址 */
    /* 关闭全局中断 */
    DISABLE_INT();
    /* 关闭滴答定时器,复位到默认值 */
    SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;
    /* 设置所有时钟到默认状态,使用HSI时钟 */
    RCC_DeInit();
    /* 关闭所有中断,清除所有中断挂起标志 */
    for (i = 0; i < 8; i++)
    {
          NVIC->ICER=0xFFFFFFFF;
          NVIC->ICPR=0xFFFFFFFF;
    }      
    /* 使能全局中断 */
    ENABLE_INT();
    /* 跳转到系统BootLoader,首地址是MSP,地址+4是复位中断服务程序地址 */
    SysMemBootJump = (void (*)(void)) (*((uint32_t *) (BootAddr + 4)));
    /* 设置主堆栈指针 */
    __set_MSP(*(uint32_t *)BootAddr);
    /* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
    __set_CONTROL(0);
    /* 跳转到系统BootLoader */
    SysMemBootJump();
    /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
    while (1)
    {
    }
}

2. 1中代码 使用在STM32L431RCT6 F无效果。STM32CubeProgrammer 提示设备连接超时无响应。 我板上有BOOT 按键,使用BOOT按键  硬件方式 可以 进入 内置bootloader  并连接STM32CubeProgrammer 更新程序。
3. 已查 STM32L431RCT6 系统BootLoader地址  也是 0x1FFF0000;  也不是双BANK芯片。麻烦是否有接触过个芯片 从用户代码区直接跳转到内置BOOTLOADER的 成功过的 帮忙看看,谢谢

使用特权

评论回复
沙发
andygirl| | 2022-8-18 20:33 | 只看该作者
什么是使用内置无效

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2035

主题

7344

帖子

10

粉丝