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的 成功过的 帮忙看看,谢谢
|