女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

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

GReq_mcu168 ? 來源:玩轉嵌入式 ? 作者:玩轉嵌入式 ? 2021-04-12 09:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

238b6f94-9ab6-11eb-8b86-12bb97331649.jpg

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,默認的向量表如下代碼所示:

__root const long reintvec[]@“.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,修改完后代碼如下:

__root const long reintvec[]@“.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,所以修改如下:

define region NearFuncCode = [from 0x8000 to 0x8FFF];

define block INTVEC with size = 0x80 { ro section .intvec };

place at start of NearFuncCode { block INTVEC };

23b4c448-9ab6-11eb-8b86-12bb97331649.jpg

05

跳轉命令

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

asm(“LDW X, SP ”);

asm(“LD A, $FF”);

asm(“LD XL, A ”);

asm(“LDW SP, X ”);

asm(“JPF $9000”);

應用程序跳轉到Bootloader中的代碼如下

sm(“LDW X, SP ”);

asm(“LD A, $FF”);

asm(“LD XL, A ”);

asm(“LDW SP, X ”);

asm(“JPF $8000”);

06

編寫交互代碼

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

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

文章出處:【微信公眾號:玩轉單片機】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

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

    關注

    6067

    文章

    44962

    瀏覽量

    648963
  • bootloader
    +關注

    關注

    2

    文章

    238

    瀏覽量

    46567

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

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    你們還在用8單片機嗎?

    最近在公司接手了個挺讓人撓頭的活兒 —— 給一塊老板子換 MCU。說起來這板子還是近五年的產品,用的 STM8 單片機,功能掰著手指頭都能數過來,估摸著稍微加點復雜度這 8就扛不
    的頭像 發表于 05-15 11:04 ?310次閱讀
    你們還在用<b class='flag-5'>8</b>位<b class='flag-5'>單片機</b>嗎?

    瑞薩RA8D1單片機IO中斷配置實現方法

    本文結合瑞薩e2 studio工具,以及CPKCOR_RA8D1B評估板,給大家講述瑞薩RA8D1單片機IO中斷配置實現的方法。
    的頭像 發表于 04-09 15:05 ?916次閱讀
    瑞薩RA<b class='flag-5'>8</b>D1<b class='flag-5'>單片機</b>IO中斷配置<b class='flag-5'>實現</b>方法

    瑞薩Cortext-M85內核RA8系列單片機的串口輸出實現方法

    串口是最常見的通信方式之一,也是單片機調試最常見的通信接口,也是現在的單片機必備的通信接口,目前(2024-05)最新、最強的Cortext-M85內核的RA8系列單片機也不例外。
    的頭像 發表于 03-21 09:58 ?980次閱讀
    瑞薩Cortext-M85內核RA<b class='flag-5'>8</b>系列<b class='flag-5'>單片機</b>的串口輸出<b class='flag-5'>實現</b>方法

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

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

    基于51單片機的手動數字時鐘

    具體實現功能由51單片機+8位共陰數碼管+獨立按鍵構成。具體功能:(1)利用數碼管顯示時分秒,顯示格式“時-分-秒”;(2)利用6個按鍵控制時、分、秒,設定好后自動開始時鐘顯示;(3
    的頭像 發表于 10-22 14:12 ?589次閱讀
    基于51<b class='flag-5'>單片機</b>的手動數字時鐘

    基于51單片機的遙控開關仿真(雙機通信)

    單片機的遙控開關仿真(雙機通信)-仿真視頻設計介紹51單片機簡介51單片是一種低功耗、高性能CMOS-8位微控制器,擁有靈巧的8位CPU和可
    的頭像 發表于 10-22 14:12 ?787次閱讀
    基于51<b class='flag-5'>單片機</b>的遙控開關仿真(雙機通信)

    如何實現51單片機與PC的串行通信

    51單片機與PC的串行通信是一種常見的通信方式,它允許單片機通過串行接口與PC進行數據交換。這種通信方式在嵌入式系統、工業控制、物聯網等領域有著廣泛的應用。以下是
    的頭像 發表于 10-21 11:35 ?2587次閱讀

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

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

    低功耗8單片機:技術特性與應用前景!

    不必要的能耗。 優化指令集:通過高效的指令集設計,減少執行任務所需的時鐘周期,從而降低能耗。 2. 8位數據總線 8單片機的數據總線寬度8
    發表于 09-26 14:09

    8單片機,32位單片機編程和應用優勢

    的微型計算機系統,英銳恩科技的電子工程師小編老唐將從靈活性、成本效益、開發效率、應用廣泛性等方面進行詳細闡述8單片機,32位單片機編程和應用優勢。 一、靈活性高: 單片機編程的最大
    發表于 09-26 11:45

    MCU前沿市場趨勢:8單片機和32位單片機

    盡管32位單片機(MCU)在單片機開發中的普及度持續上升,但最近的MCU市場趨勢顯示8單片機的復合增長率接近其32位單片機的復合增長率。
    發表于 09-24 17:47

    8單片機為何不會被高端單片機取代?

    )應用:8單片機應用廣泛,包括汽車電子、家用電器、醫療設備、工業自動化和消費電子產品。它們通常是低成本、低功耗和實時控制應用的首選。 8單片機為何不會被高端
    發表于 09-24 16:51

    8單片機,32位單片機就找英銳恩!

    深圳市英銳恩科技有限公司創立于 2008 年,是一家從事單片機及模擬器件電路芯片應用、設計研發、銷售一體的國家高新技術半導體企業。 英銳恩科技公司憑著自身在半導體電子行業MCU(8單片機、32位
    的頭像 發表于 09-23 10:32 ?691次閱讀

    單片機SPI通信實現

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

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

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