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

重新配置SCB->VTOR = 0x08010000后,再次复位,程序异常,发现不进tick中断,IIC读数卡死在准备查询循环中。

[复制链接]
p99p 提问时间:2025-7-1 18:21 / 已解决

MCU是STM32F407IGT6,使用的是cubemx自动生成,CUBEIDE编译环境:

flash如下配置:

MEMORY

{

CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K

RAM (xrw) : ORIGIN = 0x20000010, LENGTH = 0x0001FFE0

FLASH_BOOT (rx) :ORIGIN = 0x08000000, LENGTH = 48K /放入boot程序/

FLASH_DATA (rx) :ORIGIN = 0x0800C000, LENGTH = 16K /数据区,存放密码/

FLASH_APP (rx) : ORIGIN = 0x08010000, LENGTH = 960K / 从第4扇区开始(0x08010000) 960K/

}

system_stm32f4xx.c中如下更改:

define VECT_TAB_BASE_ADDRESS FLASH_BASE

define VECT_TAB_OFFSET 0x10000

SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET;

int main(void)

{

/ USER CODE BEGIN 1 /

SCB->VTOR = 0x08010000;

/ USER CODE END 1 /

/ MCU Configuration--------------------------------------------------------/

/ Reset of all peripherals, Initializes the Flash interface and the Systick. /

HAL_Init();

/ USER CODE BEGIN Init /

/ USER CODE END Init /

/ Configure the system clock /

SystemClock_Config();

/ USER CODE BEGIN SysInit /

MX_TIM12_Init();

LL_TIM_EnableCounter(TIM12);

SetResetBit();

MX_DMA_Init();

MX_I2C2_Init();

MX_CRC_Init();

EEPROMInit(0);

}

做如上配置后,每次烧录后的第一次运行都是正常的,在cubeide中点击复位能运行到main,然后,再运行,就不进tick中断,IIC读EEPROM也会卡死在while循环中,请问什么原因?

收藏 评论4 发布时间:2025-7-1 18:21

举报

4个回答
p99p 最优答案 回答时间:4 天前

终于解决了,是bootloader跳转时关闭了中断,所以到APP程序初始化时需要打开中断。多谢各位👍

废鱼 回答时间:5 天前

检查一下中断向量表的状态,是不是因为boot里面产生的中断导致出错。重新初始化tick后,是否可以解决该问题。

p99p 回答时间:4 天前

观测到向量表的值是正确的:

SCB->VTOR volatile uint32_t 0x8010000 (Hex)

/ USER CODE BEGIN 1 /

SCB->VTOR = 0x08010000;

HAL_DeInit();

/ USER CODE END 1 /

/ MCU Configuration--------------------------------------------------------/

/ Reset of all peripherals, Initializes the Flash interface and the Systick. /

HAL_Init();

/ USER CODE BEGIN Init /

/ USER CODE END Init /

/ Configure the system clock /

SystemClock_Config();

/ USER CODE BEGIN SysInit /

HAL_InitTick (TICK_INT_PRIORITY);

MX_TIM12_Init();

LL_TIM_EnableCounter(TIM12);

SetResetBit();

MX_DMA_Init();

MX_I2C2_Init();

MX_CRC_Init();

EEPROMInit(0);

增加了HAL_DeInit以及有重新HAL_InitTick (TICK_INT_PRIORITY);还是不对。

xmshao 回答时间:4 天前
你可试着对着下面文章检查下,尤其文末结尾总结的那些方面。


STM32 IAP应用时的跳转注意事项

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版