你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32单片机远程升级

[复制链接]
STMCU小助手 发布时间:2022-11-25 14:06
1、需要两份程序
* k) e) |" K" ~3 e. C        BootLoader和App程序,两份程序均可以通过jlink下载,只需要将下载地址修改一下即可:" Y1 t+ ^3 Q3 x0 z
1 j+ N: O; ~. B# E
8e956931c5ee466884d065af87491131.png
8 z. C& g( o& D* {- z 82f0f86db97b41408c8db23fe2b89f8e.png ) C' [3 T0 Z4 p+ F) U' g0 z

$ F: a: O6 m( ^9 k  R# {- g' I! h
. E) \6 K6 j& m$ I2、在BootLoader中的跳转函数! S3 M9 f& Z" i4 \  s0 r9 p$ {# h+ |
  1. #define        APP_FLASH_ADDR 0x8008000
    4 H4 H5 t* v8 j: U
  2. 8 \8 e. {3 U7 ]* C: v8 A1 {& c
  3. iap_load_app(APP_FLASH_ADDR);
复制代码
  1. //#include "include.h"2 [1 s5 e1 y! v% T& ~2 f- `
  2. #include "iap.h"# D$ L; A, H3 B- C6 |( Q$ j" J
  3. #include "main.h"
    - T4 s, H1 q8 @% \
  4. 1 U+ _. I6 \) \& L. w& @! t5 g
  5. //Ìø×ªµ½Ó¦ÓóÌÐò¶Î
    " g3 q5 o- q' D7 o: s
  6. //appxaddr:Óû§´úÂëÆðʼµØÖ·.) z5 r& |# Q  k
  7. typedef  void (*iapfun)(void);//¶¨ÒåÒ»¸öº¯ÊýÀàÐ͵IJÎÊý.# \1 ~8 Y  C; E0 M* {7 u
  8. iapfun jump2app;
    3 W6 p  e# ~+ |. V# P
  9. //ÉèÖÃÕ»¶¥µØÖ·0 ]6 I( b7 E& ~' d  V5 b2 O
  10. //addr:Õ»¶¥µØÖ·
    ! z- o4 c) Y' Z
  11. __asm void MSR_MSP(u32 addr) 0 @6 j6 K' D1 u. R3 U2 K
  12. {: ^- ^3 A6 ^, g& Z) ?8 X
  13.     MSR MSP, r0                         //set Main Stack value; c- b2 K( X5 O
  14.     BX r14
    & f- g8 c# h4 O* P9 u% m+ ^$ f1 j# Y
  15. }
    & X3 Y( F' T/ E- P, p; Y
  16. /******************************************************************************: w, _& A# A; U/ H# z: c0 f
  17. *                 Function name                £º iap_load_app: T. J& t. h- g
  18. *    Function describe     £º Ìø×ªµ½app³ÌÐò¡£
    " O. g) m8 n* m, M' m
  19. *                         Input                    £º appxaddr£ºapp³ÌÐòµÄµØÖ·¡£                                          7 N% ~3 [5 r; A5 K) U
  20. *                         Output                    £º No
    $ t' M+ M% k: k# D- x( S. c
  21. *                  Illustration            £º  
    / E; p* T5 D, R
  22. *                        Revise                        £º2 L: _- ?0 D5 q; ]
  23. *                 Existing problems         :  No
    % p- _5 k, W/ X8 F- [! c3 G, f
  24. *****************************************************************************/
    ( o- k" b; o1 P
  25. void iap_load_app(u32 appxaddr)+ E4 N" \, L% K. ~5 x: r, {( o
  26. {' Z9 l% r4 Y8 X& \
  27.         if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //¼ì²éÕ»¶¥µØÖ·ÊÇ·ñºÏ·¨.
    1 F. z8 k$ ~0 c& U9 q
  28.         { ( J% b; b  t3 v! ]" o4 w1 x3 D
  29.                 jump2app=(iapfun)*(vu32*)(appxaddr+4);//Óû§´úÂëÇøµÚ¶þ¸ö×ÖΪ³ÌÐò¿ªÊ¼µØÖ·(¸´Î»µØÖ·)                5 H  c. q1 u0 @, r% k5 [+ ]
  30.                 MSR_MSP(*(vu32*)appxaddr);//³õʼ»¯APP¶ÑÕ»Ö¸Õë(Óû§´úÂëÇøµÄµÚÒ»¸ö×ÖÓÃÓÚ´æ·ÅÕ»¶¥µØÖ·)
    $ q- s& v2 g, C; S
  31.                 jump2app();        //Ìø×ªµ½APP.- [! g; O0 w3 d  l7 i( }
  32.         }: x  c+ a! X. U. S8 ^4 G! E+ f1 l9 J$ {, _
  33. }
复制代码

' P/ C7 J7 d4 S; |6 R( z3、在app中修改中断向量表的偏移地址, f$ y1 G1 `7 d% ^6 ?3 T

5 \0 s: r4 M/ Y; l; c b609ad1e02914654a6308be3752384d1.png
( g9 P3 g0 t3 u) C  F# T  [8 a/ w2 n8 P
bf99979237a54337a59f7cafb18b414b.png
/ y( A1 b6 i4 W. s( n' c( _# u3 C' h: ~! W# q) X
fcbdc68bcb9746f9b82c5cc417599883.png ; j2 _- p- b% E8 |

4 s' N# G! C! _) W4、程序自动选择向量表的偏移地址
$ o2 w) R: J( [1 ^, a* }+ c' w- f适用场景,一颗芯片里面有3个程序:
# Q) Z2 P/ w: e( o1.BootLoader程序,起始地址:0x08000000/ D! Y" E+ A3 e/ v2 v0 S
2.APP1程序,起始地址:0x08008000, V- W& I' c- E1 `  o% ~6 D7 m% ~
3.APP2程序,起始地址:0x08013000
+ J( M% W* k1 E( u" Z( Y# O 0 O# _; F8 p, \, w8 O/ U
        这种情况就需要BootLoader程序自动选择往哪个地址跳转,这个地址再升级完以后会变,比如当前的跳转地址是app1,那么升级后跳转的地址就变为app1。" P5 ]* u! x2 M7 Y0 b- x5 I5 d
4 R, d$ m5 W' Q& ?& Y
        针对这种场景,做如下修改:+ w% a2 M, I2 W5 O& O
4 B( e& B/ U1 t3 ]  F
7f1232281f35429a8b6093c4235b4729.png $ I- J6 g, H/ |

" @8 v: w  s# C5、keil编译器中设置的程序起始地址会别写进bin文件" |- f: |0 U# R  I1 L: H" c
$ h. w( \! R& Y
76b1f12505624ee7818a2d4562097b83.png 9 g; Y' w' L6 K" d8 S8 j
/ |& N2 z$ M/ O) s! Q
         上图中的地址会被写入到bin文件中,所有在编译APP1程序和APP2程序的时候,要记着修改这里的起始地址。
- @9 F9 c! W" P. G& @/ a————————————————
0 d  q" b; Y9 d8 T- H5 X版权声明:放羊娃
9 u, {, J* p$ x( s' y; v! A8 o0 s7 m. D% U" v" i4 u' f2 g. _
. M3 ~$ |2 s8 i7 I$ x7 p! g; }
赞 收藏 评论0 发布时间:2022-11-25 14:06

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版