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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2373|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32的IAP方案

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
最近用到了 STM32的IAP方案 找到的一些資料,分享給有用到的人~

  IAP,全稱是“In-Application Programming”,中文解釋為“在程序中編程”。IAP是一種對通過微控制器的對外接口(如USART,IIC,CAN,USB,以太網(wǎng)接口甚至是無線射頻通道)對正在運(yùn)行程序的微控制器進(jìn)行內(nèi)部程序的更新的技術(shù)(注意這完全有別于ICP或者ISP技術(shù))。ICP(In-Circuit Programming)技術(shù)即通過在線仿真器對單片機(jī)進(jìn)行程序燒寫,而ISP技術(shù)則是通過單片機(jī)內(nèi)置的bootloader程序引導(dǎo)的燒寫技術(shù)。無論是ICP技術(shù)還是ISP技術(shù),都需要有機(jī)械性的操作如連接下載線,設(shè)置跳線帽等。若產(chǎn)品的電路板已經(jīng)層層密封在外殼中,要對其進(jìn)行程序更新無疑困難重重,若產(chǎn)品安裝于狹窄空間等難以觸及的地方,更是一場災(zāi)難。但若進(jìn)引入了IAP技術(shù),則完全可以避免上述尷尬情況,而且若使用遠(yuǎn)距離或無線的數(shù)據(jù)傳輸方案,甚至可以實(shí)現(xiàn)遠(yuǎn)程編程和無線編程。這絕對是ICP或ISP技術(shù)無法做到的。某種微控制器支持IAP技術(shù)的首要前提是其必須是基于可重復(fù)編程閃存的微控制器。STM32微控制器帶有可編程的內(nèi)置閃存,同時(shí)STM32擁有在數(shù)量上和種類上都非常豐富的外設(shè)通信接口,因此在STM32上實(shí)現(xiàn)IAP技術(shù)是完全可行的。
  實(shí)現(xiàn)IAP技術(shù)的核心是一段預(yù)先燒寫在單片機(jī)內(nèi)部的IAP程序。這段程序主要負(fù)責(zé)與外部的上位機(jī)軟件進(jìn)行握手同步,然后將通過外設(shè)通信接口將來自于上位機(jī)軟件的程序數(shù)據(jù)接收后寫入單片機(jī)內(nèi)部指定的閃存區(qū)域,然后再跳轉(zhuǎn)執(zhí)行新寫入的程序,最終就達(dá)到了程序更新的目的。
在STM32微控制器上實(shí)現(xiàn)IAP程序之前首先要回顧一下STM32的內(nèi)部閃存組織架構(gòu)和其啟動(dòng)過程。STM32的內(nèi)部閃存地址起始于0x8000000,一般情況下,程序文件就從此地址開始寫入。此外STM32是基于Cortex-M3內(nèi)核的微控制器,其內(nèi)部通過一張“中斷向量表”來響應(yīng)中斷,程序啟動(dòng)后,將首先從“中斷向量表”取出復(fù)位中斷向量執(zhí)行復(fù)位中斷程序完成啟動(dòng)。而這張“中斷向量表”的起始地址是0x8000004,當(dāng)中斷來臨,STM32的內(nèi)部硬件機(jī)制亦會(huì)自動(dòng)將PC指針定位到“中斷向量表”處,并根據(jù)中斷源取出對應(yīng)的中斷向量執(zhí)行中斷服務(wù)程序。最后還需要知道關(guān)鍵的一點(diǎn),通過修改STM32工程的鏈接腳本可以修改程序文件寫入閃存的起始地址。
    在STM32微控制器上實(shí)現(xiàn)IAP方案,除了常規(guī)的串口接收數(shù)據(jù)以及閃存數(shù)據(jù)寫入等常規(guī)操作外,還需注意STM32的啟動(dòng)過程和中斷響應(yīng)方式。圖1顯示了STM32常規(guī)的運(yùn)行流程。

對左圖解讀如下:
1、 STM32復(fù)位后,會(huì)從地址為0x8000004處取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行復(fù)位中斷服務(wù)程序,如圖1中標(biāo)號○1所示。
2、 復(fù)位中斷服務(wù)程序執(zhí)行的最終結(jié)果是跳轉(zhuǎn)至C程序的main函數(shù),如圖1中標(biāo)號○2所示,而main函數(shù)應(yīng)該是一個(gè)死循環(huán),是一個(gè)永不返回的函數(shù)。
3、 在main函數(shù)執(zhí)行的過程中,發(fā)生了一個(gè)中斷請求,此時(shí)STM32的硬件機(jī)制會(huì)將PC指針強(qiáng)制指回中斷向量表處,如圖1中標(biāo)號○3所示。
4、 根據(jù)中斷源進(jìn)入相應(yīng)的中斷服務(wù)程序,如圖1中標(biāo)號○5所示。
5、 中斷服務(wù)程序執(zhí)行完畢后,程序再度返回至main函數(shù)中執(zhí)行,如圖1中標(biāo)號○6所示。
若在STM32中加入了IAP程序,則情況會(huì)如圖2所示。


對圖2的解讀如下:
1、 STM32復(fù)位后,從地址為0x8000004處取出復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至IAP程序的main函數(shù),如圖中標(biāo)號○1、○2所示。這個(gè)過程和上圖相應(yīng)部分是一致的。
2、 執(zhí)行完IAP過程后(STM32內(nèi)部多出了新寫入的程序,圖中以灰色底紋方格表示,地址始于0x8000004+N+M)跳轉(zhuǎn)至新寫入程序的復(fù)位向量表,取出新程序的復(fù)位中斷向量的地址,并跳轉(zhuǎn)執(zhí)行新程序的復(fù)位中斷服務(wù)程序,隨后跳轉(zhuǎn)至新程序的main函數(shù),其過程如圖2的標(biāo)號○3所示。新程序的main函數(shù)應(yīng)該也具有永不返回的特性。同時(shí)應(yīng)該注意在STM32的內(nèi)部存儲(chǔ)空間在不同的位置上出現(xiàn)了2個(gè)中斷向量表。
3、 在新程序main函數(shù)執(zhí)行的過程中,一個(gè)中斷請求來臨,PC指針仍會(huì)回轉(zhuǎn)至地址為0x8000004中斷向量表處,而并不是新程序的中斷向量表,如圖中標(biāo)號○5所示。注意到這是由STM32的硬件機(jī)制決定的。
4、 根據(jù)中斷源跳轉(zhuǎn)至對應(yīng)的中斷服務(wù),如圖中標(biāo)號○6所示。注意此時(shí)是跳轉(zhuǎn)至了新程序的中斷服務(wù)程序中。
5、 中斷服務(wù)執(zhí)行完畢后,返回main函數(shù)。如圖中標(biāo)號○8所示。
從上述兩個(gè)過程的分析可以得知,對將使用IAP過程寫入的程序要滿足2個(gè)要求:
1、新程序必須從IAP程序之后的某個(gè)偏移量為x的地址開始;
2、必須將新程序的中斷向量表相應(yīng)的移動(dòng),移動(dòng)的偏移量為x;
而設(shè)置程序起始位置的方法是(keil uvision4集成開發(fā)環(huán)境)在工程的“Option for Target….”界面中的“Target”頁里將“IROM”的“Start”列改為欲使程序起始的地方,如下圖中將程序起始位置設(shè)為0x8002000。


將中斷向量表移動(dòng)的方法是在程序中加入函數(shù):
void NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset);
其中參數(shù)NVIC_VectTab為中斷向量表起始位置,而參數(shù)Offset則為地址偏移量,如將中斷向量表移至0x8002000處,則應(yīng)調(diào)用該函數(shù)如下:
void NVIC_SetVectorTable(0x8000000, 0x2000);
同時(shí)有必要提醒讀者注意的是,此函數(shù)只會(huì)修改STM32程序中用于存儲(chǔ)中斷向量的結(jié)構(gòu)體變量,而不會(huì)實(shí)質(zhì)地改變中斷向量表在閃存中的物理位置,詳情請研究該程序原型。
有了以上準(zhǔn)備后就可以著手設(shè)計(jì)一個(gè)IAP方案了,如下:
1、STM32復(fù)位后,利用一個(gè)按鍵的狀態(tài)進(jìn)行同步,當(dāng)按鍵按下時(shí)表示將要進(jìn)行IAP過程;
2、IAP過程中,通過上位機(jī)軟件向STM32的USART1設(shè)備發(fā)送所要更新的程序文件,STM32接收到數(shù)據(jù)后轉(zhuǎn)而從0x8002000地址開始寫入收到的數(shù)據(jù);
3、STM32借助定時(shí)器來判斷數(shù)據(jù)是否完全接收,完全接收后IAP過程結(jié)束;
4、再次復(fù)位后,跳轉(zhuǎn)0x8002004地址開始運(yùn)行新寫入的程序;
最后提出幾點(diǎn)注意事項(xiàng):
1、具體實(shí)現(xiàn)的工程見附件;
2、利用IAP寫入的程序文件最好是.bin格式的文件,但不能是.hex格式的文件;
3、向STM32發(fā)送程序文件時(shí)盡量慢一些,因?yàn)镾TM32對FLASH的寫入速度往往跟不上通訊外設(shè)接口的速度;
4、建議在STM32和上位機(jī)之間設(shè)計(jì)一套握手機(jī)制和出錯(cuò)管理機(jī)制,這樣可以大幅提高IAP的成功率;
5、附件中的IAP工程具體運(yùn)行現(xiàn)象為,按著連接于GPIOA.0引腳上的按鍵后對STM32進(jìn)行復(fù)位操作,若連接于GPIOA.4引腳上的LED被點(diǎn)亮則表示進(jìn)入了IAP程序,等待從USART1接口傳入欲更新的程序文件。程序文件更新完畢后,LED被熄滅。此時(shí)再度對STM32進(jìn)行復(fù)位,就開始運(yùn)行新寫入的程序了。


完整的Word格式文檔51黑下載地址:
STM32的IAP方案.doc (216.5 KB, 下載次數(shù): 16)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:166068 發(fā)表于 2018-6-29 01:36 | 只看該作者
我說這也太坑了吧,轉(zhuǎn)的就轉(zhuǎn)的好了,把內(nèi)容粘貼到word內(nèi)再發(fā)個(gè)附件什么意思呢?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久a | 日韩一级免费电影 | 亚洲成在线观看 | 欧美一级免费看 | 国产亚洲成av人在线观看导航 | 午夜久久 | 亚洲一区视频在线 | 精久久久 | av官网在线 | 久久精品16 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 色婷婷一区二区三区四区 | 在线小视频 | 蜜桃精品视频在线 | 久久国产精品免费视频 | 黄网址在线观看 | 激情av| 成人福利片 | 看黄在线 | 久久精品小视频 | 成年人黄色免费视频 | 久久久久久亚洲精品 | 日韩欧美精品一区 | 日韩精品在线播放 | 国产黄色麻豆视频 | 久久青草av| 99精品一区二区三区 | 国产一区亚洲 | 国产精品一区在线 | 亚洲欧美视频一区 | 国产99精品 | 亚洲精品区| 91精品免费 | 韩国毛片一区二区三区 | a久久| 色综合视频| 亚洲伊人久久综合 | 久久久久国产精品 | 亚洲视频在线免费 | 国产午夜久久久 | 国产目拍亚洲精品99久久精品 |