国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【嵌入式開發(fā)學習】__扒一扒單片機串口IAP原理

這篇具有很好參考價值的文章主要介紹了【嵌入式開發(fā)學習】__扒一扒單片機串口IAP原理。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、什么是IAP?

二、串口IAP實驗

1. 實驗說明

2. 工程說明

IAP工程:

LED工程:

3. IAP源碼說明?

(1)主函數(shù):

(2)主菜單函數(shù)Main_Menu

(3)下載程序功能函數(shù)SerialDownload?

4、下載驗證

(1)下載IAP程序

?(2)通過IAP程序引導下載LED程序

(* ̄︶ ̄)創(chuàng)作不易!期待你們的?點贊、收藏和評論喔。?


一、什么是IAP?

IAP 是?In Application Programming 的首字母縮寫,IAP是用戶自己的程序在運行過程中對 User Flash 的部分區(qū)域進行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過預留的通信口對產(chǎn)品中的固件程序進行更新升級。

在重新編程過程中可以使用任意類型的通信協(xié)議,如 UART、I2SSPI?等。這篇筆記分享的是使用 UART方式IAP 。

二、串口IAP實驗

先理一理流程(本實驗是以?STM32F103ZET6 為例):

1. 實驗說明

做這個實驗需要準備兩個?keil 工程,一個工程用于編寫IAP程序,另一個工程用于編寫我們的應用程序(要實現(xiàn)某些功能的程序),這里我們以一個點燈程序為例。最終,兩份工程編譯出來的可執(zhí)行文件都需要燒寫到芯片的FLASH中。只不過需要燒寫到不同的地址,簡單的示意圖如下:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

這里使用的STM32型號STM32F103ZET6 ,其FLASH大小是512KB,0x08000000為其FLASH被映射的地址,程序被燒寫到的就是這個地址。此處,我們的IAP程序燒寫到這個地址,根據(jù)IAP程序的大小,我們在keil里可以設置合適的IAP結束地址。?

注意:在沒有IAP程序的情況下,0x08000000這個地址就是應用程序燒寫的地址。

2. 工程說明

本實驗用到的兩個工程可按照文末的方式獲取,其中IAP工程移植至ST官方例程。下面對兩個工程進行簡單的說明。

  • IAP工程:

(1)需要在?target 選項卡里設置我們IAP程序的 起始地址與大小 ,如:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

這里我們的IAP程序起始地址設為 0x08000000,大小設為 0x3000,即IAP所能用的FLASH空間為12KB。其中IAP所能占的占空間的大小可根據(jù)IAP的實際大小進行修改。

(2)需要修改程序中我們需要跳轉到的應用程序的地址(即IAP程序的結束地址):

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

  • LED工程:

(1)需要在?target?選項卡里設置我們LED程序的 起始地址與大小 ,如:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

這里我們的?LED?程序起地址設為?0x08003000 ,大小設為 0x10000 ,即LED所能用的FLASH空間為 64KB 。其中結束地址可根據(jù)LED應用程序的實際大小進行修改。

(2)生成對應的?.bin文件 。這需要在?User 選項卡里添加如下命令(即編譯后執(zhí)行的命令):

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

其中,fromelf.exe 是我們 keil安裝目錄 下的一個可執(zhí)行程序,可以把?.axf文件 轉換成?.bin文件 。要在keil中直接調(diào)用 fromelf 命令,必須要把?fromelf.exe?所在目錄添加到環(huán)境變量中。添加環(huán)境變量的方法如下(該方法來自于《【野火】零死角玩轉STM32—F429挑戰(zhàn)者V2.pdf》):

本文以 Win7系統(tǒng) 為例添加工具鏈的路徑到 PATH 環(huán)境變量,其它系統(tǒng)是類似的。

(1)右鍵電腦系統(tǒng)的?計算機圖標 ,在彈出的菜單中選擇?屬性 ,如圖:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

(2)在彈出的屬性頁面依次點擊?高級系統(tǒng)設置 -> 環(huán)境變量 ,在用戶變量一欄中找到名為?PATH?的變量,若沒有該變量,則新建一個。編輯?PATH變量 ,在它的變量值中輸入工具鏈的路徑,如本機的是D:\work\keil5\ARM\ARMCC\bin ,注意要使用分號;讓它與其它路徑分隔開,輸入完畢后依次點?確定 ,如圖:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

(3)打開 Windows 的命令行,點擊系統(tǒng)的?開始菜單 ,在搜索框輸入?cmd ,在搜索結果中點擊?cmd.exe 即可打開命令行,如圖:?

?應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

(4)在彈出的命令行窗口中輸入?fromelf 回車,若窗口打印出?formelf?的幫助說明,那么路徑正常,就可以開始后面的工作了;若提示?不是內(nèi)部名外部命令,也不是可運行的程序… 信息,說明路徑不對,請重新配置環(huán)境變量,并確認該工作目錄下有編譯工具鏈。

這個過程本質就是讓命令行通過“PATH”路徑找到?fromelf.exe 程序運行 。

學會配置?fromelf.exe ,也就學會配置了?MinGW 。MinGW是一個工具集,包含編譯C與C++的gcc、g++,使用它就可以在Windows命令行下編譯C程序。

3. IAP源碼說明?

(1)主函數(shù)

int main(void)
{
  FLASH_Unlock();	/* FLASH解鎖 */
  KEY_Init();		/* 按鍵初始化 */
  IAP_Init();		/* IAP初始化 */
	
  /* 按鍵按下則進入主菜單開始更新程序(注意:需要按下復位鍵的同時按下該按鍵觸發(fā)程序更新) */
  if (GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)  == 0x00)
  {
    SerialPutString("\r\n======================================================================");
    SerialPutString("\r\n=              (C) COPYRIGHT 2010 STMicroelectronics                 =");
    SerialPutString("\r\n=                                                                    =");
    SerialPutString("\r\n=     In-Application Programming Application  (Version 3.3.0)        =");
    SerialPutString("\r\n=                                                                    =");
    SerialPutString("\r\n=                                   By MCD Application Team          =");
    SerialPutString("\r\n======================================================================");
    SerialPutString("\r\n\r\n");
    Main_Menu ();
  }
  /* 保持運行用戶應用程序 */
  else
  {
    /* Test if user code is programmed starting from address "ApplicationAddress" */
    if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
    {
      /* Jump to user application */
      JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
      Jump_To_Application = (pFunction) JumpAddress;
      /* Initialize user application's Stack Pointer */
      __set_MSP(*(__IO uint32_t*) ApplicationAddress);
      Jump_To_Application();
    }
  }

  while (1){}

  return0;
}

可見,我們按下復位的同時按下?PE2 對應的按鍵即可觸發(fā)應用程序更新操作,否則跳轉到應用程序的起始地址執(zhí)行應用程序(斷點重啟也是默認執(zhí)行應用程序),這里的?ApplicationAddress 就是我們上面設置的?0x08003000 。?

(2)主菜單函數(shù)Main_Menu

?這個函數(shù)里就是該 IAP 程序的功能,根據(jù)其中的打印信息:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

可以知道,該IAP有三個功能(分別輸入鍵盤上的數(shù)字1、2、3進行選擇):

  • 1是下載程序(電腦->STM32);
  • 2是上傳程序(STM32->電腦);
  • 3是執(zhí)行新程序(即剛下載完成的程序)。

(3)下載程序功能函數(shù)SerialDownload?

?首先,上位機使用Ymodem協(xié)議進行數(shù)據(jù)下發(fā),STM32根據(jù)協(xié)議解析數(shù)據(jù),拿到有用的數(shù)據(jù),并把這些數(shù)據(jù)寫入FLASH對應的地址中,即ApplicationAddress。關于Ymodem協(xié)議及SerialDownload函數(shù)這里不展開討論。

4、下載驗證

(1)下載IAP程序

可以使用J-link等調(diào)試器進行下載,也可用串口ISP進行下載,我們選用的是?串口ISP 進行下載,借用的工具是?FlyMcu

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

這里下載的是?.hex文件 ,如果下載?.bin文件 ,則會提示如下錯誤:?

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

程序文件不是 0x80000000x20000000 區(qū)域的

使用 ISP 方式下載需要進行的硬件操作是:BOOT0引腳拉高,BOOT1引腳接地。即系統(tǒng)存儲器被選為啟動區(qū)域:?

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

在點擊?開始編程 按鈕后,需要按下板子上的復位鍵,即可下載程序。?

?(2)通過IAP程序引導下載LED程序

上面提到下載程序使用的是 Ymodem 協(xié)議,所以得選用帶有Ymodem協(xié)議傳輸方式的上位機軟件來把應用程序下載到板子里??梢赃x用?SecureCRT ,也可以選用超級終端。這里選用的是超級終端:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

首先,按下數(shù)字鍵1觸發(fā)下載程序操作,此時會不斷打印?CCCCC... 。然后點?傳送 -> 發(fā)送文件 ,選擇要下載的?.bin文件 及?Ymodem 協(xié)議 。下載完成后按下 數(shù)字3 即可執(zhí)行新下載得應用程序:

應用內(nèi)編程(iap),嵌入式開發(fā),STC系列單片機開發(fā),STM32系列單片機開發(fā),單片機,嵌入式硬件,STM32,版本升級,IAP,串口,物聯(lián)網(wǎng)

終于LED閃爍起來了,點燈項目成功!斷電重啟之后,默認執(zhí)行的是這個點燈程序,要想下載新的程序,按下復位的同時按下PE2所對應的按鍵(需要一定的手速)即可觸發(fā)更新程序操作。


(* ̄︶ ̄)創(chuàng)作不易!期待你們的?點贊、收藏和評論喔。?

本文來源網(wǎng)絡,免費分享知識,版權歸原作者所有。如涉及作品版權問題,請聯(lián)系我進行刪除!文章來源地址http://www.zghlxwxcb.cn/news/detail-829313.html

到了這里,關于【嵌入式開發(fā)學習】__扒一扒單片機串口IAP原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 單片機STM32看門狗詳解(嵌入式學習)

    單片機STM32看門狗詳解(嵌入式學習)

    單片機STM32的看門狗(Watchdog)是一種硬件定時器,用于監(jiān)控系統(tǒng)的運行狀態(tài)并在出現(xiàn)故障或死鎖時采取措施以恢復正常操作??撮T狗的主要功能是定期檢查系統(tǒng)是否正常運行,并在系統(tǒng)出現(xiàn)問題時觸發(fā)復位操作。 STM32系列單片機通常配備了內(nèi)置的看門狗定時器(通常稱為獨立

    2024年02月13日
    瀏覽(33)
  • 嵌入式一開始該怎么學?學習單片機

    嵌入式一開始該怎么學?學習單片機

    學習單片機: 模電數(shù)電肯定必須的,玩單片機大概率這兩門課都學過,學過微機原理更好。 直接看野火的文檔,芯片手冊,外設手冊。 學單片機不要糾結于某個型號,我認為stm32就OK,主要是原理和感覺。 看 野火文檔 的時候,可以做筆記(記憶力好的人可以忽略),各種手

    2024年02月14日
    瀏覽(29)
  • 探索嵌入式開發(fā)領域:單片機、ARM、Android底層的緊密聯(lián)系

    探索嵌入式開發(fā)領域:單片機、ARM、Android底層的緊密聯(lián)系

    作為一個曾編寫ARM教程和參與Android產(chǎn)品開發(fā)的專家,我發(fā)現(xiàn)單片機、ARM、嵌入式開發(fā)和Android底層開發(fā)之間存在緊密的聯(lián)系。對于那些希望在嵌入式開發(fā)領域發(fā)展的人來說,了解這些領域的知識至關重要。為了幫助你更好地學習這些內(nèi)容,我總結了一些嵌入式資料,你可以在

    2024年02月11日
    瀏覽(20)
  • 嵌入式物聯(lián)網(wǎng)單片機項目開發(fā)實例-4G DTU邊緣數(shù)據(jù)采集網(wǎng)關開發(fā)

    鏈接:https://pan.baidu.com/s/163D-kElFqXov629YaSrWDw?pwd=1688 提取碼:1688 [1.EC200S_STM32F103_4G CAT1網(wǎng)絡TCP和UDP的透傳字符串] [2.EC200S_STM32F103_4G CAT1網(wǎng)絡TCP和UDP的透傳十六進制包含0x00] [3.EC200S_STM32F103_4G CAT1通過外置MQTT協(xié)議發(fā)送定位和固定數(shù)據(jù)到ONENET] [4.EC200S_STM32F103_4G CAT1通過外置MQTT協(xié)議發(fā)送

    2024年01月16日
    瀏覽(26)
  • 要單片機和RTOS有必要學習嵌入式linux嗎?

    要單片機和RTOS有必要學習嵌入式linux嗎?

    學習嵌入式 Linux 是否有必要,取決于你的項目需求和職業(yè)發(fā)展目標。以下是一些考慮因素: 項目需求:如果你的項目需要處理復雜的網(wǎng)絡、文件系統(tǒng)、多任務管理等功能,嵌入式 Linux 可能是更適合的選擇。Linux 提供了豐富的開源軟件包和驅動程序,可以加速開發(fā)過程并提供

    2024年02月14日
    瀏覽(28)
  • 適合嵌入式開發(fā)的GUI(嵌入式學習)

    適合嵌入式開發(fā)的GUI(嵌入式學習)

    嵌入式開發(fā)中的GUI(圖形用戶界面)是指在嵌入式系統(tǒng)中實現(xiàn)圖形化的用戶界面,以便用戶可以通過觸摸屏、按鈕、鼠標或其他輸入設備與系統(tǒng)進行交互。 以下是一些常見的嵌入式GUI開發(fā)方法: 輕量級GUI庫:一些輕量級的GUI庫適用于嵌入式系統(tǒng),例如uGFX、LittlevGL、Nanogui等。

    2024年02月09日
    瀏覽(22)
  • 單片機 嵌入式開發(fā)軟件介紹對比與推薦(Keil、IAR、VSCode、Clion、STM32CubeIDE)

    單片機 嵌入式開發(fā)軟件介紹對比與推薦(Keil、IAR、VSCode、Clion、STM32CubeIDE)

    單片機 嵌入式開發(fā)軟件介紹對比與推薦(Keil、IAR、VSCode、Clion、STM32CubeIDE) KEI官網(wǎng):www.keil.com ????????Keil與MDK(Microcontroller Development Kit)是同一個軟件開發(fā)工具套件的不同名稱。 ????????Keil是一家德國公司,而MDK是他們開發(fā)的一款集成開發(fā)環(huán)境(IDE),通常稱為Keil

    2024年02月06日
    瀏覽(91)
  • RK3588平臺開發(fā)系列講解(嵌入式AI篇)嵌入式AI的學習步驟

    RK3588平臺開發(fā)系列講解(嵌入式AI篇)嵌入式AI的學習步驟

    沉淀、分享、成長,讓自己和他人都能有所收獲!?? ?? 本篇將給大家介紹什么是嵌入式AI。

    2024年02月04日
    瀏覽(32)
  • 【嵌入式開發(fā)-8051】詳細:基于AT89C52單片機設計的溫控風扇(Proteus仿真設計-含設計原理圖、程序源碼)

    【嵌入式開發(fā)-8051】詳細:基于AT89C52單片機設計的溫控風扇(Proteus仿真設計-含設計原理圖、程序源碼)

    1、本設計是基于AT89C51/52單片機為核心的溫控風扇系統(tǒng),使用Proteus進行仿真分析。 2、由于上傳后圖片壓縮,可以私信聯(lián)系獲取清晰圖片。 3、本次為本人結課設計,整體比較簡單,如有疑問歡迎大家交流討論! ? 目錄 【嵌入式開發(fā)-8051】詳細:基于AT89C52單片機設計的溫控風

    2024年02月07日
    瀏覽(24)
  • 華清遠見嵌入式學習——驅動開發(fā)——作業(yè)1

    華清遠見嵌入式學習——驅動開發(fā)——作業(yè)1

    通過字符設備驅動分步注冊過程實現(xiàn)LED驅動的編寫,編寫應用程序測試,發(fā)布到CSDN

    2024年02月20日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包