RT-Thread论坛
直播中

毛萃

7年用户 884经验值
私信 关注

rtthread用通用bootloader后,app的io口无法产生中断怎么解决?

使用的STM32f412,用的rtthread自动生成的bootloader,跳转到app后,app正常运行,但是开启的io口中断,无法正常产生中断,去掉bootloader后,使用没有偏移的app用同样的代码,可以正常发生中断。

回帖(2)

贾绰

2024-2-26 16:56:42
bootloader里对这个IO口做什么配置了没有
举报

池鹄展

2024-2-27 09:36:10
在使用RTOS和bootloader时,可以出现中断无法正常触发的问题。这可能是由于中断向量表地址没有正确设置引起的。

首先,确保bootloader正确配置了中断向量表地址,以便在跳转到应用程序后,中断可以正确触发。可以使用如下代码设置中断向量表地址:

```c
#define VECT_TAB_OFFSET  0x00 // 中断向量表地址偏移量

// 设置中断向量表地址
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
```

其次,确保应用程序的中断向量表地址也正确设置。在应用程序主函数之前,可以添加如下代码设置:

```c
#define VECT_TAB_OFFSET  0x00 // 中断向量表地址偏移量

// 设置中断向量表地址
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;
```

这样可以确保应用程序正确使用中断向量表地址,使得中断可以正常触发。

如果问题仍然存在,建议检查应用程序的中断配置是否正确,包括使能中断,设置中断优先级等。

另外,还可以尝试将应用程序与bootloader分开编译,以确保中断向量表地址的正确设置。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分