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

【经验分享】STM32F0 IAP (使用stm32CubeMX)

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:01
BootLoader:" @5 o7 B3 e: E; U) d; O: V

8 F, m! L% e  w! smain里调用函数跳转到APP地址0x8003000
- |( p$ K4 {6 b6 Z2 @2 _- }
- I# m8 d! k7 ^" u, K' W
  1. typedef  void (*pFunction)(void);
复制代码
  1. #define ApplicationAddress    0x8003000
复制代码
  1. void UserAppStart(void)
    / X9 d# p- ~$ k' _
  2. {) Q' [' C/ l- T1 C! ?
  3.           if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    6 b" n& I9 s9 _0 d
  4.     {
    : Y! D: p5 T$ b( O2 V. a
  5.       /* Jump to user application */
    , h; a- o4 R) q
  6.       JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);) X% S2 e! q7 P& u. ]5 d3 z- _
  7.       Jump_To_Application = (pFunction) JumpAddress;
    ) P) i3 r2 R) e2 k* }6 t, A
  8.       /* Initialize user application's Stack Pointer */
    5 ?- H- E: g7 g+ {' Y
  9.       __set_MSP(*(__IO uint32_t*) ApplicationAddress);* [  d/ o* x8 a: U! g
  10.       Jump_To_Application();
    ; Z8 N' q' n0 \1 l7 M- c' K
  11.     }- [$ r( ?6 D" F4 Q, P7 w' ^
  12. }
复制代码

. x: E% X2 j2 }APP:
0 `3 R. ]& i9 f% j3 E) _. j; L+ k! Y/ G# _. X) u9 Q
main 函数添加, b) `5 S, Q; H9 u3 n

0 a: v' `' ^2 s3 k$ G; K" T3 m0 ]
  1. #define APPLICATION_ADDRESS     ((uint32_t)0x08003000)4 K7 ^7 c0 n9 ?, S& r
  2. #if   (defined ( __CC_ARM ))
    * h/ B- D& x1 s8 z3 F
  3.   __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));+ i  E) m' }/ K( Y3 _
  4. #elif (defined (__ICCARM__))6 y3 n/ m, ^, ?+ m) f$ a) z4 b
  5. #pragma location = 0x20000000( e% {7 a. U5 o1 g- f% X
  6.   __no_init __IO uint32_t VectorTable[48];, d3 \" R/ M0 F) G
  7. #elif defined   (  __GNUC__  )
    , {! I9 E# q. S' M/ E  z
  8.   __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));
    ) [1 u& f) s" m! {: y! Q2 m
  9. #elif defined ( __TASKING__ )
    * g: z+ W& Q. m9 v4 m
  10.   __IO uint32_t VectorTable[48] __at(0x20000000);. `. W- b- H2 g
  11. #endif
复制代码
  1.   /* USER CODE BEGIN 1 */
    6 i6 ?7 R6 D" e( T7 ^& ?1 \: e
  2.         uint32_t i = 0;
复制代码
  1.   /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  4 J; Y0 V1 `) M, k: A+ |+ C  T
  2.         
    6 b& y  Y' N/ B1 }3 U
  3.   /* Copy the vector table from the Flash (mapped at the base of the application
    / `2 `3 O8 R# M8 w1 P- v, j
  4.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */
    # \8 ]! K: f# O. p8 k5 L1 s

  5. # ^; K2 Y( I- O. }- B
  6.   for(i = 0; i < 48; i++)+ H' ]5 Y7 k/ v' B5 [
  7.   {) k- h: _# m' |2 W4 w, s9 j% v
  8.     VectorTable<i> = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));</i>
    " \) E2 ~4 p0 |) @9 a
  9.   }2 @' S, [, z5 {5 J) T. \+ d
  10.         // Enable the SYSCFG peripheral clock
    # I) y8 _: Y9 X5 I) J  Q* }1 f" E
  11.   __HAL_RCC_SYSCFG_CLK_ENABLE();) K* f3 N) M8 X: Q. {2 x6 Z
  12.   // Remap SRAM at 0x00000000
复制代码
  1.   __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码
; O; {' \3 s! g' x% |. `
2 `. u. P5 Q6 z
在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C0
8 O/ q! F$ U, U. ^5 f  r
# |- p7 l( G" w1 e8 nstm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址.
. B5 p3 H" l' Z; A! K
' |: v3 E2 T/ o1 P4 k
6 O9 E3 e' F& S
收藏 评论0 发布时间:2021-11-24 15:01

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版