请选择 进入手机版 | 继续访问电脑版

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

STM32F0系列中断向量映射问题

[复制链接]
STMCU小助手 发布时间:2023-2-7 21:56
最近用Cortex-M0内核的STM32F030K6T6做个东西,需要做IAP升级,发现它的中断向量与M3、M4等内核的单片机不太一样,这里分享给大家。0 a% U5 t- |1 p6 {
# q! m' F/ Y. l- f5 `
IAP升级需要一个BootLoader程序,一个应用程序。BootLoader程序直接烧写到flash起始地址就行,中断向量也不用改。但是应用程序需要烧写到BootLoader程序后面,且中断向量必须重新映射。
8 E, w  S" u( ]9 s# c, Z: s
M3、M4等内核的单片机,直接修改中断向量的偏移地址(VECT_TAB_OFFSET)就行。但在M0内核的库中,根本就没有这个定义。查阅相关资料发现,M0内核的中断向量需要用户自己从Flash映射到RAM中,即0x20000000地址。- J: ~$ G" P# I9 Q* R
- W" o( Z4 b: h, r
实际操作也很简单,在程序开始加上这两句话:8 I+ C9 A3 f5 O8 r% H
  1. #define IAP_ADDR                 ((uint32_t)0x08002800)8 R9 ^& b7 W# L" [. G4 t  S

  2. ! ~, ~/ y2 w8 R& P! A3 i( l
  3. memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4);
    / C7 D# ^! j( i# _
  4. __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码

' P9 c4 D0 u) C, r9 f- L% X+ I; r$ W
其中0x20000000是SRAM的地址,IAP_ADDR是应用程序的起始地址,0xB4是中断向量表的大小。具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:" i. P# O: c4 @# Y
1 O4 R1 K% `3 g" r
1.png . E, f' }2 _1 E; a

: m( a0 y' ^; c; H: _7 i8 _/ x
可以看到,中断向量从29行开始到75行结束(中间空2行),一共45个,每个占4字节,一共180字节,即0xB4。( _* I6 `% ^  e5 O
由于SRAM开始的180字节被用作中断向量映射了,所以用户程序就不能在使用这里了,需要在编译器中把这部分空出来,设置如下。空出大于0xB4的空间就行,这里设置的是0xC0。
: J1 H2 e7 b/ [
. E  `0 p, P: d1 |6 q' o! k! f
2.png
) q$ E- x9 V8 L

0 s0 W! t+ |  }, z2 o
这样,STM32F0系列Cortex-M0内核芯片中断向量表重映射的问题就解决了。1 Z! r6 \- ~2 N6 w& n
4 X$ {3 h0 W1 u" b2 a5 [0 ?
转载自:[url=]电子产品世界[/url]
% W0 ?' A2 ^3 S' j" \$ S4 a5 K' \7 d$ |' @: L% d, @
8 b; Q2 Q: M% w. ]0 w; n1 o: o
收藏 评论0 发布时间:2023-2-7 21:56

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版