ESA2GJK1DH1K升級篇: 移植遠程更新程序到STM32F103RET6型號的單片機,基於(GPRS模塊AT指令TCP透傳方式)


 

 

 

 

前言

上節實現遠程更新是更新的STM32F103C8T6的單片機

GPRS網絡(Air202/SIM800)升級STM32: 測試STM32遠程乒乓升級,基於(GPRS模塊AT指令TCP透傳方式),定時訪問升級

這節將告訴大家如何移植到其它型號的單片機.

這一節以 STM32F103RET6 (512KB Flash 64KB RAM) 為例 

我使用我的這塊板子

  

 

 

 

 

  大家測試的時候可以按照下面的方式接到自己的GPRS模塊(Air202 / SIM800)

  單片機串口1 接到GPRS的AT指令配置串口

  單片機引腳PB2 接到GPRS的復位引腳

直接上菜

一,由於是移植的F103系列所以BootLoader程序咱可以不用移植,直接先拷貝過去

  

 

 

 

 

二,調整下Flash的分配

  2.1 自己自行調整哈,不過要注意最好設置成2的倍數因為512KB的Flash單片機都是以2KB作為一頁

 

  

 

 

 

 

 

 

三,其它大家應該知道的配置(以下根據自己使用的芯片選擇)

  

 

  

  

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 四,編譯下載,看下打印的信息

 

  user1ROMStart: 0x8004000  //用戶程序1開始的地址
  user1ROMSize : 0x3d000      //用戶程序1大小  249856字節 == 244KB

 

  user2ROMStart: 0x8041000  //用戶程序2開始的地址
  user2ROMSize : 0x3d000      //用戶程序2大小  249856字節 == 244KB

  

 

 

 

 

 

五,當前Flash分配

 

  

 

 

六,然后呢,還有一點,大家可以修改一個地方.這個是預留的,方便不同的用戶

  6.1 在BootLoader里面呢,其實每隔30S訪問一下升級,不過是受升級標志限制的

 

    

 

  6.2 通過上面的章節咱知道在BootLoader里面想操作升級,需要按下PB5等待3S指示燈快閃以后,寫入升級標志重啟,然后實現的升級

    如果運行在BootLoader里面超過30S其實就說明沒有用戶程序可執行(或者在升級中)

    我現在希望只要是運行在BootLoader里面超過30S,就主動訪問升級去吧!讓芯片主動一點

    所以做以下更改

 

       

 

 

 

 

 

七,最后呢!修改下訪問的http路徑

  

 

 

  

 

現在看用戶程序

一,假設用戶程序是什么也沒有的,我以下面的作為用戶程序的底層

  

 

 

  

 

 

 

 

 

二,打開那個程序,首先咱弄的簡潔點,這個程序就是控制PC13 500Ms亮  500Ms滅,其它功能就不做了

  咱遠程更新的時候只要發現PC13 500Ms亮 500Ms滅就說明更新進去了

  

 

三,拷貝BootLoader里面的stmflash 到咱當前工程

  

 

 

 

四,然后呢需要拷貝IAP文件(可以拷貝BootLoader里面的,也可以拷貝上幾節用戶程序里面的)

  建議拷貝上幾節用戶程序里面的IAP文件,因為上幾節用戶程序里面的IAP相對於BootLoader里面的做了很多裁剪(省內存)

  無所謂哈,拷貝哪個都一樣用,里面所有的操作都一樣,只不過BootLoader里面的IAP文件比較龐大點,占用內存大點

  

 

 

 

 

五,整理下工程

 

  

 

 

 

 

 

六,添加上處理升級部分

  6.1 獲取更新的狀態,為了簡潔了當我就直接拷貝源碼

    

 

 

 

  6.2 我是從原先用戶程序的這里拷貝的

 

 

    

 

 

 

 

  6.2 處理更新狀態

    這個處理狀態主要就是用來清零升級的狀態.

 

    

 

 

 

 

  6.3 源碼位置

 

    

 

 

 

 

現在用戶程序的處理升級部分的完了,接着配置下生成bin文件

  一,配置用戶程序1

    1.1,還記得上面打印的不

      

 

 

    1.2,配置用戶程序1

 

      

 

 

 

    1.3 配置下生成的用戶程序1的bin文件名字  我設置的是 Progect.bin

      

 

 

 

 

  二,配置用戶程序2

 

    2.1 拷貝出來一份用戶程序

 

      

 

 

      

 

 

    2.2 打開STM32F10xTemplate - 副本程序,首先把基本配置先檢查一遍

 

      

 

 

 

 

      \

 

 

      

 

 

 

 

    2.2 打開STM32F10xTemplate - 副本程序,配置生成bin文件

 

      

 

 

 

 

    2.3 配置下生成的用戶程序2的bin文件名字  我設置的是 Progect2.bin

 

      

 

測試

  一,拷貝記錄設備版本的updatainfo.txt文件,和用戶程序1文件(Progect.bin),用戶程序2文件(Progect2.bin)到服務器

    

 

 

    

 

 

    

 

 

  最終效果

 

    

 

 

  二,下載BootLoader程序

 

    

 

 

  三,等待大約30S

    3.1 我監控的數據  大家會發現執行了用戶程序,但是會每隔5S重啟

            

 

 

 

 

    3.2 其實忘了告訴大家一講事情了,BootLoader 里面的程序配置,對用戶程序同樣有效,所以用戶程序需要有喂狗程序

      可以自己加上喂狗程序以后,大家重新測試.

      

 

 

 

結語

  該程序代碼可以比較方便的移植到F103全系列的型號上.

  其實大家不必急於弄懂我的程序,因為這套升級程序我測試了很多很多次,做了很長時間,最終總結成現在的

  如果不明白流程,可以問我哈.

  其實無論再怎么變,本質改變不了,環形隊列緩存數據,寫入Flash,啟動運行.

  其它的皆是為了穩定性而做的配合性程序

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM