什麼是STM32的ISP?

上一篇筆記分享了STM32的串口IAP實例:STM32串口IAP分享。其中,下載IAP程序時用ISP的方式進行下載。這裏的ISP又是什麼呢?git

ISP方式下載程序原理

ISP:In System Programing,在系統中編程github

在STM32F10xxx裏有三種啓動方式:編程

以ISP方式下載程序時須要把STM32的BOOT0引腳置一、BOOT1引腳置0,即從系統存儲區(System Memory)啓動。爲何設置從System Memory啓動就可使用串口來下載咱們的程序呢?那是由於在芯片出廠前ST官方已經把一段自舉程序(BootLoader程序)固化到這一塊存儲區。對於STM32F103ZET6來講,System Memory的起始地址爲0x1FFFF000,可在芯片手冊的內存映射圖裏找到:微信

其經過串口來接收數據並燒寫到用戶閃存存儲器的起始地址(0x08000000)。只能燒寫到這個地址,若keil裏設置的地址不是這個地址,則編譯出來的文件將燒錄不成功。app

用戶閃存,即User Flash,同時也稱爲Main Flash。3d

這一段BootLoader程序源碼是沒有開源出來的,用戶是不可修改的。咱們在上一篇筆記的IAP實驗中,IAP程序經過FlyMCU軟件進行燒錄,燒錄的地址就是0x08000000code

注意:不一樣系列不一樣型號的STM32固化的BootLoader是不一樣的,即便用的通信接口是不一樣的。如STM32F1xxx系列只支持USART1:blog

STM32F4xxx系列只支持USART一、USART三、CAN2等接口:接口

其餘型號的BootLoader支持的接口可查看AN2606文檔,連接:內存

https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf

這裏,關於數據協議的內容不展開討論,有興趣的朋友可自行研究。

IAP程序與ISP程序有什麼不一樣?

從基本功能來看,IAP程序與ISP程序所作的事情好像是同樣的,都是引導加載程序,因此網上有不少文章把IAP程序與ISP程序都稱爲BootLoader程序,要注意區分。可是,ISP與IAP仍是有點區別的。

STM32內部Flash分爲兩部分,System FlashUser Flash。上電以後執行哪一個Flash裏的程序有boot腳來控制。

System Flash內存放的是ST官方編寫的自舉程序(ISP程序),咱們是沒有辦法改變的。

User Flash是咱們可使用的Flash空間,咱們編寫的代碼就是要燒錄到User Flash中。咱們能夠把User Flash分爲兩部分,前面一部分空間用於燒寫咱們編寫的IAP程序,後面一部分用於燒寫咱們編寫的應用程序。其中,IAP程序用於更新咱們的應用程序。

ISP程序用於把咱們編寫的程序更新到0x08000000地址上,若是咱們的產品中的程序有IAP程序+應用程序,則此時0x08000000地址存放的程序就是IAP程序。ISP程序、IAP程序、應用程序的關係示意圖以下:

若是咱們的產品中的程序只有應用程序,則此時0x08000000地址存放的程序就是應用程序。ISP程序、應用程序的關係示意圖以下:

以上就是今天的分享,若有錯誤,歡迎指出!

個人我的博客:https://zhengnianli.github.io/

個人微信公衆號:嵌入式大雜燴

相關文章
相關標籤/搜索