小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

怎么使用stm32寫IAP的bootloader和APP

 圓錐的布袋 2017-08-17

Stm32的bootloader和App的編寫注意事項(xiàng)

1、 怎么分配bootloader和app的空間

2、 怎么得到數(shù)據(jù)和寫入flash

3、 怎么從bootloader跳轉(zhuǎn)到app

4、 怎么設(shè)置App的中斷向量

5、 App中怎么生成bin文件

6、程序執(zhí)行的流程

 

1、怎么分配bootloader和app的空間


因?yàn)槲矣玫氖莝tm32f103c8t6,它的flash的大小是64k,所以把它分成如上所示

0x08000000 ---0x0800 33FF分配給bootloader使用,大小是13k

0x0800 3400----0x080097FF分配給第一個(gè)APP的使用,大小是25k

0x08009800----0x0800 FBFF分配給第二個(gè)APP的使用,大小是25k

0x0800FC00----0x0800 FFFF 分配給user_flag和其它標(biāo)志使用,大小是1k

 

在keil中設(shè)置rom的大小

A、bootloader中rom大小的設(shè)置


B、APP1中rom大小的設(shè)置


C、APP2中rom大小的設(shè)置

 

 

 

Rom設(shè)置好了就可以在map中看見地址的改變,這里拿bootloader和app1來說。

Bootloader的map

 

App1的map


這里就可以看到RESET的地址改變了

但是要想我們改變的rom在map中也改變keil里面必須要設(shè)置如下圖,


這里必須要打勾,默認(rèn)新建的工程是沒有選擇的

 

2、怎么得到數(shù)據(jù)和寫入flash

在我的程序是通過串口接收數(shù)據(jù),然后調(diào)用app_bin_handler(&timer);函數(shù)來在里面完成寫flash(函數(shù)iap_write_appbin(Flash_Current_Write_addr(),g_RxBuf1,length))、和校驗(yàn)寫入的數(shù)據(jù)是否正確(函數(shù)flag =read_flash_ECC(Flash_Current_Write_addr(),length);)、校驗(yàn)通過就可以跳轉(zhuǎn)到app中(函數(shù)JumpToApp(Flash_Current_Write_addr(),1);)

 

 

 

3、怎么從bootloader跳轉(zhuǎn)到app

voidJumpToApp(u32 ApplicationAddress,u8 flag)

{

         u32 temp;

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

         {

                   if(flag == 1)

                   {

                            User_write_Flash_falg();

                   }

                   temp = (*(vu32*)(ApplicationAddress + 4));

                   JumpToApplication =(FunVoidType)temp;

                   MSR_MSP(*(vu32*)ApplicationAddress);

                   JumpToApplication();

         }

}

程序中就是利用上面的函數(shù)實(shí)現(xiàn)跳轉(zhuǎn),中間有個(gè)User_write_Flash_falg()函數(shù)是用來設(shè)置app的標(biāo)志的,如果當(dāng)前正在使用的是app1,那么就設(shè)置標(biāo)志位為2,好在下次啟動(dòng)的時(shí)候跳轉(zhuǎn)到app2,如果當(dāng)前正在使用的是app2,那么就設(shè)置標(biāo)志位為1,好在下次啟動(dòng)的時(shí)候跳轉(zhuǎn)到app1

至于上面函數(shù)的詳解可以百度。

 

4、怎么設(shè)置App的中斷向量

Stm32的中斷重定向比較簡單,因?yàn)樗幸粋€(gè)專用的寄存器

         NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x9800);

這個(gè)函數(shù)就是重定向了app2的中斷向量,實(shí)現(xiàn)起來簡單

 

6、             App中怎么生成bin文件

因?yàn)槲业某绦蚴峭ㄟ^串口下載app的所以必須要生成bin文件,才方便下載,

在工程里面進(jìn)行如下設(shè)置就可以生成bin文件

其中主要是路徑要對,不然找不到.axf文件,也就生成不了bin文件

 

 

 

總結(jié):

Bootloader里面主要是

1、設(shè)置bootloader和app的空間

2、接收編譯好的app的bin文件,寫入flash

3、實(shí)現(xiàn)跳轉(zhuǎn)

App里面主要修改的地方是

1、         ROM起始地址和分配的空間大小

2、         重定向中斷向量

3、         生成bin文件

這里就是整個(gè)程序執(zhí)行的流程

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多