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

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

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:01
BootLoader:
$ {' b3 _5 @; a
* ]& g+ R- h+ O7 N7 nmain里调用函数跳转到APP地址0x80030008 v# D- D1 Q2 d3 V4 B
+ a" n" D$ j+ ^
  1. typedef  void (*pFunction)(void);
复制代码
  1. #define ApplicationAddress    0x8003000
复制代码
  1. void UserAppStart(void)
    7 Q1 y* U) S4 H' c* v; _5 Y$ \" ?* c
  2. {
    , ]) Y; L& x' b$ |
  3.           if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000): \( r6 ^# U' n6 X2 y- N* K
  4.     {   E; Y+ V% \* s1 a8 u( _! C  j
  5.       /* Jump to user application */! u- {% C2 P) V; r  ^/ ^+ K1 Z
  6.       JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);3 A* V  D; k* r+ Y4 j! z& a
  7.       Jump_To_Application = (pFunction) JumpAddress;$ }& D# S7 h3 V2 }( T
  8.       /* Initialize user application's Stack Pointer */* t. |" `$ G# {% M( Q
  9.       __set_MSP(*(__IO uint32_t*) ApplicationAddress);
    - \; v& J' p3 G: X
  10.       Jump_To_Application();) H& ?  b7 [# Q+ X6 @
  11.     }0 [7 l/ X: T  q/ w4 q- Y6 T
  12. }
复制代码
; t5 \7 W4 K, K  A- a
APP:* [1 f0 d; X+ E: y3 T* ~

" v7 f3 g2 X% |5 vmain 函数添加- e9 m3 b# J) t7 L  K8 J3 r

6 q7 K5 w! \8 \7 ]
  1. #define APPLICATION_ADDRESS     ((uint32_t)0x08003000)
    1 D2 Q5 I' @0 p$ t! P& H8 ~0 ^
  2. #if   (defined ( __CC_ARM ))
    ) v" y  Z! c# I$ {$ U
  3.   __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));* J+ M7 K2 y4 Z
  4. #elif (defined (__ICCARM__))
    & }. W% W" r. d) g7 A- w# b- E
  5. #pragma location = 0x20000000  g' {9 j$ j# l+ F; Y+ }+ N
  6.   __no_init __IO uint32_t VectorTable[48];
    ( N( Q# T) i! I5 _* X, O$ m$ Y
  7. #elif defined   (  __GNUC__  )- }  D4 Y: C5 Z( j2 k
  8.   __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));7 \4 m  ?; V& _0 N5 c* B
  9. #elif defined ( __TASKING__ )0 O. I6 ?# W9 H+ a3 P
  10.   __IO uint32_t VectorTable[48] __at(0x20000000);: J, O- y' h9 |
  11. #endif
复制代码
  1.   /* USER CODE BEGIN 1 */
    * q: e: ~* U- {; i' b
  2.         uint32_t i = 0;
复制代码
  1.   /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  9 |; O' x( @) b+ b7 w# @
  2.         9 m" Z9 ~( s% K7 Q2 J
  3.   /* Copy the vector table from the Flash (mapped at the base of the application+ m- v; f: `+ q
  4.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */
    - U( B* d7 a" w: k6 n/ E
  5. 7 }6 H, p' C6 O
  6.   for(i = 0; i < 48; i++)
    $ W6 ~; U' Y% n: P" H1 b
  7.   {
    6 w# |" T6 y5 x' n$ n& G3 y
  8.     VectorTable<i> = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));</i>
    0 o$ N1 e' B2 c
  9.   }
    - ]" Y$ r( j3 b" S$ K
  10.         // Enable the SYSCFG peripheral clock  t; X/ f7 p% [
  11.   __HAL_RCC_SYSCFG_CLK_ENABLE();
    $ G0 h1 s$ l" l1 }# \4 S
  12.   // Remap SRAM at 0x00000000
复制代码
  1.   __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码

: u" ~6 y8 ~) B* a& o! I
! }, p- N/ u; v+ ^( e) O" Q在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C0" K4 a  _8 u: k2 C
( w% f0 v1 ~! G8 r, @; n" u
stm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址.) _( U2 S; G5 D
9 j# ?, o( x! z6 |7 p% t$ Z! t. e5 r

' R6 A0 p& b0 G+ u( @* h+ v
收藏 评论0 发布时间:2021-11-24 15:01

举报

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