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

STM32F0系列中断向量映射问题

[复制链接]
STMCU小助手 发布时间:2023-2-7 21:56
最近用Cortex-M0内核的STM32F030K6T6做个东西,需要做IAP升级,发现它的中断向量与M3、M4等内核的单片机不太一样,这里分享给大家。: F$ o4 A% U  E3 d8 H9 z" }! k

8 k: [+ U* F" @( E. l
IAP升级需要一个BootLoader程序,一个应用程序。BootLoader程序直接烧写到flash起始地址就行,中断向量也不用改。但是应用程序需要烧写到BootLoader程序后面,且中断向量必须重新映射。
8 v: Y6 ]! F1 M: h5 p& d
M3、M4等内核的单片机,直接修改中断向量的偏移地址(VECT_TAB_OFFSET)就行。但在M0内核的库中,根本就没有这个定义。查阅相关资料发现,M0内核的中断向量需要用户自己从Flash映射到RAM中,即0x20000000地址。
9 O% t2 X, N6 j0 T1 [1 X* ]: c: \3 k8 w( Z
实际操作也很简单,在程序开始加上这两句话:
- E1 j  O  [! o
  1. #define IAP_ADDR                 ((uint32_t)0x08002800)
    1 @# X7 \5 S& n7 ?  I

  2. . S* _$ i. c' `- n  Y7 y- v8 Z% @
  3. memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4);: P2 A/ g* J7 K+ T8 j9 q0 j6 r7 `
  4. __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码

+ S/ Z, u* o8 J, Y0 o
其中0x20000000是SRAM的地址,IAP_ADDR是应用程序的起始地址,0xB4是中断向量表的大小。具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:
. r# `7 _7 ~3 M
! C1 R% z+ J3 g) ?1 B
1.png ) G0 p. ]* o6 W" w6 L" l9 A" n

% S; A6 g7 |: C" E
可以看到,中断向量从29行开始到75行结束(中间空2行),一共45个,每个占4字节,一共180字节,即0xB4。
& ]1 x6 |  b8 R! @1 Q+ d
由于SRAM开始的180字节被用作中断向量映射了,所以用户程序就不能在使用这里了,需要在编译器中把这部分空出来,设置如下。空出大于0xB4的空间就行,这里设置的是0xC0。% V% n/ {8 ~6 V& z

' q2 R% S' Q) b
2.png
4 \# w" x% j9 h+ ]7 T" C4 J9 M
. M- H! `4 L" ^& Z0 m5 I
这样,STM32F0系列Cortex-M0内核芯片中断向量表重映射的问题就解决了。
- b. P+ J$ Z& k! K! |! P

  h9 N, }: h% ^0 B" p9 @2 r转载自:[url=]电子产品世界[/url]
& o9 ]4 B' I; K. f
7 g3 s: B+ \- u' q, d. a5 v, g* M6 I1 b
赞 收藏 评论0 发布时间:2023-2-7 21:56

举报

0个回答

所属标签

相似技术帖

官网相关资源

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