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

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

[复制链接]
STMCU小助手 发布时间:2021-11-24 15:01
BootLoader:
- D9 k' z, |: [# c& S% w6 X( x- @
9 W9 C- z6 k; amain里调用函数跳转到APP地址0x80030004 Z( Y& r3 D6 v3 B/ X0 |- q0 R

3 o/ M  I5 j. u; }
  1. typedef  void (*pFunction)(void);
复制代码
  1. #define ApplicationAddress    0x8003000
复制代码
  1. void UserAppStart(void)
    8 S! @2 C" w4 ?7 B
  2. {
    . Y8 ^, n7 s3 W1 K5 s  N7 U% T" V
  3.           if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)# n/ c) c- M1 ^) q# ?
  4.     {
    " t1 `; a5 J& T% W: N
  5.       /* Jump to user application */
    % F, F! e) c! M4 s; }  c( K! l
  6.       JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);* `( L) s5 H# H% o  Q) v4 q
  7.       Jump_To_Application = (pFunction) JumpAddress;
      ?. w6 q9 k7 e$ M
  8.       /* Initialize user application's Stack Pointer */
    ! M. |2 j# f1 o" F! H% x/ _
  9.       __set_MSP(*(__IO uint32_t*) ApplicationAddress);* T; B% C9 e, y* X7 S. X/ n
  10.       Jump_To_Application();2 j. \6 b2 d, p3 k3 w- i7 h
  11.     }
    # S4 T# z& L, ^
  12. }
复制代码

# z9 G) k5 e. u! m$ D; MAPP:
- o. r0 B( E* q2 |$ Q. U1 d7 ]  V8 y/ t9 R9 T: P- N- I. R) G- [! R
main 函数添加1 v1 m3 |  ^( i6 _
  }. l  b/ M: [, E9 F0 w, {) _$ x
  1. #define APPLICATION_ADDRESS     ((uint32_t)0x08003000)# P3 y7 _, B6 W% {) N& g$ p
  2. #if   (defined ( __CC_ARM )). b* f' a: [' S$ n' B( `: U. {
  3.   __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));$ f  A3 g' R* M5 `
  4. #elif (defined (__ICCARM__))
    ; L; |0 ]' N: O
  5. #pragma location = 0x20000000; T8 r1 [. |, Y
  6.   __no_init __IO uint32_t VectorTable[48];) t( k; ]( n' |1 `: a  e! i% [& L
  7. #elif defined   (  __GNUC__  )0 k6 W1 g9 g: _0 c* }8 Q2 y
  8.   __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));
    $ q# `0 R3 M5 Z7 V
  9. #elif defined ( __TASKING__ )
    ( k, i& G- Q$ H8 r/ j9 b# [
  10.   __IO uint32_t VectorTable[48] __at(0x20000000);
      |0 q! s" O1 B7 j
  11. #endif
复制代码
  1.   /* USER CODE BEGIN 1 */
    ! [, Q3 g- V: t' [3 v
  2.         uint32_t i = 0;
复制代码
  1.   /* Relocate by software the vector table to the internal SRAM at 0x20000000 ***/  
    1 Y9 o) B5 t, q
  2.         ' A4 R0 Q4 `4 y& G
  3.   /* Copy the vector table from the Flash (mapped at the base of the application
    4 E: h( |" P- D0 s9 `
  4.      load address 0x08003000) to the base address of the SRAM at 0x20000000. */
    $ y7 W( c- X8 K- k
  5. / V1 q0 P, p; z: }. o6 {
  6.   for(i = 0; i < 48; i++)
    ! M8 \/ b  c5 ]6 f+ n% i, J7 N' `
  7.   {
    * O# |. C& U, J7 V3 f$ s
  8.     VectorTable<i> = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));</i>
    0 l1 i# n; c: e0 T# p+ @* K6 |
  9.   }
    6 b$ @/ B1 [6 B
  10.         // Enable the SYSCFG peripheral clock
    1 H& {# |+ u. ]+ i  U* g
  11.   __HAL_RCC_SYSCFG_CLK_ENABLE();, m' s  l; e5 Y" U1 I; s6 A
  12.   // Remap SRAM at 0x00000000
复制代码
  1.   __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码
, }0 d' x( g" l, \$ W' C6 U

5 q% V2 J2 b% D# U4 D$ o2 j  o在Keil下设置IROM1:start 0x8003000 IRAM1:Start 0x200000C08 B6 B7 Z, f  v, [7 s9 m! Q- ?& a

# I; S) X4 v# E3 M' \: x# W5 ostm32f0 没有中断偏移寄存器,所以将中断向量表读取到RAM中,然后重映射到RAM地址.
1 F3 i1 u5 P: @' Q8 K
8 Q/ q7 U. [& T& c
8 z4 u' N8 b& m9 Y) n) Q
收藏 评论0 发布时间:2021-11-24 15:01

举报

0个回答

所属标签

相似技术帖

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