问答

汇集网友智慧,解决技术难题

21ic问答首页 - AT32F407扩展224KSRAM后加入boot程序SRAM超过128K无法运行

SRAM boot程序 4K

AT32F407扩展224KSRAM后加入boot程序SRAM超过128K无法运行

linyijian2026-10-09
AT32F407使用扩展224KSRAM后,加入boot程序后SRAM超过128K程序无法运行是什么原因,去掉boot程序可以用到200K都没问题,下面是boot的跳转程序
void BOOT_P_Quit(void)         //跳转执行另一地址程序
{
        if(((*(vu32*)ApplicationAddress)&0x2FFE0000)==0x20000000)        //检查栈顶地址是否合法.
        {
                JumpAddress = *(volatile u32*) (ApplicationAddress + 4);                //ApplicationAddress=0x8002000                                 
                /* Jump to user application */
                Jump_To_Application = (pFunction) JumpAddress;
                /*初始化用户应用程序的堆栈指针*/
//                MSR_MSP(*(volatile u32*) (ApplicationAddress));
                __set_MSP(*(volatile u32*) (ApplicationAddress));
                Jump_To_Application();
        }
        else return;               
}

void BOOT_Jump_To_App(void)
{
        CRM->apb1rst=        0x00000000;        //跳转 关中断 关时钟
        CRM->apb2rst=        0x00000000;
        CRM->ahben        = 0x00000014;        //睡眠模式闪存和SRAM时钟使能.其他关闭       
        CRM->apb1en = 0x00000000;
        CRM->apb2en = 0x00000000;
        CRM->ctrl   = 0x00000001;        //使能内部高速时钟HSION
        CRM->cfg   &= 0xF8FF0000;   //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
        CRM->ctrl  &= 0xFEF2FFFF;   //复位HSEON, HSEBYP CSSON,PLLON
        CRM->cfg   &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE  
        CRM->clkint        = 0x00000000;   //关闭所有中断                       
        BOOT_P_Quit();                                //执行跳转
}
回答 +关注 1
712人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册