怎麼使用stm32寫IAP的bootloader和APP

來源:互聯網
上載者:User

標籤:

Stm32的bootloader和App的編寫注意事項

1、 怎麼分配bootloader和app的空間

2、 怎麼得到資料和寫入flash

3、 怎麼從bootloader跳轉到app

4、 怎麼設定App的中斷向量

5、 App中怎麼產生bin檔案

6、程式執行的流程

 

1、怎麼分配bootloader和app的空間


因為我用的是stm32f103c8t6,它的flash的大小是64k,所以把它分成如上所示

0x08000000 ---0x0800 33FF分配給bootloader使用,大小是13k

0x0800 3400----0x080097FF分配給第一個APP的使用,大小是25k

0x08009800----0x0800 FBFF分配給第二個APP的使用,大小是25k

0x0800FC00----0x0800 FFFF 分配給user_flag和其它標誌使用,大小是1k

 

在keil中設定rom的大小

A、bootloader中rom大小的設定


B、APP1中rom大小的設定


C、APP2中rom大小的設定

 

 

 

Rom設定好了就可以在map中看見地址的改變,這裡拿bootloader和app1來說。

Bootloader的map

 

App1的map


這裡就可以看到RESET的地址改變了

但是要想我們改變的rom在map中也改變keil裡面必須要設定如,


這裡必須要打勾,預設建立的工程是沒有選擇的

 

2、怎麼得到資料和寫入flash

在我的程式是通過串口接收資料,然後調用app_bin_handler(&timer);函數來在裡面完成寫flash(函數iap_write_appbin(Flash_Current_Write_addr(),g_RxBuf1,length))、和校正寫入的資料是否正確(函數flag =read_flash_ECC(Flash_Current_Write_addr(),length);)、校正通過就可以跳轉到app中(函數JumpToApp(Flash_Current_Write_addr(),1);)

 

 

 

3、怎麼從bootloader跳轉到app

voidJumpToApp(u32 ApplicationAddress,u8 flag)

{

         u32 temp;

         if (((*(vu32*)ApplicationAddress) &0x2FFE0000 ) == 0x20000000)

         {

                   if(flag == 1)

                   {

                            User_write_Flash_falg();

                   }

                   temp = (*(vu32*)(ApplicationAddress + 4));

                   JumpToApplication =(FunVoidType)temp;

                   MSR_MSP(*(vu32*)ApplicationAddress);

                   JumpToApplication();

         }

}

程式中就是利用上面的函數實現跳轉,中間有個User_write_Flash_falg()函數是用來設定app的標誌的,如果當前正在使用的是app1,那麼就設定標誌位為2,好在下次啟動的時候跳轉到app2,如果當前正在使用的是app2,那麼就設定標誌位為1,好在下次啟動的時候跳轉到app1

至於上面函數的詳解可以百度。

 

4、怎麼設定App的中斷向量

Stm32的中斷重新導向比較簡單,因為它有一個專用的寄存器

         NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x9800);

這個函數就是重新導向了app2的中斷向量,實現起來簡單

 

6、             App中怎麼產生bin檔案

因為我的程式是通過串口下載app的所以必須要產生bin檔案,才方便下載,

在工程裡面進行如下設定就可以產生bin檔案

其中主要是路徑要對,不然找不到.axf檔案,也就產生不了bin檔案

 

 

 

總結:

Bootloader裡面主要是

1、設定bootloader和app的空間

2、接收編譯好的app的bin檔案,寫入flash

3、實現跳轉

App裡面主要修改的地方是

1、         ROM起始地址和分配的空間大小

2、         重新導向中斷向量

3、         產生bin檔案

這裡就是整個程式執行的流程

怎麼使用stm32寫IAP的bootloader和APP

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.