历史上的今天
今天是:2024年08月22日(星期四)
2018年08月22日 | STM32 IAP/BOOT,三步速成
2018-08-22 来源:eefocus
Stm32的IAP现在已经是非常简单了,下面就教大家三步学成:
前提条件:已经有Flash读写函数,这个函数好弄,很多stm32例程里面都有
第一步(对于Boot程序):跳转到指定Flash位置函数,如下:
void Jump_To_Application(const u32 startAddr)
{
Jump_To_App = (pFunction)(*(vu32*) (startAddr + 4));
MSR_MSP(*(vu32*) startAddr);
Jump_To_App();
}
第二步(对于APP):在keil工程配置里设置程序起始地址和APP程序大小,如图:
第三步(对于APP):如果APP中涉及中断,则要在APP起始位置设置中断向量偏移,否则你会发现可以正常跳转运行,但是所有中断都不执行,就一句话:
SCB->VTOR = FLASH_BASE | 0x20000;
注意项:一般来说在Boot程序中不会使用任何外设,最多也就配置几个IO口,但如果你由于某些特殊原因需要配置了串口、ADC或DMA等一些外设的话此时跳转到APP程序的时候有可能会卡在APP程序的相应外设初始化函数里(如你在boot中配置了串口,这时就有可能卡在APP的串口配置里),这时你可能需要在跳转到APP之前(调用跳转函数之前)删除相应外设的配置(相应DeInit函数),如果这还不行那就在跳转之前静止所有中断(在keil里面是 __disable_irq();)然后在APP里面配置完相应外设后再开启所有中断;实际上我有碰到执行了这两个操作还是不行的(我在boot里面初始化了串口,用于在引导的时候打印信息),后面解决办法是在APP里在初始化完该串口后打印一个字符串出来,误打误撞解决的,为什么这样可以我也不知道
史海拾趣
|
大家好!!请教VHDL高手1个问题!!! 问题主要出在如下语句上: --#20100403#问题:不知怎么回事?若下面三语句不屏蔽,则ADclk信号不正确,为乱码;而下面3语句屏蔽后,ADclk信号就没有问题了,但就无法分频了??? if Cs=\'0\' AND RD=\'1\' AND ...… 查看全部问答> |
|
在CC2430应用程序中没有进行对引脚的操作指令,但程序进行了长时间的运行后出现某I/O引脚被改变。请教各位大虾。还有对2430的flash操作过度频繁会不会导致应用程序死掉呢?flash中的数据会不会由于操作flash的过度频繁而 ...… 查看全部问答> |
|
Reset operation As discussed previously, CE# must be low for all NAND activities. The simplest NAND command is the Reset (FFh), which doesn\'t require any address or second cycle. Simply assert CLE and issue a write pulse with FF ...… 查看全部问答> |
|
各位大虾,小弟初来此地,从事嵌入式嵌入式教学; 最近收到个2009嵌入式课件大赛的通知,请问有哪位大虾参加过吗,效果怎么样?看上去奖金还行 http://contest.cessa.org 不知道可不可以在这个版发,好像没找到合适的版面,请斑竹 ...… 查看全部问答> |
|
用portMon获取的通信过程如下 705 15:50:25 aaa.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 705 15:50:25 SUCCESS 706 15:50:25 &nb ...… 查看全部问答> |
|
急!! 今天买了个IDE转USB的接口,安装的时候怎么也装不上去 急!! 今天买了个IDE转USB的接口,安装的时候怎么也装不上去,驱动光盘中是ALL IN ONE CARDREADER AU6368 和USB TO IDE GL811,是不是硬盘还要跳线什么的?请各专家看看是怎么回事?谢谢了焦急等待中^^^^^^… 查看全部问答> |




