请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L431RCT6 从用户代码区跳转使用内置system memory bootloader 无效。

[复制链接]
zhengwen 提问时间:2022-8-11 16:41 / 未解决
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[i]=0xFFFFFFFF;
          NVIC->ICPR[i]=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的 成功过的 帮忙看看,谢谢




收藏 评论0 发布时间:2022-8-11 16:41

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版