中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > STM32 IAP功能實現(xiàn)學(xué)習筆記

        STM32 IAP功能實現(xiàn)學(xué)習筆記

        作者: 時間:2016-09-27 來源:網(wǎng)絡(luò) 收藏

          最早接觸的時候就了解到,stm32有功能,但是一直沒有用到,最近公司項目中用到了,我才詳細的學(xué)習了這個功能,學(xué)完之后感覺這個功能很好用,也很實用,特此寫下來,做個筆記,同時也希望能幫助到所有的熱愛單片機的人。

        本文引用地址:http://www.antipu.com.cn/article/201609/310407.htm

          直奔主題把,最初我做了一個小實驗,具體內(nèi)容是:

          1.寫兩個小程序,編譯完畢生成兩個bin文件

          2.用stm官方提供的flashloader 下載到單片機內(nèi),不過這里需要注意的是第二個bin文件的下載地址需要更改,具體怎么改后面介紹

          3.通過某種觸發(fā)方式,讓單片機在兩個程序之間來回切換

          上面是我實驗的內(nèi)容,在做這個小實驗的前提是你必須知道怎么在兩個程序之間跳轉(zhuǎn),其次你也必須知道bin文件的生成,以及生成之前工程選項的設(shè)置,最后肯定是怎么下載到單片機內(nèi)。

          一、跳轉(zhuǎn)代碼的實現(xiàn)

          從官方網(wǎng)站上下載了例子,從中摘取了一下代碼用在項目中,其他的沒有用,只需核心部分。

          if (((*(volatile uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)

          {

          JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4);

          Jump_To_Application = (pFunction)JumpAddress;

          __set_MSP(*(volatile uint32_t*)ApplicationAddress); //初始化用戶程序的堆棧指針

          Jump_To_Application();

          }

          ApplicationAddress 是你要跳轉(zhuǎn)的那個代碼存放的首地址,我代碼里是

          #define ApplicationAddress1 0x08008000 //應(yīng)用程序起始地址

          JumpAddress = *(volatile uint32_t*)(ApplicationAddress + 4); 這句話的意思執(zhí)行的結(jié)果是,打開bin文件偏移四個字節(jié)后的一個uint32數(shù)據(jù),具體是為什么取這個數(shù),對bin文件感興趣的朋友可以自己研究一下。如果你這段代碼實在不理解,不過沒關(guān)系,你只需要添加進去就行了,呵呵

          0x08000000 -----------------------------------------

          |

          | 程序1

          |

          |

          0x08008000 -----------------------------------------

          |

          |

          | 程序2

          |

          |

          -----------------------------------------

          程序1和我們普通的代碼一樣不需要設(shè)置中斷偏移量,工程選項也不需要設(shè)置,程序2需要設(shè)置,設(shè)置流程如下:

         

          將里面原來的數(shù)據(jù)0x8000000改為0x8008000,不一定非要是這個,我只是害怕小了重疊,官網(wǎng)給的是 0x8004000,

          同時在你的代碼里加上中斷偏移設(shè)置為0x8000

          #ifdef VECT_TAB_RAM

          // Set the Vector Table base location at 0x20000000

          NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

          #else /* VECT_TAB_FLASH */

          // Set the Vector Table base location at 0x08000000

          //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

          NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000);

          #endif

          二、bin文件的生成

          

         

          填入的內(nèi)容和你工程路徑有關(guān)系,我的是:

          fromelf --bin --output E:_2ProjectoutputProj1.bin E:_IAP2ProjectoutputProj1.axf

          當然了,兩個代碼,肯定路徑也是不一樣,調(diào)試的時候發(fā)現(xiàn) 這個axf文件名和bin文件名必須和下面圖片中的名字一直,否則生成bin文件錯誤

         

          如果編譯完畢顯示如下信息,說明你的bin文件生成正確了,

          

         

          三、bin文件的下載過程

          

         

          點擊下一步 next,直到出現(xiàn)下面界面

          

         

          先擦出一下整個芯片,然后載入代碼1對應(yīng)的bin文件,

          

         

          注意看地址,第一個代碼設(shè)置的為 8000000,第二個為你代碼中的地址,我的為8008000,第二個代碼下載截圖如下,

          

         

          代碼可以到我csdn帳號中下載,免費的,連接為http://download.csdn.net/detail/likang123321/5318910

          通過上面的介紹,相信離遠程更新已經(jīng)不遠了,大家根據(jù)具體情況可以具體應(yīng)用,

          當你下載連個代碼到單片機內(nèi)后,上電運行的是第一個,此時你發(fā)送0xaa到串口,代碼會跳轉(zhuǎn)到代碼2,繼續(xù)發(fā)送0xaa單片機會回到代碼1執(zhí)行,我感覺很有趣,希望本文能夠讓更多i的電子愛好者了解IAP,謝謝閱讀,有什么不足之處,請廣大大神提出寶貴的意見,共同學(xué)習中……



        關(guān)鍵詞: STM32 IAP

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉