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

重新配置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 最优答案 回答时间:2025-7-2 11:01:26

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

废鱼 回答时间:2025-7-1 19:33:58

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

p99p 回答时间:2025-7-2 09:50:36

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

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 回答时间:2025-7-2 09:55:01
你可试着对着下面文章检查下,尤其文末结尾总结的那些方面。


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

所属标签

相似问题

官网相关资源

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