STM32 IAPAPP参数配置向量表映射.docx

上传人:b****8 文档编号:9144797 上传时间:2023-02-03 格式:DOCX 页数:15 大小:315.74KB
下载 相关 举报
STM32 IAPAPP参数配置向量表映射.docx_第1页
第1页 / 共15页
STM32 IAPAPP参数配置向量表映射.docx_第2页
第2页 / 共15页
STM32 IAPAPP参数配置向量表映射.docx_第3页
第3页 / 共15页
STM32 IAPAPP参数配置向量表映射.docx_第4页
第4页 / 共15页
STM32 IAPAPP参数配置向量表映射.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

STM32 IAPAPP参数配置向量表映射.docx

《STM32 IAPAPP参数配置向量表映射.docx》由会员分享,可在线阅读,更多相关《STM32 IAPAPP参数配置向量表映射.docx(15页珍藏版)》请在冰豆网上搜索。

STM32 IAPAPP参数配置向量表映射.docx

STM32IAPAPP参数配置向量表映射

基于MDK的STM32系列IAP和APP程序的配置

很多人在做IAP程序的时候,一般都能很容易就做出来,但是在做APP的时候,却经常会跑飞,其中原理,大都由于MDK配置出的问题,或者是APP没有映射向量表。

向量表起始地址默认的是0x08000000,在IAP的程序里不用再映射,但APP的起始地址已经不再是0x08000000,所以,必须要映射到实际的起始地址,否则当IAP跳转到APP的时候,程序直接就飞了。

如我的APP起始地址是0x08005400,我的映射函数是这么配置的NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x5400);NVIC_VectTab_FLASH的值就是0x08000000。

下面让我们来看看IAP和APP的MDK配置,其中片子为STM32F103RE,IAP起始是0x08000000,程序大小是0x5400字节;APP的起始地址是0x08005400,程序大小是0x7AC00,配置如下:

1.IAP的optionfortarget’stm3210e-evel’配置

1)这里要注意的是IROM1的配置

2)这里是片子的选择配置

单击setting进入下面的界面

这里要注意ProgrammingAlgorithm的size大小。

实际上经过测试,这个size使用片子的最大的容量也没关系,即0x00080000(512K),也不会影响程序的运行。

3)以上是大家需要配置的,以下是其它的配置,与IAP功能无关紧要,是我的配置,仅供大家参考。

2.APP的配置

1)注意下面的IROM1的配置,千万不可与IAP有区域重叠,而且size不能超过片子的大小。

这里0x7AC00与IAP的0x5400之和,刚好是0x80000,即512K

2)片子的配置

再次说明一下,以上的RAMforalgorithm(RAM为运算法则准备的空间)的size和programmingforalgorithm(程序为运算准备的空间)的size都是默认的,当然程序为运算准备的空间大小也可以改成0x7AC00,起始地址改为0x08005400,但经过调试效果都一样。

其它MDK的设置参照IAP的(3)点

(3)以下的说明要特别注意,稍不留神就会出问题。

平时我们在建立工程的时候,可能不会去重新映射向量表,原因是一般我们程序的起始地址都是默认的0x08000000,但此刻的APP的起始地址是0x08005400,那么就必须重新映射了。

需要注意的是,在系统时钟配置好后,马上就做向量映射,中间最好先不要做其它的配置,比如端口初始化等等,否则程序跑飞也不一定的。

下面的这段代码就是我实际的配置过程。

VoidMain(void)

{

SystemInit();//系统初始化

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x5400);//向量表映射

……

}

voidSystemInit(void)

{

/*!

RCC->CR|=(uint32_t)0x00000100;

/*!

0],HPRE[3:

0],PPRE1[2:

0],PPRE2[2:

0],MCOSEL[2:

0]andMCOPRE[2:

0]bits*/

RCC->CFGR&=(uint32_t)0x88FFC00C;

/*!

RCC->CR&=(uint32_t)0xEEFEFFFE;

/*!

RCC->CR&=(uint32_t)0xFFFBFFFF;

/*!

0]andPLLDIV[1:

0]bits*/

RCC->CFGR&=(uint32_t)0xFF02FFFF;

/*!

RCC->CIR=0x00000000;

/*ConfiguretheSystemclockfrequency,AHB/APBxprescalersandFlashsettings*/

SetSysClock();

//SetSysClock65K();

#ifdefVECT_TAB_SRAM

SCB->VTOR=SRAM_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalSRAM.*/

#else

SCB->VTOR=FLASH_BASE|VECT_TAB_OFFSET;/*VectorTableRelocationinInternalFLASH.*/

#endif

}

staticvoidSetSysClock(void)

{

__IOuint32_tStartUpCounter=0,HSEStatus=0;

/*SYSCLK,HCLK,PCLK2andPCLK1configuration---------------------------*/

/*EnableHSE*/

RCC->CR|=((uint32_t)RCC_CR_HSEON);

/*WaittillHSEisreadyandifTimeoutisreachedexit*/

do

{

HSEStatus=RCC->CR&RCC_CR_HSERDY;

StartUpCounter++;

}while((HSEStatus==0)&&(StartUpCounter!

=HSE_STARTUP_TIMEOUT));

if((RCC->CR&RCC_CR_HSERDY)!

=RESET)

{

HSEStatus=(uint32_t)0x01;

}

else

{

HSEStatus=(uint32_t)0x00;

}

if(HSEStatus==(uint32_t)0x01)

{

/*Enable64-bitaccess*/

FLASH->ACR|=FLASH_ACR_ACC64;

/*EnablePrefetchBuffer*/

FLASH->ACR|=FLASH_ACR_PRFTEN;

/*Flash1waitstate*/

FLASH->ACR|=FLASH_ACR_LATENCY;

/*Powerenable*/

RCC->APB1ENR|=RCC_APB1ENR_PWREN;

/*SelecttheVoltageRange1(1.8V)*/

PWR->CR=PWR_CR_VOS_0;

/*WaitUntiltheVoltageRegulatorisready*/

while((PWR->CSR&PWR_CSR_VOSF)!

=RESET)

{

}

/*HCLK=SYSCLK/1*/

RCC->CFGR|=(uint32_t)RCC_CFGR_HPRE_DIV1;

/*PCLK2=HCLK/1*/

RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE2_DIV1;

/*PCLK1=HCLK/1*/

RCC->CFGR|=(uint32_t)RCC_CFGR_PPRE1_DIV1;

/*PLLconfiguration*/

RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC|RCC_CFGR_PLLMUL|

RCC_CFGR_PLLDIV));

RCC->CFGR|=(uint32_t)(RCC_CFGR_PLLSRC_HSE|RCC_CFGR_PLLMUL12|RCC_CFGR_PLLDIV3);

/*EnablePLL*/

RCC->CR|=RCC_CR_PLLON;

/*WaittillPLLisready*/

while((RCC->CR&RCC_CR_PLLRDY)==0)

{

}

/*SelectPLLassystemclocksource*/

RCC->CFGR&=(uint32_t)((uint32_t)~(RCC_CFGR_SW));

RCC->CFGR|=(uint32_t)RCC_CFGR_SW_PLL;

/*WaittillPLLisusedassystemclocksource*/

while((RCC->CFGR&(uint32_t)RCC_CFGR_SWS)!

=(uint32_t)RCC_CFGR_SWS_PLL)

{

}

}

else

{

/*IfHSEfailstostart-up,theapplicationwillhavewrongclock

configuration.Usercanaddheresomecodetodealwiththiserror*/

}

}

OYZQ2013-12-30

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1