RT_thread系统升级问题

从4.0.2升级到4.1.1时遇到以下问题:
(1)usb操作U盘异常。
最终发现时新的hal库驱动文件不匹配,更换4.0.2的hal文件(包括stm32f4xx_hal_hcd.c、stm32f4xx_ll_usb.c)。
(2)bootloader异常,仿真调试发现,执行HAL_RCC_DeInit();后tick定时器被开启。将该函数的执行放在tick关之前执行就可以了。对比发现两个版本的rcc_ex的hal文件不同,可能时该文件的变动导致的。

RT_WEAK void qbt_jump_to_app(void)
{
    typedef void (*app_func_t)(void);
    u32 app_addr = QBOOT_APP_ADDR;
    u32 stk_addr = *((__IO uint32_t *)app_addr);
    app_func_t app_func = (app_func_t)(*((__IO uint32_t *)(app_addr + 4)));

    if ((((u32)app_func & 0xff000000) != 0x08000000) || ((stk_addr & 0x2ff00000) != 0x20000000))
    {
        LOG_E("No legitimate application.");
        return;
    }

    rt_kprintf("Jump to application running ... \n");
    rt_thread_mdelay(200);
    
    //__disable_irq();
    __set_PRIMASK(1);   //此处修改为关闭所有中断
    HAL_DeInit();

    for(int i=0; i<128; i++)
    {
        HAL_NVIC_DisableIRQ(i);
        HAL_NVIC_ClearPendingIRQ(i);
    }

    HAL_RCC_DeInit();

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

    __set_CONTROL(0);
    __set_MSP(stk_addr);

    app_func();//Jump to application running

    LOG_E("Qboot jump to application fail.");
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容