硬汉嵌入式论坛

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

[有问必答] stm32F103C8T6iap跳转失败

[复制链接]

22

主题

22

回帖

88

积分

初级会员

积分
88
发表于 2021-2-27 10:56:19 | 显示全部楼层 |阅读模式
/* boot程序跳转iap */
APPLICATION_ADDRESS = 0x8005000
                DISABLE_INT();    /* 关中断 */
                RCC_DeInit();     //关闭所有外设

//                __disable_irq();  //关闭所有中断
                JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
                /* 用户应用地址 */
                Jump_To_Application = (pFunction) JumpAddress;

                /* 初始化MSP */
                __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
                Jump_To_Application();
每次执行到这里 程序又执行boot程序

回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-2-27 10:58:45 | 显示全部楼层
flash里面有写入的新程序
Snipaste_2021-02-27_10-52-28.png
Snipaste_2021-02-27_10-52-20.png
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-2-27 11:01:59 | 显示全部楼层
flash里面已经有两个程序,

这里是boot程序

这里是boot程序

这里是iap程序

这里是iap程序
Snipaste_2021-02-27_10-55-23.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-2-27 11:01:59 | 显示全部楼层
boot的main函数里面什么都不做,任何中断和外设都不开,直接往APP里面跳转试试
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-2-27 11:03:48 | 显示全部楼层
    int num;
    u16 oldcount=0;                                //老的串口接收数据值
        u16 applenth=0;                                //接收到的app代码长度
        /*
                ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
        配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
        */
        bsp_Init();                /* 硬件初始化 */
       
        PrintfLogo();        /* 打印例程名称和版本等信息 */
    bsp_DelayMS(1000);
   
                    JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
                /* 用户应用地址 */
                Jump_To_Application = (pFunction) JumpAddress;
               
                /* 初始化MSP */
                __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
                Jump_To_Application();


就一直执行/* 打印例程名称和版本等信息 */
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-2-27 11:05:42 | 显示全部楼层
eric2013 发表于 2021-2-27 11:01
boot的main函数里面什么都不做,任何中断和外设都不开,直接往APP里面跳转试试

int main(void)
{       
    int num;
    u16 oldcount=0;                                //老的串口接收数据值
        u16 applenth=0;                                //接收到的app代码长度
        /*
                ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
        配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
        */
        bsp_Init();                /* 硬件初始化 */
       
        PrintfLogo();        /* 打印例程名称和版本等信息 */
    bsp_DelayMS(1000);
                        JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
                /* 用户应用地址 */
                Jump_To_Application = (pFunction) JumpAddress;

                /* 初始化MSP */
                __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
                Jump_To_Application();
Snipaste_2021-02-27_10-59-21.png
还是跳转回来了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2021-2-27 16:35:17 | 显示全部楼层
lijiukun 发表于 2021-2-27 11:05
int main(void)
{       
    int num;

bsp_Init();  之前就跳转。

然后你的APP程序里面做了个啥,没有从main函数退出这种操作吧。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2021-2-27 16:45:21 | 显示全部楼层
boot 和 app的 复位向量地址都是一样。怀疑是app工程起始地址没改
回复

使用道具 举报

22

主题

22

回帖

88

积分

初级会员

积分
88
 楼主| 发表于 2021-2-27 16:50:09 | 显示全部楼层
eric2013 发表于 2021-2-27 16:35
bsp_Init();  之前就跳转。

然后你的APP程序里面做了个啥,没有从main函数退出这种操作吧。

硬汉哥,问题 解决了 是串口app的bin文件传输的过程中发生了变化,导致跳转APP程序错误
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 00:15 , Processed in 0.176536 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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