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

STM32F0系列中断向量映射问题

[复制链接]
STMCU小助手 发布时间:2023-2-2 17:00
最近用Cortex-M0内核的STM32F030K6T6做个东西,需要做IAP升级,发现它的中断向量与M3、M4等内核的单片机不太一样,这里分享给大家。

( o8 b: v& I" o3 v& D& W
IAP升级需要一个BootLoader程序,一个应用程序。BootLoader程序直接烧写到flash起始地址就行,中断向量也不用改。但是应用程序需要烧写到BootLoader程序后面,且中断向量必须重新映射。
2 Z( E' S0 }2 I+ [
M3、M4等内核的单片机,直接修改中断向量的偏移地址(VECT_TAB_OFFSET)就行。但在M0内核的库中,根本就没有这个定义。查阅相关资料发现,M0内核的中断向量需要用户自己从Flash映射到RAM中,即0x20000000地址。
; j9 V. T4 z6 S* [/ x/ l
实际操作也很简单,在程序开始加上这两句话:
  1. #define IAP_ADDR                 ((uint32_t)0x08002800)
      R9 J9 f5 t* }, m, G' L5 H
  2. 2 ]1 {( ?7 b! `$ j
  3. memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4);' S9 u" ~  d" R% e
  4. __HAL_SYSCFG_REMAPMEMORY_SRAM();
复制代码
* g' b' g/ s/ `7 n" B& F

/ X+ o* C% u! O# V2 `7 B
其中0x20000000是SRAM的地址,IAP_ADDR是应用程序的起始地址,0xB4是中断向量表的大小。具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:1 C; i0 y' }5 D4 u4 d+ Y8 M8 ?$ x

* p1 i' P8 L7 K! b$ ?1 L5 }' x3 r
微信图片_20230202170038.png , t8 m9 m) P4 N* }9 Y! b3 k

/ ~  [/ l) a  @可以看到,中断向量从29行开始到75行结束(中间空2行),一共45个,每个占4字节,一共180字节,即0xB4。: I+ j- t2 v" A/ ^* F1 h& N2 b

% X) M: K( T! S8 X6 K4 S* ^
由于SRAM开始的180字节被用作中断向量映射了,所以用户程序就不能在使用这里了,需要在编译器中把这部分空出来,设置如下。空出大于0xB4的空间就行,这里设置的是0xC0。
8 k4 t$ p! D* `8 R& ]$ a

* g8 l+ A$ b) @
微信图片_20230202170041.png # {- v- i1 }" P+ N6 W' X
% G6 `4 V; ~! I; o% M+ p" M
    这样,STM32F0系列Cortex-M0内核芯片中断向量表重映射的问题就解决了。' f0 _8 g; ?* X# P( Y" P  i1 Q

9 T. I/ u' y* f0 p0 \3 P7 P. o
来源:嵌入式技术开发7 `( A# V/ H& [

& V9 ~+ t/ M$ z& _2 C! a' {# V9 u' N# B1 N( L) F1 E
3 R* @" D" f0 F' f% ]
赞 收藏 评论0 发布时间:2023-2-2 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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