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

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

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:01
BootLoader:/ F# B, ^7 j0 P" q" F2 l2 k
5 J6 d" A6 G: _8 O" ^
main里调用函数跳转到APP地址0x8003000" ]" a' p; R& l& i

) Z- g* h0 h  z: Z; _& a4 I
  1. typedef  void (*pFunction)(void);
复制代码
  1. #define ApplicationAddress    0x8003000
复制代码
  1. void UserAppStart(void)6 P9 F3 t6 Z5 M. ^+ m
  2. {
    9 }. s% k! |) o. W4 L/ T4 n: h8 Z, s+ Z
  3.           if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)% |6 r) {; Y8 k( s  _' y  L
  4.     { : A7 E) l& L, T$ c2 b
  5.       /* Jump to user application */8 e; S- z' Z) I* U2 c$ o8 c
  6.       JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
    ' ?3 M1 ?! A5 z3 J% ~" j. z
  7.       Jump_To_Application = (pFunction) JumpAddress;
    ! [6 @9 J+ f2 b" j4 D
  8.       /* Initialize user application's Stack Pointer */
    : i0 `  ?3 K' p2 Z5 ^+ l
  9.       __set_MSP(*(__IO uint32_t*) ApplicationAddress);6 l  L3 X: I3 x7 ~; D3 I+ N/ |* L
  10.       Jump_To_Application();
    " d$ `" G* p$ G) h) M! g9 k
  11.     }  @# @( B* K: _' @
  12. }
复制代码
3 y7 ^, O9 U' z8 f) X
APP:0 D4 m  ^$ x2 l8 u0 P# q/ v8 n

4 I, L2 R% ]7 M$ b. w- F; E/ Emain 函数添加: J5 s4 C5 |. S& Q
; m  x6 }, g1 E2 W8 d$ C9 v
  1. #define APPLICATION_ADDRESS     ((uint32_t)0x08003000)
    , ^9 T" x* E, Q7 A: n' `
  2. #if   (defined ( __CC_ARM ))
    0 a; r8 |. C7 E3 B
  3.   __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));3 }6 {5 C% Q/ t' |, v/ a- |' i/ H" r7 `/ Y
  4. #elif (defined (__ICCARM__))& @+ i4 m& ?$ R9 `0 W
  5. #pragma location = 0x200000008 b, J6 e, V' P' M5 k7 Y3 z! I
  6.   __no_init __IO uint32_t VectorTable[48];
    ( {' |6 V8 k3 u1 I, c
  7. #elif defined   (  __GNUC__  )
    ( b& \$ S+ F) x# U# n
  8.   __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));" u2 x" K2 k' O) x' g. N: p8 g
  9. #elif defined ( __TASKING__ )
    ; N2 t9 X! `4 l
  10.   __IO uint32_t VectorTable[48] __at(0x20000000);
    ( `, C, Q/ \) I# n- {
  11. #endif
复制代码
  1.   /* USER CODE BEGIN 1 */# J6 _* ^) V: e( ^# e/ P& w0 C  @
  2.         uint32_t i = 0;
复制代码
  1.   /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  
    9 O* X7 V# R  C% a
  2.         
    . }; u, t' ?( J' X! u" S# A
  3.   /* Copy the vector table from the Flash (mapped at the base of the application. B& \* u! M; g. J( F( _
  4.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */
    . E& r. f( _3 g# M0 f' Z( H
  5. 0 k: P  x; u4 j+ g" t$ [. Z6 H
  6.   for(i = 0; i < 48; i++)
    , b& }! t. n' l' I
  7.   {
    ) W$ w9 ~) |& D
  8.     VectorTable<i> = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));</i>
    . x. W% U: A! Y1 \" O' ^, J
  9.   }; |& D8 F8 j$ K; f+ T* C
  10.         // Enable the SYSCFG peripheral clock
    : T4 g2 K; T3 j9 S, v5 z6 `
  11.   __HAL_RCC_SYSCFG_CLK_ENABLE();( d8 G4 s+ G2 Z
  12.   // Remap SRAM at 0x00000000
复制代码
  1.   __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码
6 ?8 u. n- c) P+ E

$ _! v# C8 `+ |, B7 ?! O# e在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C0/ W: B5 e( Q. w3 b! ]. o' r  g; [

. P9 A% e9 E0 R+ t% b  b* ^6 kstm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址.2 f0 V9 N  m7 p7 [# n
2 g5 L% b0 K# c7 x8 B
4 Z* v9 f; b6 w, f+ q+ b
收藏 评论0 发布时间:2021-11-24 15:01

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版