H743 Bootloader执行HAL_Deinit卡住

发布于 2021-05-04 09:40:24

H743 bootloader 跳转到APP时执行HAL_Deinit后程序卡住。单步进去发现执行了__HAL_RCC_AHB3_FORCE_RESET();后就跳转到 BLX = R0中。` typedef void (*fun)(void);

fun app_start;

/*检查应用程序是否合法*/
if ((((*(__IO uint32_t *)(addr + 4)) & 0xff000000) != 0x08000000) ) {
    LOG_E("application code check err.\nfactory firmware will be loaded.");
    return boot_update_firmware(FACTORY_FIRMWARE_NAME);
}

dfs_unmount("/");
HAL_SD_DeInit(&sdio_rst.hsd); //复位SDIO

/*关中断并逐个清除中断,否则会跳转失败!*/
__disable_irq();
HAL_DeInit();

for (IRQn_Type irq = WWDG_IRQn; irq <=  WAKEUP_PIN_IRQn; irq++) {
    HAL_NVIC_DisableIRQ(irq);
    HAL_NVIC_ClearPendingIRQ(irq);
}


SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL  = 0;

HAL_RCC_DeInit();

__set_MSP(*(__IO uint32_t*) addr);

app_start = (fun)(*(volatile unsigned int*)(addr + 4));
app_start();
return 1;`

查看更多

关注者
0
被浏览
77
4 个回答
益达_fighting
益达_fighting 2021-05-04

说明:Boot中挂载了SD文件系统,注释HAL_Deinit之后能正常跳转到APP,但APP探测不到SD卡,文件系统会挂载不上,所以用HAL——Deint来复位一便

flashman2002
flashman2002 2021-05-04

你要查找为何APP探测不到SD卡,而不是使用复位的方式来处理。

whj467467222
whj467467222 认证专家 2021-05-06

在使用 boot 跳转之前都是要把 boot 中初始化的外设全部 deinit 的,参考这个帖子 https://club.rt-thread.org/ask/question/428671.html

在 boot 中把 SD 卡要文件系统卸载,SD 卡 deinit 了 再试试

mii
mii 2021-05-06

软件包里有一个QBOOT的实现,你可以参考一下

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览