我們常看到ISP、ICP、IAP等縮寫詞組,它們的主要作用就是對(duì)程序代碼進(jìn)行更新(編程)。
下面將介紹關(guān)于編程的基礎(chǔ)知識(shí),以及結(jié)合STM32官方提供的Demo講述一下關(guān)于編程的內(nèi)容。
1關(guān)于ISP、ICP、IAP
1.ISP
ISP:In System Programing,在系統(tǒng)編程。
比如:使用STC-ISP對(duì)STC芯片編程,利用Flash loader對(duì)STM32編程等。
支持ISP的芯片一般在芯片內(nèi)部固化了一段(用ISP升級(jí)的)boot程序。
2.ICP
In Circuit Programing,在電路編程。
ICSP:In-Circuit Serial Programming,在電路串行編程。如:對(duì)EEPROM編程等。
ICP編程方式網(wǎng)上各有說(shuō)法,從字面含義(在電路)來(lái)說(shuō),所有處于編程的芯片都需要上電,都處于電路中。不嚴(yán)格來(lái)說(shuō)利用J-Link、ST-Link、e-Link32等工具進(jìn)行編程也屬于在電路編程(ICP)。
在維基百科中,在系統(tǒng)編程(ISP),也稱為在電路串行編程(ICSP)。
3.IAP
In applicating Programing,在應(yīng)用編程。
這里是本文說(shuō)的重點(diǎn),可以簡(jiǎn)單理解為:在程序運(yùn)行的過(guò)程中進(jìn)行編程(升級(jí)程序,更新固件)。
IAP是用戶自己的程序在運(yùn)行過(guò)程中對(duì)User Flash的部分區(qū)域進(jìn)行燒寫,目的是為了在產(chǎn)品發(fā)布后可以方便地通過(guò)預(yù)留的通信口對(duì)產(chǎn)品中的固件程序進(jìn)行更新升級(jí)。[來(lái)自百度百科]
IAP通信口
IAP的通信口有許多種:UART串口、ETH以太網(wǎng)、I2C、SPI......等。按理說(shuō)只要能傳輸數(shù)據(jù)的通信口都能實(shí)現(xiàn)IAP的功能。
本文結(jié)合STM32官網(wǎng)提供的例程,利用UART在應(yīng)用編程(IAP)。
2ST官網(wǎng)IAP例程
ST官網(wǎng)提供的IAP例程有很多很多,比如:
庫(kù):有使用標(biāo)準(zhǔn)外設(shè)庫(kù)(SPL)的、有使用硬件抽象層庫(kù)(HAL)的;
通信口:有使用USART的,有使用I2C的,有使用ETH的等。
MCU型號(hào):STM8S、STM32F1、F4、L1等幾乎全系列都有。
ST官網(wǎng)提供的各種IAP,其方法和原理其實(shí)都類似:就是將程序文件(二進(jìn)制文件)寫入FLASH。
本文以最簡(jiǎn)單的基于(STM32F10x)利用SPL庫(kù)+UART的IAP為例來(lái)給大家講述一下。(復(fù)雜都是從基礎(chǔ)開始,后續(xù)逐步為大家更新更高級(jí)的IAP功能)
STM32F10xxx in-application programming using the USART官方地址:
https://www.stmicroelectronics.com.cn/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32008.html
相關(guān)參考文檔和代碼例程都在這個(gè)網(wǎng)址下載,下一章節(jié)針對(duì)這里該IAP講述幾點(diǎn)重要內(nèi)容。
我下載后上傳至百度網(wǎng)盤地址:
https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw
密碼:2t3j
(提示:該鏈接后期可能會(huì)失效,建議到官網(wǎng)下載)
3IAP例程幾個(gè)要點(diǎn)
1.例程概要說(shuō)明
該代碼工程基于STM32F1,使用UART通信口,利用超級(jí)終端(上位機(jī))、通過(guò)YModem協(xié)議實(shí)現(xiàn)代碼程序的數(shù)據(jù)傳輸和寫入Flash。
2.IAP軟件工程
我們解壓(上面)下載好的軟件工程包,進(jìn)入目錄,通過(guò)MDK-ARM(為例),如下圖;
本文以MDK-ARM為例,你也可以通過(guò)EWARM、TrueSTUDIO等工具打開。
因該工程代碼是之前用MDK-ARMV4版本建立的,現(xiàn)在用V5版本打開會(huì)提示如下信息:
只需要點(diǎn)擊“Migrate to Device Pack”即可,V5版本使用了“設(shè)備支持包”,這里大概意思就是使用設(shè)備支持包兼容以前老版本工程。
選擇對(duì)應(yīng)的目標(biāo)(我們以F103ZE為例,選擇大容量、小容量在于他們的FLASH頁(yè)大小不一樣),選擇10E-EVAL,如下圖:
直接編譯,沒(méi)有錯(cuò)誤警告,此時(shí),如果有對(duì)應(yīng)的板卡,可直接下載。
提示:
1.前提:MDK下載、安裝
2.什么是目標(biāo)?簡(jiǎn)述工作空間、工程、目標(biāo)
3.說(shuō)明
這個(gè)程序只是IAP程序,放在以0x0800 0000為起始的地址。而IAP程序的作用是將應(yīng)用程序(二進(jìn)制文件)下載到應(yīng)用程序?qū)?yīng)的地址。
因此,我們會(huì)將FLASH劃分我兩個(gè)區(qū)域:IAP程序區(qū)域,APP程序區(qū)域。
這里IAP程序有兩個(gè)作用:1.對(duì)APP程序編程; 2.引導(dǎo)程序跳轉(zhuǎn)至應(yīng)用程序。所以,這段APP程序也叫BootLoader。
為防止IAP程序不被(第一部分代碼)不被意外破壞,一般建議對(duì)IAP程序進(jìn)行“寫保護(hù)”。
這個(gè)APP地址0x0800 3000是怎樣來(lái)的呢?
見IAP程序代碼:
所以,我們APP應(yīng)用程序的其起始地址就必須對(duì)應(yīng)為0x0800 3000才行。不然,跳轉(zhuǎn)之后沒(méi)有應(yīng)用程序,則會(huì)出錯(cuò)。
提示:
它這里是通過(guò)按鍵方式選擇執(zhí)行IAP,還是執(zhí)行APP;一般建議通過(guò)倒計(jì)時(shí)(比如5s):5s之內(nèi)通過(guò)串口選擇下載,否則自動(dòng)跳轉(zhuǎn)到APP程序執(zhí)行。這里就需要自己根據(jù)情況修改代碼。
Demo里程可以通過(guò)選擇3跳轉(zhuǎn)到APP程序,初學(xué)者可以直接不使用按鍵判斷,進(jìn)行測(cè)試,如下圖,修改一下:
4APP代碼和地址問(wèn)題
上一章節(jié)是講述的IAP程序,本節(jié)講APP程序修改地址的問(wèn)題。
1.添加代碼
在代碼開始設(shè)置向量表偏移:
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x3000);
0x3000代表偏移量
2.修改配置
project -> Options
3.生成Bin
具體可以參看我另外一篇文章:
MDK-ARM如何生產(chǎn)Bin文件
4.APP程序代碼
為方便大家學(xué)習(xí),我提供在按照上面修改過(guò)的APP代碼工程給大家下載,地址和上面一樣:
https://pan.baidu.com/s/1umdwlShsJpL8rLdeb9n6Cw
密碼:2t3j
5超級(jí)終端安裝,程序下載
1.超級(jí)終端下載、安裝
官方提供的文檔是HyperTerminal超級(jí)終端下載程序,這個(gè)可以百度谷歌搜索下載安裝。我這后面一直使用SecureCRT這款終端,這終端屬于商業(yè)軟件,但在網(wǎng)上可以找到很多po解的辦法。
為方便大家調(diào)試,我這里提供下載鏈接
https://pan.baidu.com/s/13yjA9q0Eltfer4oLPbGceQ
密碼:5r5m
(提示:該鏈接后期可能會(huì)失效,建議到官網(wǎng)下載)
2.程序下載
硬件連接好,將生成的程序文件(Demo.bin)指定位置(為方便測(cè)試下載,我拷貝到桌面)-> 打開終端 ->鍵盤按1 ->選擇文件 ->下載完成 ->鍵盤按3執(zhí)行程序。
以上所有內(nèi)容就是關(guān)于IAP的基礎(chǔ)知識(shí)和例程說(shuō)明,更多的IAP在線升級(jí)功能講解敬請(qǐng)等待。
-
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
364781 -
IAP
+關(guān)注
關(guān)注
2文章
165瀏覽量
25038 -
ICP
+關(guān)注
關(guān)注
0文章
75瀏覽量
13270
發(fā)布評(píng)論請(qǐng)先 登錄
AT32 IAP using the USART
程序燒錄原理
有沒(méi)有哪位大神提供一個(gè)STM32H523或者STM32H563的串口升級(jí)的IAP程序?
STM32F3系列、STM32F4系列、STM32L4系列和STM32L4+系列Cortex-M4編程手冊(cè)
STM32F40xxx和STM32f41xx flash編程手冊(cè)
STM32F10xxx單片機(jī)編程手冊(cè)
STM32G474用ymodem傳文件時(shí),傳輸停止了是怎么回事?
STM32C011開發(fā)(2)----nBOOT_SEL設(shè)置

STM32WB55RG開發(fā)(2)----STM32CubeProgrammer燒錄

STM32H503開發(fā)(2)----STM32CubeProgrammer燒錄

評(píng)論