娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月04日(星期五)

2020年04月04日 | 關于自制 STM8 Bootloader

發布者:心若清泉 來源: eefocus關鍵字:自制  STM8  Bootloader 手機看文章 掃描二維碼
隨時隨地手機看文章

由于本人項目需要,要做STM8L052R8的bootloader,用于遠程程序升級功能,為了安全考慮,不使用ST自帶的bootloader,而是自制bootloader。


基本的功能是這樣的,首先程序運行在一個V1.0的版本上,且帶了BOOT,當程序收到一條命令后,程序跑入死循環,等待硬件看門狗復位;程序復位后進入bootload區,等待第二條命令的接收,接收到正確的數據幀后,bootloader開始擦除FLASH,并接收數據包,直到最后一個數據包接收完畢,通過指示燈以2HZ的頻率閃爍,指示升級完成。


第一步:boot區程序設計,首先修改link文件,

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

define region FarFuncCode = [from 0x8000 to 0xAFFF];

define region HugeFuncCode = [from 0x8000 to 0xAFFF];

place at start of NearFuncCode  { block INTVEC };


以上是link文件部分,可以看出flash地址為0x8000開始,結束于0x17FFF; 長度為64kB,中斷向量地址為0x8000,這樣,知道了這個我們就可以修改BOOT程序的link和主程序的link了,這里我把BOOTLOAD區劃分為8K,應用區為48K設置link文件如下,這樣把boot區和APP區分開,互不干擾,你也可以根據需要調整他們的大小。

          program:

          define region NearFuncCode = [from 0xB000 to 0xFFFF];

          define region FarFuncCode = [from 0xB000 to 0xFFFF]| [from 0x10000 to 0x17FFF];

          define region HugeFuncCode = [from 0xB000 to 0x17FFF];

          place at start of NearFuncCode  { block INTVEC };

         bootload:

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

          define region FarFuncCode =    [from 0x8000 to 0xAFFF];

          define region HugeFuncCode = [from 0x8000 to 0xAFFF];

          place at start of NearFuncCode  { block INTVEC };

 

像STM32這樣的芯片中斷向量地址可以任意定,所有boot區和APP區都可以使用中斷,且互不干擾,但是STM8的中斷向量表固定在0X8000地址,不能修改,所以BOOT區不能開中斷,否則會和APP區的中斷打架,但是APP區的一但開啟中斷后就會跳轉到0x8000地址,這樣就跳到了BOOT區,因此需要使用跳轉指令將中斷跳回到APP區,


__root const long reintvec[]@".intvec"=

{ 0x82008080,0x8200b004,0x8200b008,0x8200b00c, //當應用程序地址不是0xB000時則要相應改掉除第一個

        0x8200b010,0x8200b014,0x8200b018,0x8200b01c, //0x82008080以外的數值

        0x8200b020,0x8200b024,0x8200b028,0x8200b02c,

        0x8200b030,0x8200b034,0x8200b038,0x8200b03c,

        0x8200b040,0x8200b044,0x8200b048,0x8200b04c,

        0x8200b050,0x8200b054,0x8200b058,0x8200b05c,

        0x8200b060,0x8200b064,0x8200b068,0x8200b06c,

        0x8200b070,0x8200b074,0x8200b078,0x8200b07c,

}; 

 

這里大概的含義就是重定義STM8的中斷,STM8中斷向量重定義,至于這里為什么這樣寫,請網上自己去看,我也不是很清楚。

    

第二步:芯片上電后,從bootload start 跳轉到 program start


當我們上電時,我們往往不需要用到bootload ,但是程序起來就先跑到ROM的起始地址,因此需要做一個跳轉從bootload start 跳轉到 program start。設計如下


asm("LDW X,  SP ");

asm("LD  A,  $FF");

asm("LD  XL, A ");

asm("LDW SP, X ");

asm("JPF $B000");

 

這里我們用B000,表示上電以后BOOT區沒有接收到升級請求則直接跳轉到APP區,0XB000是我的APP的起始地址,你可以根據自己的要求定義。


第三步:在線擦寫flash

 

 void Boot_EraseChip(void)

{

  U16 usCnt;

  /* Define flash programming Time*/

  FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);

  Boot_UnLock();

  /*擦除FLASH*/

  LED_ALARM_H();

  LED_RUN_L();

  for(usCnt = USER_FLASE_ALL_OF_BLOCK;usCnt >0;usCnt-- )

  {

    HD_Clear_WDT();


    FLASH_EraseBlock(USER_FLASH_START_BLOCK+(usCnt-1), FLASH_MemType_Program);

    /* Wait until End of high voltage flag is set*/

    while (FLASH_GetFlagStatus(FLASH_FLAG_HVOFF) == RESET)

    {}

  }

  LED_ALARM_L();

  LED_RUN_H();

  Boot_Lock();

}


這個函數里面我的BOOT程序一旦接收到升級命令后,先將FLASH擦除,這里用到了一個庫函數,STM8 的lib 庫里面有stm8l15x_flash.h stm8l15x_flash.c

這個文件里面有一段注釋,如下所示,意思是要使用flash的擦寫,必須要在stm8l15x.h里面定義


#define RAM_EXECUTION  (1)  ,flash 擦寫的函數都是定義在ram地址中的,所以在這些函數前都有個in_ram


  * To enable execution from RAM you can either uncomment the following define

  * in the stm8l15x.h file or define it in your toolchain compiler preprocessor

  * - #define RAM_EXECUTION  (1) 


并且由于 stm8的庫對不同芯片處理不同,還需要定義你使用的芯片型號,這里我用的芯片是

STM8L052,因此使用的宏為 :


#define STM8L05X_HD_VL


這樣就可以調用擦寫函數去升級APP程序了,其他的工做就是在BOOT 區進行數據的收發等待,數據校驗等工做了,沒什么特別的東西。不管用什么芯片,只要是FLASH是分塊的,都可以做boot,去加載APP。

關鍵字:自制  STM8  Bootloader 引用地址:關于自制 STM8 Bootloader

上一篇:STM8使用自帶的bootloader
下一篇:STM8問題總結

推薦閱讀

菜鳥E.T.物流實驗室自主機器智能(AMI)資深算法專家表示,路測是末端配送機器人三級測試的最后挑戰,預計年內就將實現小G plus的商業化量產。最快5月商業化落地小G plus已經是更新迭代的第三個版本。2016年初,菜鳥E.T.物流實驗室就開始研發末端配送機器人,當年9月推出第一代小G;去年,又發布了比第一代尺寸更大的小G plus,并在阿里巴巴西溪園區投入...
由國內知名學者和產業人士共同發起的嵌入式系統聯誼會,成立和運作已經10年了。嵌入式系統聯誼會為中國嵌入式系統不同學科領域的專家學者、工程技術人員、市場和科技媒體人士提供學術和產業信息交流的環境,是增進個人友誼的公益性科技沙龍機構。嵌入式系統聯誼會技術沙龍是聯誼會繼主題討論會形式外的一個新的嘗試,更側重專業化、年輕化和實戰性。RISC-V...
一個突如其來的消息讓業界為之震驚,前中國半導體行業協會常務副理事長陳賢于今日凌晨4時腦梗不幸過世,享年75歲。業界大慟,正是斯人已乘黃鶴去,空留“賢”名在人間。為國內半導體業發展篳路藍縷回望陳老的一生,是為國內半導體業嘔心瀝血、不懈奮斗的一生,在國內半導體業發展的眾多關鍵節點都留下了陳賢前輩揮斥方遒的身影。陳老于1970年3月至1986...
撰文 | 李巖現場探測、精準定位、快速轉移、銷毀爆炸裝置……近日,一款具備多種功能的新型排爆機器人亮相第71集團軍某工化旅演練場,與官兵展開協同戰術作業。政知道(微信ID:upolitics)注意到,智能化機器人越來越多地開始進入軍隊和解放軍并肩作戰。只不過,從公開報道中可以看出,較小型的智能無人設備多被媒體稱為“機器人”,而大型設備則多被冠...

史海拾趣

問答坊 | AI 解惑

STM32 函數說明

很有用的STM32 開發函數說明…

查看全部問答∨

FPGA-SOPC開發快速教程.pdf

FPGA-SOPC開發快速教程.pdf…

查看全部問答∨

圖像處理與視頻編、解碼

CCD與CMOS圖像傳感器,你了解嗎? 圖像處理算法的硬件實現你試過嗎? 猶如洪水般滾滾而來的高速、高流量的視頻你怎么應付???…

查看全部問答∨

C語言學習集合

批量上傳傳不上來我就一個一個傳了 [ 本帖最后由 yuandayuan6999 于 2010-4-27 22:05 編輯 ]…

查看全部問答∨

第一個WINCE的項目,有兩個問題要請教大家

第一個WINCE的項目,有兩個問題要請教大家。 前提是,我只負責軟件部分。 1 分辨率問題 顯示屏幕尺寸是640*480,我做的程序要滿屏幕顯示。我在模擬器上通過GetClientWindow確定了窗口大小為640*480.而且我還通過MoveWindow,再次將窗口設置為0,0, ...…

查看全部問答∨

【求助】keil中使用lib文件中的問題

LIB_VER2.0.LIB(1): error C100: unprintable character 0x07 skipped LIB_VER2.0.LIB(1): error C141: syntax error near \',\' LIB_VER2.0.LIB(2): error C100: unprintable character 0xFD skipped LIB_VER2.0.LIB(3): error C129: missing \ ...…

查看全部問答∨

關于地址分配

西門子PLC,各模塊的地址是固定分配的,可是他的地址又不是連貫的(比如做組態時,兩塊相同的16路DI模塊分別插入兩個相鄰的SLOT  中,可是兩塊模塊之間的地址不連續。第一塊開始0,結束1,;第二塊開始4,結束5)。系統默認選項去掉后可以 ...…

查看全部問答∨

承接項目

由于現在工作比較清閑,想在此論壇可以找到類似兼職。說明:自己不是很懂,愿意跟從師傅,打雜跑腿,只要是有關DSP相關的工作都可以。 有意者請聯系:media.28@163.com 我會一直關注我的郵箱?!?

查看全部問答∨

MSP430學習小結:程序主體結構安排及低功耗-轉載

講解430的書現在也有很多了,不過大多數都是詳細說明底層硬件結構的,看了不免有些空洞和枯燥,我認為了解一個MCU的操作首先要對其基礎特性有所了解,然后再仔細研究各模塊的功能。   1.首先你要知道msp430的存儲器結構。典型微處理器的結構有兩 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 文化| 衡东县| 丹棱县| 邹平县| 积石山| 简阳市| 肃宁县| 兴化市| 颍上县| 漳州市| 祁门县| 依兰县| 海宁市| 漳平市| 庐江县| 叶城县| 靖远县| 彰化市| 舟曲县| 皋兰县| 墨脱县| 拉孜县| 麦盖提县| 筠连县| 周宁县| 霍林郭勒市| 武功县| 治县。| 凤台县| 兴隆县| 墨玉县| 建宁县| 武邑县| 蓝田县| 安陆市| 满城县| 米易县| 新余市| 日喀则市| 樟树市| 嘉义市|