<object id="k0taz"><form id="k0taz"></form></object>
<pre id="k0taz"></pre>
      1. <table id="k0taz"></table>
        <bdo id="k0taz"><center id="k0taz"></center></bdo>
        <table id="k0taz"><option id="k0taz"></option></table><track id="k0taz"><ruby id="k0taz"></ruby></track>
        專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        IAR環境下STM32+IAP方案的實現

        作者:佚名   來源:本站原創   點擊數:  更新時間:2014年09月15日   【字體:

        --基于STM32F103ZET6UART通訊實現

         
        、什么IAP,為什么要IAP
              IAP即為In Application Programming(在應用中編程),一般情況下,STM32F10x系列芯片為主控制器的設備在出廠時就已經使用J-Link仿真器將應用代碼燒錄了,如果在設備使用過程中需要進行應用代碼更換、升級等操作的話,則可能需要將設備返回原廠拆解出來再使用J-Link重新燒錄代碼,這就增加了很多不必要的麻煩。站在用戶的角度來說,就是能讓用戶自己來更換設備里邊的代碼程序而廠家這邊只需要提供給用戶一個代碼文件即可。
              IAP卻能很好的解決掉這個難題,一片STM32芯片的Code(代碼)區內一般只有一個用戶程序。而IAP方案則是將代碼劃分為兩部分,兩部分區域各存放一個程序,一個叫bootloader(引導加載程序),另一個user application(用戶應用程序)。bootloader出廠時固定下來了,在需要變更user application時只需要通過觸發bootloader對userapplication擦除和重新寫入即可完成用戶應用的更換。1-1所示
        圖 1-1
        圖2-1
        圖2-2
              STM32F10x有一個中斷向量表,這個中斷向量表存放在代碼開始部分的后4個字節處(即0x08000004),代碼開始的4個字節存放的是堆棧棧頂的地址,發生中斷后程序通過查找該表得到相應的中斷服務程序入口地址,然后再跳到相應的中斷服務程序中執行。上電后從0x08000004處取出復位中斷向量的地址,然后跳轉到復位中斷程序的入口(標號所示),執行結束后跳轉到main函數中(標號②所示)。在執行main函數的過程中發生中斷,STM32強制PC指針指回中斷向量(標號所示),從中斷向量表中找到相應的中斷函數入口地址,跳轉到相應的中斷服務函數(標號所示),執行完中斷函數后返回到main函數中來(標號所示)。
        圖2-3
        圖2-2
              對于步驟④⑤,網友認為是:“在main執行的過程中,如果CPU得到一個中斷請求,PC指針強制跳轉到地址0x08000004中斷向量表處,而不是新的中斷向量表,圖標號所示,程序再根據我們設置的中斷向量表偏移量,跳轉對應中斷源新的中斷服務程序,如圖標號所示”。我對此的理解是:“當發生中斷后,程序從0x08000004()處的中斷向量表中得到相應的中斷服務函數入口地址,繼而跳轉相應的中斷服務程序。但是舊的中斷向量列表里邊存放的是IAP程序中斷函數的入口地址,它是如何得到user程序中斷函數的入口地址?所以覺得此種說法是錯誤的。當發生中斷時PC指針強制會跳轉到0x08000004處”這種說法并沒有錯,只是忽略了后續的一些知識要點導致這個說法出現矛盾。
        圖3-1
        圖3-2
        圖3-3
        關閉窗口
        欧美国产伦久久久久_亚洲爽爽一区二区三区_一色屋精品视频在线观看免费_久久伊人成色777综合网
        <object id="k0taz"><form id="k0taz"></form></object>
        <pre id="k0taz"></pre>
          1. <table id="k0taz"></table>
            <bdo id="k0taz"><center id="k0taz"></center></bdo>
            <table id="k0taz"><option id="k0taz"></option></table><track id="k0taz"><ruby id="k0taz"></ruby></track>