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

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

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:01
BootLoader:4 V* z$ {9 W7 y) N& L

$ G# @4 P$ \. p8 \5 ]main里调用函数跳转到APP地址0x8003000/ ]/ s) Y3 w& u3 B6 S
" h: n* d8 M% h8 G: W- y9 C0 G
  1. typedef  void (*pFunction)(void);
复制代码
  1. #define ApplicationAddress    0x8003000
复制代码
  1. void UserAppStart(void)
    , ?5 u; n) J7 {( c) P( D
  2. {
    3 {! C0 |: ^7 ]
  3.           if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)$ }9 y. ~4 ^0 f8 A0 {: s
  4.     {
    1 W: l& p7 {) b" B8 q) }
  5.       /* Jump to user application */
    . m1 w4 ?+ I: H$ W) x6 {: T9 S% R
  6.       JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);% W( T: C$ j4 Z, G8 i
  7.       Jump_To_Application = (pFunction) JumpAddress;) k. w6 K! C7 h3 x& g
  8.       /* Initialize user application's Stack Pointer */6 Y0 M3 |- i9 \$ R, j4 }+ z) j! y
  9.       __set_MSP(*(__IO uint32_t*) ApplicationAddress);# k/ l7 J/ m8 Z3 j/ ]
  10.       Jump_To_Application();: U3 R0 m4 s3 _4 a1 T
  11.     }1 u# x1 j2 b1 v* \- C& j7 P
  12. }
复制代码

& B8 t3 z" ~: a! |! X! |APP:
. a  Q# u5 @- G9 L0 s" m$ n, d5 \1 G2 J
main 函数添加, |) O# w. v9 N% W5 n

+ ]! C0 B$ d7 V0 ~9 @( o& m
  1. #define APPLICATION_ADDRESS     ((uint32_t)0x08003000): w+ l% i3 i* F- h
  2. #if   (defined ( __CC_ARM ))' H/ R" c  D- ~3 v+ l
  3.   __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
    # X3 D6 `& N  a5 n# h7 d+ V" p1 [
  4. #elif (defined (__ICCARM__))
    7 [/ y% \5 E+ t: H. p
  5. #pragma location = 0x20000000
    , U! M# V4 p  B& y4 i% J( E
  6.   __no_init __IO uint32_t VectorTable[48];2 C. {) }; C$ p* e% F& G+ F
  7. #elif defined   (  __GNUC__  )
    / ?; k+ U% S9 F& Y
  8.   __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));, e, v; N4 {4 G" V7 j" L
  9. #elif defined ( __TASKING__ )9 d% U( V# B& f- T1 S9 J- o
  10.   __IO uint32_t VectorTable[48] __at(0x20000000);
    - j/ G5 b4 ^! l
  11. #endif
复制代码
  1.   /* USER CODE BEGIN 1 */
    # v3 K1 |$ W& m5 b
  2.         uint32_t i = 0;
复制代码
  1.   /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  ; u0 L8 v9 D4 c
  2.         . a: T# e5 K- t- V
  3.   /* Copy the vector table from the Flash (mapped at the base of the application
    0 ?+ w) Y; Y9 W0 ?7 {1 h% Z
  4.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */) S+ ?5 N9 C3 v% R/ K. p2 K% H

  5. * ^. Z5 Q: A6 ~9 l* N9 V7 r4 B
  6.   for(i = 0; i < 48; i++)
    . I2 e: h7 f3 k3 ]" g/ A9 T. [$ M
  7.   {
    1 m& f, |/ A4 L" m7 K1 P
  8.     VectorTable<i> = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));</i>" G/ Z( j* g* U/ ~
  9.   }
    0 @' K# j( U* L3 b3 Q
  10.         // Enable the SYSCFG peripheral clock
    5 n8 s+ g4 t' \2 k1 ]! E. R
  11.   __HAL_RCC_SYSCFG_CLK_ENABLE();
    * v& k3 U9 Z- v8 s
  12.   // Remap SRAM at 0x00000000
复制代码
  1.   __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码

6 z6 `0 J" m) X# W. p& \. R$ ?% \+ N& R3 r5 |6 {6 t# u
在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C0: V0 o' c8 x( Q
( d3 N6 Y4 r, `7 r9 H
stm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址.
1 w/ f) G6 X! X% Q8 Y
! p$ V! l2 _: c
' P- h* N) k3 {; Z7 x
赞 收藏 评论0 发布时间:2021-11-24 15:01

举报

0个回答

所属标签

相似技术帖

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