您的位置 首页 国产IC

STM32–简略的IAP操作

STM32支持在应用中编程,也就是所谓的IAP,这对产品的在线升级带来了很大方便。在线升级的原理简介如下:在单片机的FLASH中有两段代码,一…

STM32支撑在运用中编程,也便是所谓的IAP,这对产品的在线晋级带来了很大便利。

在线晋级的原理简介如下:

单片机的FLASH中有两段代码,一段是IAP代码,另一段便是用户的运用程序即APP代码,IAP代码放在单片机复位时的开端地址,而APP代码则放在IAP后边的地址,上电时CPU首要履行IAP代码,再经过IAP代码跳转到APP代码开端履行。

在IAP代码履行期间,经过检测某一个事情(如IO电平)来判别是否对APP代码进行更新,假如该事情无效,则不更新,直接跳转到APP代码履行;假如该事情有用,则更新APP代码,而更新的文件则从外部磁盘经过串口或USB写入FALSH运用程序空间。

流程图如下:

当然,这仅仅一种最简略的办法,它还可所以当APP代码在履行时,将PC指针跳转到IAP来更新自已。

完结的大致原理都是共同的,仅仅办法不同算了。

值得留意的是:

IAP跳转的地址有必要APP的开端地址共同,相应的中断向量表也要修正,不然APP将不能正确的运转。

在附件我收拾的代码中,串口办法的IAP跳转的地址为0x8002000,因而运用程序的开端地址也应为0x8002000,在KEIL设置下如下图:

还有中断向量表的开端地址也应改为0x8002000:

/*SettheVectorTablebaseaddressat0x08002000*/

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);//NVIC_VectTab_FLASH=0x08000000

只需以上两处设置正确才干保证APP能正确的运转。

USB办法的IAP跳转的地址为0x8004000,设置办法同上。

晋级文件传输办法

串口办法的IAP在超级终端下用Ymode协议,波特率115200;文件为.BIN格局。

USB办法的IAP用DfuSeUSBDeviceFirmwareUpgrade软件传送,文件为dfu格局。

总的来说,IAP带给我的体会仍是十分愉快的!

所谓IAP,便是在体系编程,也便是说,CPU在运转的
过程中,能够对FLASH进行刷写.根本的运用可用于写入加密字或许一些存储信息等,高档点
的运用则是用于某些运用的设备上,体系查入SD卡后主动更新程序等.

在stm32f10x_conf.h中敞开#include”stm32f10x_flash.h”

#include”STM32Lib\\stm32f10x.h”
#include”hal.h”

#defineFLASH_ADR0x08008000//要写入数据的地址
#defineFLASH_DATA0x8a8a8a8a//要写入的数据

intmain(void)
{
u32tmp;
ChipHalInit();//片内硬件初始化
ChipOutHalInit();//片外硬件初始化
//判别此FLASH是否为空白
tmp=*(vu32*)(FLASH_ADR);

/*将地址(FLASH_ADR)强制转化为(vu32*)型指针求内容*然后再将值赋给tmp。仍是比较考练C言语的,老师上课可从没这么讲过。*/
if(tmp==0xffffffff)
{
FLASH_Unlock();
FLASH_ProgramWord(FLASH_ADR,FLASH_DATA);
FLASH_Lock();
USART1_Puts(“要写入的地址为空,现已写入认证数据\r\n”);//在指定地址编写一个字
}
elseif(tmp==FLASH_DATA)
{
USART1_Puts(“地址数据与认证数据契合\r\n”);
FLASH_Unlock();
FLASH_ErasePage(FLASH_ADR);

/*和很多FLASH存储器的特性相似,STM32内的FLASH数据只能由1变成0,假如要由0
变成1,则需求调用刷除函数,把一个页都刷除去.假如不擦也能写可是只能写上0*/
FLASH_ProgramWord(FLASH_ADR,0x11223344);
FLASH_Lock();
USART1_Puts(“写入了0x11223344\r\n”);
}
else
{
USART1_Puts(“地址上的数据与认证的数据不契合,有可能是写入失利或许是要写入的地址非空\r\n”);
FLASH_Unlock();
FLASH_ErasePage(FLASH_ADR);
FLASH_Lock();
USART1_Puts(“现已刷除了要写入的地址\r\n”);
}
while(1);
}

体系经过串口输出写FLASH的状状况,在第一次运转的时分,一般状况,0x08008000处的
FLASH为空,所以体系就往空的FLASH上写入一个数据0x8a8a8a8a.并提示现已写入.此刻用
户只需再次复位一下体系,则因为之前现已写入并为体系所读取,则这次串口就会输出现已写
入了数据的信息.
留意写FLASH之前需求调用解锁函数,写入后应调用确定函数.

闪存的指令和数据拜访是经过AHB总线完结的。预取模块是用于经过ICode总线读取指令的。裁定是作用在闪存接口,而且DCode总线上的数据拜访优先。

读拜访能够有以下装备选项:

●等候时刻:能够随时更改的用于读取操作的等候状况的数量。

●预取缓冲区(2个64位):在每一次复位今后被主动翻开,因为每个缓冲区的巨细(64位)与闪存的带宽相同,因而只经过需一次读闪存的操作即可更新整个缓冲区的内容。因为预取缓冲区的存在,CPU能够作业在更高的主频。CPU每次取指最多为32位的字,取一条指令时,下一条指令现已在缓冲区中等候。

●半周期:用于功耗优化。

注:1.这些选项应与闪存存储器的拜访时刻一同运用。等候周期表现了体系时钟(SYSCLK)频率与闪存拜访时刻的联系:0等候周期,当0

2.半周期装备不能与运用了预分频器的AHB一同运用,时钟体系应该等于HCLK时钟。该特性只能用在时钟频率为8MHz或低于8MHz时,能够直接运用的内部RC振荡器(HSI),或许是主振荡器(HSE),但不能用PLL。

3.当AHB预分频系数不为1时,有必要置预取缓冲区处于敞开状况。

4.只需在体系时钟(SYSCLK)小于24MHz而且没有翻开AHB的预分频器(即HCLK有必要等于SYSHCLK)时,才干履行预取缓冲器的翻开和封闭操作。一般来说,在初始化过程中履行预取缓冲器的翻开和封闭操作,这时微操控器的时钟由8MHz的内部RC振荡器(HSI)供给。

5.运用DMA:DMA在DCode总线上拜访闪存存储器,它的优先级比ICode上的取指高。DMA在每次传送完结后具有一个空余的周期。有些指令能够和DMA传输一同履行。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

在ST官网下载IAP进程,链接http://www.st.com/stonline/products/support/micro/files/an2557.zip

移植进程到自己的开发板上

首要修正main.c中的串口初始化函数IAP_Init(),根据需求再增加一个开发板端口初始化的函数,修正int main()函数里进入IAP的条件

运用程序的修正首要是四点

1、 options for target–>将ROM1修正成0x8002000

2、 option for target–>linker–>勾选use memory layout from target dialog

3、 options for target –>user 在run user programs after build/rebuild下给run#1和run#2打勾,并别离填上I:\embedded\Keil Mdk\ARM\BIN40\fromelf.exe –bin -o my.bin output\release.axf和I:\embedded\Keil Mdk\ARM\BIN40\fromelf.exe -z output\release.axf,留意地址要正确,首要意图是调用keil自带的hex转东西将keil编译程序后生成的release.axf转成bin文件

4、 在程序中重定向向量表NVIC_SetVectorTable(NVIC_VectTab_FLASH+0x2000, 0x2000);

下载程序办法:

1、 现在IAP的引导程序,也便是移植官网的那个程序。

2、 运用开端—一切程序–附件—通讯—超级终端进行下载,超级终端装备为无数据流操控,别的波特率、数据位等要与例程的串口装备要对应,输入1使开发板进入等候下载的形式,点击超级终端的传送à传送文件,挑选文件,协议运用例程的Ymodern,下载完后输入2即可运转运用程序

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/268248.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部