在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

以STM8單片機為例,該如何實現Bootloader呢?

Q4MP_gh_c472c21 ? 來源:玩轉嵌入式 ? 作者:劉小舒 ? 2020-11-16 16:52 ? 次閱讀

這次出差是為了升級程序解決Bug,用戶已經將產品封裝起來,無法開蓋,只能使用CAN總線來更新程序,用Bootloader實現。其實就是通過上位機把.bin/hex文件以CAN通訊的方式發送給單片機并存儲在規定的Flash中。這個過程與手機端更新APP類似。

STM8單片機為例,該如何實現Bootloader呢?今天和大家分享一下。

01

什么是Bootloader

Bootloader是一段用于更新自身應用軟件并獨立運行的代碼,常被用于升級產品和修復產品bug。STM8單片機如果要下載hex文件的話需要通過STVP和STLINK來實現,單片機的引腳SWIM就是下載接口。如果產品在用戶端被封裝好了,無法通過SWIM來下載該怎么辦呢?就使用Bootloader,STM支持CAN和UART實現Bootloader。就是通過CAN通信或者UART通信將數據存放在STM8的Flash上。

02

劃分Flash區間

STM8的中斷向量跳轉地址是固定的,會跳轉到0x8000對應中斷的偏移地址,所以會把Bootloader存放在0x8000開始的空間內,比如給Bootloader代碼所劃分的空間為4k,那么空間起始地址為:0x8000-0x8FFF;那么應用代碼的起始地址就可以從0x9000開始。

03

修改中斷向量表

STM8的中斷向量表通過一段特定的代碼來實現,并需要根據前文提到的空間劃分來修改。STM8的應用程序起始地址是0x8400,默認的向量表如下代碼所示。

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82008404,0x82008408,0x8200840c,0x82008410,0x82008414,0x82008418,0x8200841c,0x82008420,0x82008424,0x82008428,0x8200842c,0x82008430,0x82008434,0x82008438,0x8200843c,0x82008440,0x82008444,0x82008448,0x8200844c,0x82008450,0x82008454,0x82008458,0x8200845c,0x82008460,0x82008464,0x82008468,0x8200846c,0x82008470,0x82008474,0x82008478,0x8200847c,};前文已經將應用程序的起始地址修改為0x9000,所以,向量表的的修改方法為:除了第一個元素為,其余的元素將8改為9,修改完后代碼如下:

__rootconstlongreintvec[]@".intvec"={0x82008080,0x82009404,0x82009408,0x8200940c,0x82009010,0x82009014,0x82009018,0x8200901c,0x82009020,0x82009024,0x82009028,0x8200902c,0x82009030,0x82009034,0x82009038,0x8200903c,0x82009040,0x82009044,0x82009048,0x8200904c,0x82009050,0x82009054,0x82009058,0x8200905c,0x82009060,0x82009064,0x82009068,0x8200906c,0x82009070,0x82009074,0x82009078,0x8200907c,};

04

修改ICF文件

ICF文件存放在編程環境的安裝目錄下,每個型號/系列的單片機都會對應一個ICF 文件,需要修改一下ICF文件,這里需要根據flash空間的劃分來修改,前面將Bootloader的終止地址設置為0x9FFF,所以修改如下:

defineregionNearFuncCode=[from0x8000to0x8FFF];defineblockINTVECwithsize=0x80{rosection.intvec};place at start of NearFuncCode { block INTVEC };

05

跳轉命令

所謂跳轉,就是在應用程序中跳轉到Boot中去升級;升級完成后需要跳轉到應用程序中,所跳轉的起始就是起始地址。Bootloader跳轉到應用程序的代碼如下,

asm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$9000");應用程序跳轉到Bootloader中的代碼如下

sm("LDW X, SP ");asm("LDA,$FF");asm("LDXL,A");asm("LDWSP,X");asm("JPF$8000");

06

編寫交互代碼

以上設置好之后,就可以編寫交互代碼了,所以交互代碼其實就是一套協議,規定了應用程序如何跳轉到Boot,在Boot中如何處理和存儲數據,這需要上位機的支持。如果只是用于自家的產品,就可以自己定義協議。也可以使用標準的協議,比如汽車行業中的UDS(統一診斷服務)。 Bootloader實現之后,就可以使用CAN/UART來實現產品固件的升級了。這就是Bootloader的關鍵內容,本文你學會了嗎?留言討論一下吧。

責任編輯:lq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6043

    文章

    44621

    瀏覽量

    638614
  • CAN
    CAN
    +關注

    關注

    57

    文章

    2770

    瀏覽量

    464390
  • STM8
    +關注

    關注

    18

    文章

    392

    瀏覽量

    56948

原文標題:單片機的Bootloader,可以實現用戶輕松升級程序

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    STM8S003F的作用是什么,如何編寫單片機程序去控制?

    下STM8S003F的作用是什么,軟件控制那幾個部分,哪些是不需要軟件控制的,如何編寫單片機程序去控制? 如何實現STM8
    發表于 11-05 07:46

    性價比高的8單片機有哪些?

    ,尤其適用于需要Motorola MC68HC11兼容性的場合。此外,華芯微還提供了NuMicro系列單片機,其中包含一些基于8051內核的8位產品,用戶提供了更多選擇。 5. 其他高性價比選擇
    發表于 09-27 14:27

    單片機SPI通信實現

    在深入探討單片機(如基于STM32、AVR、PIC等)如何通過SPI(Serial Peripheral Interface)進行通信之前,我們先概述SPI通信的基本原理,隨后STM32微控制器
    的頭像 發表于 09-09 17:00 ?759次閱讀

    藍牙模塊如何實現單片機和手機端數據互傳

    藍牙模塊實現單片機和手機端數據互傳的過程可以分為以下幾個步驟: 硬件準備 : 確保你有一個支持藍牙通信的單片機開發板,如Arduino、Raspberry Pi等。 準備一個兼容的藍牙模塊,如
    的頭像 發表于 07-24 17:59 ?2894次閱讀
    藍牙模塊如何<b class='flag-5'>實現</b><b class='flag-5'>單片機</b>和手機端數據互傳

    通過單片機實現模式的轉換和控制亮度,這種怎么設計led環驅動電路

    大佬,我想問一下不同種的光源如紫外,紅外,以及偏振光源等都集成到一個led環,通過單片機實現模式的轉換和控制亮度,這種怎么設計led環驅動電路
    發表于 07-02 19:09

    STM8S如何用VC++編寫上位程序?

    的上位的工程源碼的還請不吝賜教啊。 2:為了能讓IAP部分的代碼也能在IAP過程中升級,需要將BootLoader部分的代碼加載到RAM中運行。在IAR編譯器中如何實現?有沒有做過
    發表于 05-13 06:44

    請問stm8可以長期用5V供電嗎?

    項目需求使用STM8,我看官方演講用L7805穩壓5V,給單片機供電。 我有查詢了ST的頁面 “2.95 to 5.5 V operating voltage” 的確,用5V供電沒問題,但是我還想問一下長期工作時用幾伏供電更合適一些
    發表于 05-08 07:27

    請問stm8的空腳不用如何處理?

    我現在沒用的空腳沒有設置輸入輸出模式也沒外接上拉電阻或電容,每當我去觸碰這個空腳時都會引起單片機復位。加了個104就好了,但是文檔上說要接上下拉電阻,我試了管腳也會復位。那究竟stm8不用的管腳如何處理
    發表于 05-08 06:00

    STM8單片機的IO口是否可實現三態:輸出高電平、低電平、高阻態?

    大家好: 請教一下大家,STM8單片機的IO口是否可實現三態:輸出高電平、低電平、高阻態。
    發表于 05-07 07:07

    STM8單片機手一摸單片機就死機是怎么回事?

    如題,STM8單片機 用手指一摸單片機就死機了,有時還沒接觸到就死機了,關鍵我用的都是汽車級的STM8A系列單片機了怎么抗干擾性怎么還這么差
    發表于 05-07 06:38

    STM8如何實現批量燒錄?

    如題,是否可以實現? 如何實現STM8 通過SWIM(ICP)是否能夠實現通訊?
    發表于 04-30 06:49

    stm8系列單片機在IAR環境下怎樣配置G口?

    stm8系列單片機,在IAR環境下,怎樣配置G口? 例如:不小心把外斷的紅外接收或按鍵的引腳接到G口了,比如STM8S105或207(48腳封裝的),P35、P36腳(PG0、PG1),但IAR的環境里沒有G口的設置,怎么辦?
    發表于 04-23 07:02

    STM8單片機設計時鐘要注意什么?

    剛開始學習STM8單片機,想利用該系列單片機實踐設計一款LED數碼管時鐘。請求大家說明一些注意事項(事先查閱了一些資料;方案確認的元器件有6位數碼管和TM1620驅動芯
    發表于 04-18 08:23

    如何系統、科學地自學單片機

    很多初學者都會面臨這個問題,我想學習單片機、我也想學好單片機、我也想系統地學習單片機,但是單片機涉及到的學科多且雜根本不是三天兩天就能學完的,很多人都逃脫不了從入門到放棄的怪圈?那么我
    的頭像 發表于 03-28 08:03 ?1199次閱讀
    如何系統、科學地自學<b class='flag-5'>單片機</b>?

    8單片機為何不會過時?

    對于8單片機來說,由于其主要處理8位數據,所以其“字”的長度可能也是8位,但這并不是絕對的,還需要具體看單片機的設計。
    的頭像 發表于 03-20 16:29 ?1972次閱讀
    主站蜘蛛池模板: 一级特黄性生活大片免费观看 | 一区二区三区四区精品 | 来啊mm影院亚洲mm影院 | 性感美女福利视频 | 人人看人人鲁狠狠高清 | 亚洲成人免费 | 日本黄色绿像 | 色偷偷免费视频 | 大喷水吹潮magnet | 99久久精品免费看国产 | 男男污肉高h坐便器调教 | 新天堂网 | 欧洲不卡一卡2卡三卡4卡网站 | 欧美在线视频免费播放 | 久久久久久久久久免免费精品 | 能看毛片的网址 | 久操青青| 香蕉久久夜色精品国产2020 | 久99热| 黄色三级视频网站 | 国产精品1区2区3区 国产精品1区2区3区在线播放 | 欧美骚| 日韩在线看片 | 色老板在线视频一区二区 | 伊人久操 | 亚洲激情视频网 | 亚洲看黄 | 香蕉视频色版在线观看 | 特黄三级 | 日本一区二区免费在线观看 | 老头天天吃我奶躁我的动图 | 成人欧美一区二区三区的电影 | 国产一卡2卡3卡四卡精品网站 | bt天堂资源种子在线8 | 欧美 变态 另类 人妖班 | 最刺激黄a大片免费网站 | 狠狠做深爱婷婷综合一区 | 免费在线黄视频 | 一级毛片一级毛片一级毛片aa | 91极品反差婊在线观看 | 色偷偷免费 |