久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3625|回復: 1
打印 上一主題 下一主題
收起左側

STM32軟件-IAP遠程固件升級

[復制鏈接]
跳轉到指定樓層
樓主
ID:350827 發表于 2019-9-20 15:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
經常有項目要求固件遠程更新,通過串口、GPRS、4G等等方式。下面介紹下STM32遠程固件更新的方法。

IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布后可以方便地通過預留的通信口對產品中的固件程序進行更新升級。

通常在用戶需要實現IAP功能時,即用戶程序運行中作自身的更新操作,需要在設計固件程序時編寫兩個項目代碼,第一個項目程序不執行正常的功能操作,而只是通過某種通信管道(如USB、USART)接收程序或數據,執行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當芯片上電后,首先是第一個項目代碼開始運行,它作如下操作:

1)檢查是否需要對第二部分代碼進行更新

2)如果不需要更新則轉到4)

3)執行更新操作

4)跳轉到第二部分代碼執行

第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以后需要程序更新是再通過第一部分IAP代碼更新。

對于STM32來說,因為它的中斷向量表位于程序存儲器的最低地址區,為了使第一部分代碼能夠正確地響應中斷,通常會安排第一部分代碼處于Flash的開始區域,而第二部分代碼緊隨其后。

在第二部分代碼開始執行時,首先需要把CPU的中斷向量表映像到自己的向量表,然后再執行其他的操作。

如果IAP程序被破壞,產品必須返廠才能重新燒寫程序,這是很麻煩并且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區域實行讀保護的同時,自動地對用戶Flash區的開始4頁設置為寫保護,這樣可以有效地保證IAP程序(第一部分代碼)區域不會被意外地破壞。

下面重點介紹這兩個程序設計要點。

BootLoader程序

keil軟件程序存儲區正常設置如下





IAP程序主要做跳轉,主循環如下


#define IOT_APP_Addr       0x8010000

int main(void)
{
        IO_config();
        usart_config();
        Delay_ms(1000);
        Spi_Init();
        iap_load_app(IOT_APP_Addr);
        while(1)
        {

        }
}
跳轉函數如下,其中0x8010000是應用程序的起始地址。

void iap_load_app(u32 appxaddr)
{
        if((appxaddr&0x8FC0000)==0x8000000)        
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);               
                MSR_MSP(*(vu32*)appxaddr);                                       
                jump2app();                                                                        
        }
}
user application程序要設置程序的起始地址,與IAP程序里的起始地址要一致,如下圖





程序里要設置中斷向量表的地址偏移量

int main(void)
{
        NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x10000);


... ...
燒錄程序時先燒錄BootLoader程序,再燒入user application程序即可實現程序的固件升級

這是BootLoader程序

————————————————
更多精彩內容關注我的博客
https://blog.csdn.net/gd1984812/article/details/101060127
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:142699 發表于 2020-4-22 11:07 | 只看該作者
樓主能分享一下代碼么,目前卡在空間分配上了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区亚洲 | 自拍视频一区二区三区 | 成人国产一区二区三区精品麻豆 | 97超碰人人| 国产精品视频久久久 | 日韩视频精品在线 | 天天干夜夜操 | 亚洲电影一级片 | 欧美日韩一区二区三区不卡视频 | 国产精品美女久久久av超清 | 欧美在线观看黄色 | 日本aa毛片a级毛片免费观看 | 国产免费一区二区 | 国产日产精品一区二区三区四区 | 国产精品视频久久久久 | 久久久精品 | 成人av免费在线观看 | 91精品国产色综合久久 | 国产最好的av国产大片 | 天天搞夜夜操 | 国产一区二区三区在线 | 亚洲人精品午夜 | 欧美在线视频网 | 国产精品福利网 | 午夜在线影院 | 日韩久久成人 | 天天操妹子| 中文字幕一区在线观看视频 | 做a网站| 亚洲精品一级 | 欧美激情视频一区二区三区免费 | 一区二区三区四区在线 | 亚洲美女视频 | 亚洲精品乱码久久久久v最新版 | 成人性视频免费网站 | 99精品视频一区二区三区 | 久久久一二三 | 欧美亚洲另类丝袜综合网动图 | 一区二区三区四区在线 | 精品不卡 | 欧美成人精品 |