硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6310|回复: 11
收起左侧

[有问必答] BOOTLOADER跳转app出现问题

[复制链接]

22

主题

22

回帖

88

积分

初级会员

积分
88
发表于 2021-3-6 11:42:05 | 显示全部楼层 |阅读模式
使用的stm32cubemx生成了bootloader程序 配置了串口一和串口二,串口二是蓝牙,然后跳转app程序 发现app程序不能正常运行,但是我把bootloader程序里面的串口二初始化注释掉,在跳转我的app程序,app程序就能够正常运行,请问有没有大佬知道这是为啥

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-3-6 15:49:09 | 显示全部楼层
跳转前给APP创建一个干净的环境,就跟上电前一样干净。

串口1,2单独关闭中断,关闭全局中断,并且调用DeInit复位串口1和串口2
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-3-6 16:04:58 | 显示全部楼层
eric2013 发表于 2021-3-6 15:49
跳转前给APP创建一个干净的环境,就跟上电前一样干净。

串口1,2单独关闭中断,关闭全局中断,并且调用De ...

void JumpToApp(void)
{
        uint32_t i=0;

    HAL_UART_DeInit(&huart1);
    HAL_UART_DeInit(&huart2);
        __set_PRIMASK(1);        /* 禁止全局中断 */

        /* 关闭滴答定时器,复位到默认值 */
        SysTick->CTRL = 0;
    SysTick->LOAD = 0;
    SysTick->VAL = 0;

        /* 设置所有时钟到默认状态,使用HSI时钟 */
        HAL_RCC_DeInit();

        /* 关闭所有中断,清除所有中断挂起标志 */
        for (i = 0; i < 8; i++)
        {
                NVIC->ICER=0xFFFFFFFF;
                NVIC->ICPR=0xFFFFFFFF;
        }       

        __set_PRIMASK(0);        /* 使能全局中断 */

        /* 跳转到APP程序,首地址是MSP,地址+4是复位中断服务程序地址 */
        JumpToApplication = (void (*)(void)) (*((uint32_t *) (APPLICATION_ADDRESS + 4)));

        /* 设置主堆栈指针 */
        __set_MSP(*(uint32_t *)APPLICATION_ADDRESS);

        /* 跳转到系统BootLoader */
        JumpToApplication();

        /* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
        while (1)
        {

        }
}
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-3-6 16:48:10 | 显示全部楼层
这么跳转过去 就有问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-3-7 07:36:24 | 显示全部楼层
lijiukun 发表于 2021-3-6 16:48
这么跳转过去 就有问题

那问题不大了,下一步直接调试状态进入APP看看能锁定死机位置不
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-2-15 15:18:23 | 显示全部楼层
楼主,最后是什么问题呢?我也遇到同样的问题
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2022-2-15 15:18:57 | 显示全部楼层
楼主,最后是如何解决的?我也遇到同样的问题
回复

使用道具 举报

4

主题

160

回帖

172

积分

初级会员

积分
172
发表于 2022-2-15 16:11:12 | 显示全部楼层
我的H7也是这问题,两个串口就出问题。 boot进APP之后,hal_delay都会卡死
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-2-28 16:57:32 | 显示全部楼层
        #if USE_DEBUG==1
                curCursor.x = LCD_FACTMARGIN;
                curCursor.y = DISPLAY_LOWPOWER_VALUE_Y;
                Clear_Line(DisplayFont.font,BACKCOLOR);
                Disp_Hanzi_Line("运行APP",&DisplayFont);
        #else
                uint16_t i=0;
                /* 跳转之前关闭相应的中断 */
                usart_interrupt_disable(UART,USART_INT_RBNE);
                timer_interrupt_disable(TIMER5,TIMER_INT_UP);
                usart_deinit(UART);
                timer_deinit(TIMER5);
               
                for(i = 0; i < 8; i++)
                {
                        NVIC->ICER[i] = 0xFFFFFFFF;        /* 关闭中断*/
                        NVIC->ICPR[i] = 0xFFFFFFFF;        /* 清除中断标志位 */
                }
               
                uint32_t app=APP_ADDRESS;
                uint32_t firm=FIRMWARE_ADDRESS;
               
               
               
                jump2app=(void(*)())*(__IO uint32_t*)(app);                //用户代码区第二个字为程序开始地址(复位地址)               
                MSR_MSP(*(uint32_t*)firm);                                        //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
                jump2app();




这是我在STM32F103上使用的方法。楼主不妨试试。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-2-28 16:57:51 | 显示全部楼层
void (*jump2app)();

__asm void MSR_MSP(uint32_t addr)
{
    MSR MSP, r0
    BX r14;
}


还有这些内容
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2022-2-28 17:42:02 | 显示全部楼层
nahaotian 发表于 2022-2-28 16:57
void (*jump2app)();

__asm void MSR_MSP(uint32_t addr)

这个MSR_MSP可以考虑采用CMSIS软件包里面的内核头文件自带的__set_MSP,增加可以移植性和各种IDE平台通用性。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2022-2-28 18:50:48 | 显示全部楼层
eric2013 发表于 2022-2-28 17:42
这个MSR_MSP可以考虑采用CMSIS软件包里面的内核头文件自带的__set_MSP,增加可以移植性和各种IDE平台通用 ...

收到,谢谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 19:20 , Processed in 0.188901 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表