国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

    關注

    6076

    文章

    45495

    瀏覽量

    670357
  • CAN
    CAN
    +關注

    關注

    59

    文章

    3067

    瀏覽量

    472748
  • STM8
    +關注

    關注

    18

    文章

    393

    瀏覽量

    58761

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    單片機里的程序運行方式

    我們想要理解單片機是如何運行程序的,我們首先需要了解單片機的組成,我們這里80C51單片機
    發表于 01-16 06:57

    單片機的入門準備

    、修改例程,學習板載體,自己新建編程工程,用自己的編程思想讓外設電路實現想要的功能,程序是靈活的,每個人都有不同的編程思想,多試幾種方法,提高程序的執行效率,鍛煉自己的編程能力; 單片機
    發表于 12-22 07:39

    MCU單片機CH569實現USB3.0超高速U盤與藍牙加密應用

    在嵌入式系統設計中,MCU單片機的性能直接決定了終端產品的功能高度。英尚微電子代理的沁恒CH569,這款MCU單片機憑借其高度集成的設
    的頭像 發表于 12-15 15:23 ?446次閱讀

    浮思特 | 電子溫度計單片機如何選型?ABOV單片機提供幾點很關鍵!

    一個優秀的電子溫度計,其核心往往在于內部單片機(MCU)的性能與匹配度。如何選擇一款合適的單片機,實現精準、穩定、低功耗的溫度測量與交互,是產品開發中的重要課題。本文將從技術維度,
    的頭像 發表于 12-15 09:43 ?466次閱讀
    浮思特 | 電子溫度計<b class='flag-5'>單片機</b>如何選型?ABOV<b class='flag-5'>單片機</b>提供幾點很關鍵!

    單片機位數的思考(8位、16位、32位)

    8位、16位、32位是指單片機的“字長”,也就是一次運算中參與運算的數據長度,這個位是指二進制位。8
    發表于 11-21 08:31

    Bootloader固件升級的步驟

    一、Bootloader 概念及用處 1、BootLoader 是一段引導式程序,就是單片機啟動時候運行的一段小程序,這段程序負責單片機固件的更新,也就是
    發表于 11-19 07:41

    浮思特 | 如何通過現代(ABOV)8單片機實現智能家居與工業控制的升級

    8單片機。作為現代(ABOV)的合作代理商,我們(浮思特科技)深知這些單片機智能家居和工業應用帶來的卓越價值,致力于將這類高性價比方案推向市場,
    的頭像 發表于 09-09 10:07 ?844次閱讀
    浮思特 | 如何通過現代(ABOV)<b class='flag-5'>8</b>位<b class='flag-5'>單片機</b><b class='flag-5'>實現</b>智能家居與工業控制的升級

    單片機采用什么電流控制

    單片機作為電子系統的控制核心,其電流控制涉及自身工作電流管理與外部設備電流驅動兩個層面。由于單片機內部電路的特性,其自身工作電流較小,而控制外部設備時需通過特定電路實現電流放大與調節,
    的頭像 發表于 07-30 10:07 ?739次閱讀

    單片機怎么驅動電機?

    在各類自動化設備和智能裝置中,電機是重要的執行部件,而單片機作為控制核心,需要通過特定的方式驅動電機運轉。單片機驅動電機并非直接連接即可,而是要根據電機類型和功率,搭配合適的驅動電路,才能實現穩定
    的頭像 發表于 07-25 09:31 ?904次閱讀

    STM8 C語言精品編程100

    今天來分享一下關于STM8單片機的相關資料文檔,感興趣的網友可以自行下載。單片機是芯片開發的基礎,相信從中會獲得您意想不到的知識。 獲取完整文檔資料可下載附件哦?。。?! 如果內容有幫助可以關注、點贊、評論支持一下哦~
    發表于 07-17 16:08

    你們還在用8單片機嗎?

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

    基于Keil開發瑞薩RA8單片機

    這兩年單片機行業也開始卷起來了,各大廠商紛紛推出各種高性能的單片機。
    的頭像 發表于 05-07 10:33 ?1469次閱讀
    基于Keil開發瑞薩RA<b class='flag-5'>8</b><b class='flag-5'>單片機</b>

    STM32F103x8 STM32F103xB單片機數據手冊

    STM32F103x8STM32F103xB單片機數據手冊
    發表于 04-14 14:55 ?8次下載

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

    本文結合瑞薩e2 studio工具,以及CPKCOR_RA8D1B評估板,給大家講述瑞薩RA8D1單片機IO中斷配置實現的方法。
    的頭像 發表于 04-09 15:05 ?1843次閱讀
    瑞薩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 ?1866次閱讀
    瑞薩Cortext-M85內核RA<b class='flag-5'>8</b>系列<b class='flag-5'>單片機</b>的串口輸出<b class='flag-5'>實現</b>方法