里飞网

 找回密码
 立即注册
查看: 3916|回复: 0
打印 上一主题 下一主题

STM32F0XX中断向量跳转的办法

[复制链接]

45

主题

288

帖子

2478

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2478
跳转到指定楼层
楼主
发表于 2020-6-12 09:45:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
因STM32F0XX系统的SCB没有VTOR寄存器即SCB->VTOR,所以中断向量跳转要换一种方法。即把中断向量复制到SRAM最前面,方法如下:

  1. /* USER CODE BEGIN 0 */
  2. __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));

  3. // 重映射中断向量
  4. static void iRemapIrqVector(void)
  5. {
  6.         // 中断向量重映射
  7.         unsigned char i = 0;

  8.         for(i = 0; i < 48; i++)
  9.         {
  10.                 VectorTable[i] = *(__IO uint32_t*)(APP_START_ADDRESS + (i<<2)); //中断向量是一个指针,每个占4个字节
  11.         }

  12.         /* Remap SRAM at 0x00000000 */
  13.         __HAL_SYSCFG_REMAPMEMORY_SRAM(); //设置为RAM启动模式
  14. }

  15. /* USER CODE END 0 */
复制代码
然后在main函数最前面进行调用。
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.     iRemapIrqVector();
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration--------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();
复制代码
另MDK上也要进行SRAM的设置。


以上即可以加bootloader进行固件升级了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|里飞网  

GMT+8, 2024-4-20 07:29 , Processed in 0.073924 second(s), 6 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表