4836|16

51

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于STM32IAP问题!!!!! [复制链接]

我是按照的官方的AN2557 例子改写的程序

我希望在程序下载完成后能直接运行 我的新程序,就是直接跳到0X8002000处运行,我直接将他的 JUMP APP 的代码考过去,为什么程序跳不过去?

除非我复位下才能正确运行(也就是从程序开始就执行了JUMP APP部分的代码)。

还有个问题就是 在STM32中如何 实现 软件复位?能否提供相应代码,是不是
类似JUMP APP 代码将地址改成 0x8000000?有没有其他方法?

此帖出自stm32/stm8论坛

最新回复

                                 谢谢大家1)看来直接从应用运行IAP程序不是个好办法,采用复位后直接进入会好一些。2)关于系统复位我查了好半天才写了这么一段汇编代码嵌到了我的C程序里。刚刚看到 McuIsp 及 McuPlayer 我才知道 原来有写好的函数给调用,呵呵白忙活了,我细看库函数是一回事,他是调用的cortexm3_macro.s里的汇编。同事感谢 pheavecn 我的跳转是参考的官方的那段C的代码呵呵。3)ST_ARM 我有时间看看你的IAP实现方法,参考下。再次谢谢大家!!!!   详情 回复 发表于 2009-2-13 10:52
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

看看生成的代码是否正确

                                  
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

你在哪个个板子上应用的?

                                  
此帖出自stm32/stm8论坛
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 

我在EK-STM32F 的开发板上用的

我在EK-STM32F 的开发板上用的

就改了按键,其他没变!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 

香版主,帮帮忙啊!

香版主,帮帮忙啊!
为什么我的跳转不好用?
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 

继续提问!

我理解的IAP 有两种办法

1)在应用程序里置标志(存在IAP代码控制固定FLASH地址)然后复位,程序开始就判断这个标志 来确定要不要IAP更新
2)在 我的 应用程序里直接跳到 IAP 代码部分 来执行IAP 。
你看这两种办法那个可行?

不知道那种办法可行,那种不可行为什么?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

怎么进IAP,要根据应用的实际情况来定。

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 

谁能具体说说我的办法是否可行

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

9
 

是通过串口IAP还是?

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 

是通过串口的

                                 我的应用其实很简单,就是通过串口下载程序然后自动运行!
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

11
 

参考附件

这是我移植到EK-STM32F 的开发板的例程。你对比一下。
相关链接:https://bbs.eeworld.com.cn/upfiles/img/20092/2009212163614476.zip
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

12
 

应该是跟某些寄存器没有复位到初始值有关。

最好是让系统复位,然后在对相关外设初始化之前判断复位源,再运行应用程序。
直接从IAP程序中跳转到应用程序,往往会导致某些意想不到的错误,主要是漏掉了某些寄存器没有复位。

现在的处理器通常都有软件复位的寄存器,写一下就行了。没有的话,可以考虑让狗动作。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 

要侃侃

要侃侃
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

14
 

可以参考我的IAP做法,用特殊的串口序列进入IAP.

应用程序检测到这个序列,复位.
而我的IAP Boot程序复位会检测这个序列,判断是否开始IAP,还是进入应用程序.

Jump App的代码,我用的嵌入汇编,共享出来: 
  asm("MOVW R1,#0x2000");//根据vector_table不同,需修改此处地址
  asm("MOVT R1,#0x0800");
  asm("LDR R0,[R1,#0]");
  asm("MSR MSP,R0");
  asm("MSR PSP,R0");
  asm("MOVW R1,#0x2004");//根据vector_table不同,需修改此处地址
  asm("MOVT R1,#0x0800");
  asm("LDR R0,[R1,#0]");
  asm("BX R0");

楼主可先试用一下我的Free STM32 IAP看看.

__McuIsp
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

15
 

软件复位用固件库的NVIC_GenerateSystemReset()

或者
(*((vu32*)0xe000ed0c)) = ((u32)0x05FA0000) | (u32)0x04;
这两个是同一个道理.
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

16
 

我的IAP用的是“NVIC_GenerateSystemReset”

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

102

帖子

0

TA的资源

一粒金砂(初级)

17
 

谢谢大家!!!

谢谢大家

1)看来直接从应用运行IAP程序不是个好办法,采用复位后直接进入会好一些。
2)关于系统复位我查了好半天才写了这么一段汇编代码嵌到了我的C程序里。
刚刚看到 McuIsp 及 McuPlayer 我才知道 原来有写好的函数给调用,呵呵
白忙活了,我细看库函数是一回事,他是调用的cortexm3_macro.s里的汇编。
同事感谢 pheavecn 我的跳转是参考的官方的那段C的代码呵呵。
3)ST_ARM 我有时间看看你的IAP实现方法,参考下。

再次谢谢大家!!!!
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表