STM32G0在使用BootLoader后应用程序不能正常跳转的解决办法

news/2024/12/1 18:19:43/

前提条件:app独自运行没有问题,初始化或者长时间运行都不会跑飞;但是加入bootloader后主程序出现异常。
程序框架:
0x08000000 ~ 0x08003000 :bootloader占用;
0x08003000 ~ 最大: app占用;
通过查阅资料发现是APP应用程序起始地址修改后中断向量表没有重映射,在APP进入main函数前会先执行system_stm32xxxx.c中的SystemInit这个函数,函数内的中断向量映射地址赋值为
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
其中FLASH_BASE 就是默认程序起始地址0x8000000,VECT_TAB_OFFSET偏移地址默认为0;
现在整个APP的地址偏移0x3000,因此将VECT_TAB_OFFSET修改为0x3000后重新烧录运行程序功能都OK了。
注:
在这里插入图片描述
若看到没有定义USER_VECT_TAB_ADDRESS,则把上面一行的/* #defiene USER_VECT_TAB_ADDRESS */改为
#defiene USER_VECT_TAB_ADDRESS即可。


http://www.ppmy.cn/news/307050.html

相关文章

STM32G431之点灯和按键配置

STM32G431之点灯和按键配置 1.硬件接口 STM32G431开发板有一个用户按钮和LED灯   根据原理图,LD2和PA5相连,想要点亮LED则PA5应该为高电平。   用户按键B1和PC13相连,按下为高电平; 2.软件设计 2.1 芯片型号选择 本示例所…

【初识NUCLEO-STM32G0B1RE】

初识NUCLEO-STM32G0B1RE 最近入手了一块NUCLE-G0B1RE ST的开发版,看了一下相关开发板资料网上好像也挺少的只有官网有比较完整的数据手册和原理图这些,值得开心的一点的STM32G0的使用和STM32F1相似,在进行编程时也有一种熟悉感。同样也会一步…

计算机能运行超过内存的程序么,如果电脑使用内存超过32G那是种怎样的体验?...

这里首先说明一点,电脑的内存主要是搭配CPU才能完成各类数据的运算,程序也都是通过CPU来分配和处理的,所有电脑的内存不是越大就越好。 CPU相当于计算机的“大脑”,而内存相当于大脑的“办公桌”。 CPU需要处理大量的计算数据。它…

【STM32G0-HAL库串口控制】

STM32G0-HAL库串口控制 今天分享的是基于HAL库进行串口的配置输出以及重定位实现,使用的开发板是STM32G0B1RE,和F1系列的芯片使用方法是一模一样的。 一、打开CubeMX进行工程配置 这里使用的是串口2 具体的操作步骤就不重复了,就介绍一些关键…

STM32G431——按键的三行代码(长按、短按、单击、双击)

按键的三行代码(长按、短按、单击、双击) 按键的三行代码按键的长按、短按按键的单击、双击 按键的三行代码 key_value KEY_Scan(); //读取按键的键值 key_up ~key_value & (key_old ^ key_value); //按键的上升沿检测 只在按键抬起的瞬间有效 其他时刻都为零…

分析STM32G0 SPI外设不能触发RXNE接收标志的原因

今天准备移植STM32F030R8T6的程序到STM32G030C8T6上,程序中用到了硬件SPI外设,因为STM32G0用的HALLL库而不是不是标准库,所以我用STM32Cube MX生成了SPI的LL库代码,但是使能SPI后发现硬件怎么都不能触发RXNE接收标志,生…

为什么JVM不建议超过32G内存

在学习ES发现JVM内存不要超过32G的建议,故查找了一下原因。 java -Xmx32766m -Xms32766m -XX:PrintFlagsFinal 2> /dev/null | grep UseCompressedOops bool UseCompressedOops : true {lp64_product}查…

<STC32G12K128入门第五节>Time定时器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、timer是什么?二、相关寄存器1.2. THx & TLx3.案例总结前言 今天无聊的搞了一下stc32G12k128的timer定时器 一、timer是什么? 这里就是我们使用的开发板上面的timer资源 二、相关寄…