您现在的位置: 主页 > MCU > 单片机技术应用 > STM32F0xx IAP实现之中断向量表重定义 -
本文所属标签:
为本文创立个标签吧:

STM32F0xx IAP实现之中断向量表重定义 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]在STM32F103等cortex-m3/m4内核的单片机上可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;该寄存器的值来实现中断向量表的重定义。但在STM32F0xx系列以cortex-m0为内核的单片机中却怎么也找不到这个设置中断

在STM32F103等cortex-m3/m4内核的单片机上可以通过设置SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET;该寄存器的值来实现中断向量表的重定义。但在STM32F0xx系列以cortex-m0为内核的单片机中却怎么也找不到这个设置中断向量表的寄存器,可以通过以下方法来实现中断向量表重定义。

本文引用地址: http://www.21ic.com/app/mcu/201807/781367.htm

基本思想:

1、将中断向量表放入到RAM的起始地址(只需要在应用程序中保留RAM其实地址的0x100大小不使用即可)。

2、在bootload中将应用程序的中断向量表从Flash中拷贝到RAM中。

3、设置STM32F0xx中断向量表位于RAM中。

具体实现代码如下:


/*

*Function:voidJumpToApp(void)

*Parameter:none

*Return:none

*/

staticvoidJumpToApp(void)

{

ApplicationAddress=APP_FLASHADDR;

if(((*(uint32_t*)ApplicationAddress)&0x2FFE0000)==0x20000000)

{

/*Jumptouserapplication*/

/*最开头4个字节存放MSP的初始值,从这之后的4个字节存放ResetHandler中断向量*/

m_JumpAddress=*(uint32_t*)(ApplicationAddress+4);

JumpToApplication=(FunVoidType)m_JumpAddress;

/*Initializeuserapplication'sStackPointer*/

__set_MSP(*(uint32_t*)ApplicationAddress);

JumpToApplication();

}

}

/*

*Function:voidclock_init(void)

*Parameter:none

*Return:none

*/

intmain(void)

{

memcpy((void*)0x20000000,(void*)APP_FLASHADDR,0x100);

SYSCFG->CFGR1|=0x03;

JumpToApp();

while(1);

}





              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > STM32F0xx IAP实现之中断向量表重定义 -
 

"STM32F0xx IAP实现之中断向量表重定义 -"的相关文章

网站地图

围观()