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

分享

STM32固件IAP程序實現

 新用戶0118F7lQ 2021-03-26

1.寫在前面

IAP全稱是In Application ProgrammingIAP是用戶自己的程序在運行過程中對User Flash的部分區(qū)域進行燒寫,目的是為了在產品發(fā)布后可以方便地通過預留的通信口對產品中的固件程序進行更新升級。

2.系統(tǒng)BootLoader

對于STM32來說,芯片出廠時已經預置了一段Bootloader,但是啟動Bootloader需要設置單片機的BOOT引腳:BOOT1=0BOOT0=1,并復位才能進入系統(tǒng)Bootloader。BOOT引腳設置可通過硬件來實現自動設置和復位,從而利用系統(tǒng)Bootloader實現IAP。電路圖如下:

圖片

電路比較簡單就不詳細分析了。程序升級需要配合專用的軟件MCUISP。升級時MCUISP軟件會控制DTR引腳和RTS引腳BOOT0引腳拉高,并實現單片機復位,從而進入系統(tǒng)Bootloader。之后可以通過USB轉串口程序進行升級。

圖片

3.自己編寫BootLoader

系統(tǒng)Bootloader只能通過特定的接口對程序進行升級增加額外的硬件設計,有時候并不適用。這時候就需要自己編寫B(tài)ootloader程序實現IAP。

實現IAP需要兩個程序:Bootloader程序和應用程序系統(tǒng)啟動后首先進入Bootloader程序,判斷是否需要升級如果不需要直接跳轉到應用程序運行;如果需要則通過指定的接口和協議接收數據并寫入到Flash中,實現應用升級。這種方式靈活很多,接口和協議都可以自定義,實現的關鍵是協議的設計和對Flash進行讀寫。這里以STM32F1系列單片機為例,采用串口1和通用的Ymodem協議進行介紹。

YModem協議

YModem協議是一個非常高效的文件傳輸協議每包數據可以達到1024字節(jié)。YModem協議傳輸的完整的握手過程如下。這里就不進行詳細介紹了,用戶也可以采用自定義的協議,協議設計要主要發(fā)送、反饋和校驗,保證傳輸數據的正確性。

圖片

Bootloader程序

STM32Cube文件中提供了相關的例程,可以進行參考:

STM32Cube_FW_F1_V1.8.0\Projects\STM3210C_EVAL\Applications\IAP\IAP_Main

可以看到,程序初始化后通過檢測按鍵來判斷是否需要升級應用程序。

圖片

很多時候,用戶的硬件上可能沒有按鍵,則需要通過其它辦法來實現判斷。比如,需要升級時,應用程序在Flash某個位置寫入一個標志,然后復位進入BootLoader程序,BootLoader程序讀取該標志自動判斷是否需要升級應用程序。

應用程序

由于BootLoader程序存在,應用程序在Flash中的存儲位置也發(fā)生了改變,需要對程序中的中斷向量表偏移地址進行修改。首先在Bootloader程序中確定應用程序的起始地址:

圖片

應用程序工程修改程序編譯的地址

圖片

應用程序中system_stm32f10x.c文件,找到

圖片

修改

圖片

地址為偏移地址,不是絕對地址,與上面的地址有區(qū)別。

最后,MDK默認只生成HEX文件,要生成bin文件需要添加一條指令。在User選項卡中,勾選 'Run # 1',在后面輸入框寫入bin文件生成方式

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=Bin\@L.bin !L 

圖片

       上位機

上位機采用SecureCRT,該軟件支持YModem協議。打開軟件,連接串口,使電路板進入Bootloader程序根據菜單進行操作即可。

圖片

   采用其它方式和協議進行IAP升級的方法將在以后的文章中繼續(xù)介紹。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多