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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32的IAP方案

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

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

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


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


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


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


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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品免费视频 | 国产91亚洲精品 | 青娱乐自拍 | 欧美男人天堂 | 精品久久久久一区二区国产 | 男女爱爱福利视频 | 中日字幕大片在线播放 | av中文在线 | 成人国产精品入口免费视频 | 一区二区视频在线 | 午夜视频在线播放 | a在线免费观看 | 久久国产成人午夜av影院武则天 | 嫩草视频在线免费观看 | 国产美女在线免费观看 | 国产精品久久国产精品99 gif | 国产精品亚洲成在人线 | 激情一区二区三区 | 国产精品综合色区在线观看 | 亚洲精选久久 | 自拍偷拍亚洲欧美 | 久草新视频 | 三级黄色片在线观看 | 久久久久久影院 | 日日干天天操 | a免费在线 | 久久久久午夜 | 一区二区三区免费 | 久久成人一区 | 成人午夜在线 | 午夜免费网站 | 成人精品一区二区三区中文字幕 | 特a毛片 | 日韩在线观看中文字幕 | 亚洲精品成人在线 | 成av在线| 国产免费播放视频 | 一区二区在线 | 成人在线观看免费爱爱 | 中文字幕乱码一区二区三区 | 日本久久网站 |