我們做STM32產(chǎn)品開發(fā),最終是要將編寫的程序代碼寫進(jìn)芯片存儲器,通常指Flash存儲器【含可以映射到芯片存儲空間的片外存儲器】,讓程序正常運(yùn)行起來以實現(xiàn)相應(yīng)的功能。
一般來講,將我們準(zhǔn)備好的機(jī)器代碼HEX或BIN文件等寫進(jìn)片上FLASH可以有三種常用的燒寫方式。【溫馨提示:下面提到的燒寫方式的術(shù)語或稱謂不是絕對的,對于不同的器件可能有不同的表述甚至內(nèi)涵,這里僅針對STM32,知道怎么回事就好】
第一種,ICP【In circuit programming】,即在電路編程或在線編程【注:不必太糾結(jié)該術(shù)語名字或稱謂。平常稱之為ICP也挺好】。一般是指利用調(diào)試器通過調(diào)試接口將程序代碼寫進(jìn)芯片存儲器的過程。調(diào)試器可以是ST官方的STLINK或其它公司的產(chǎn)品,比如JLINK,ULink等。 這里的調(diào)試端口可以是SWD或JTAG接口。
針對ICP編程方式,ST官方有提供相應(yīng)的軟件工具,比如STLINK_Utility或STM32cbueProgrammer。至于其它公司的調(diào)試器,也有配套的軟件工具。
第二種,IAP【In application programming】,即在應(yīng)用編程。一般是指芯片里已經(jīng)存在具有升級更新功能的代碼在里面了,用戶基于該部分功能代碼再將另外的程序代碼寫進(jìn)芯片存儲器的過程。也就是說芯片里平常有兩套代碼,一套用于實現(xiàn)代碼的更新升級,往往稱之為用戶引導(dǎo)代碼或啟動代碼。另外一套就是芯片平常運(yùn)行的功能代碼,我們稱之為用戶應(yīng)用代碼。
第三種,ISP【In system programming】,即在系統(tǒng)編程。我們可以把該模式看做一種特殊的IAP模式,只是片內(nèi)的啟動代碼是由芯片廠家這個特定用戶出廠時寫好提供的。一般來講該段代碼位于特定存儲位置、用戶不可更改。
我們使用ISP方式編程的話,可以選擇內(nèi)嵌系統(tǒng)啟動代碼認(rèn)可的通信接口,比如USART,I2C,SPI,CAN,USB等,借助于芯片廠家或第三方提供的軟件工具來實現(xiàn)。具體到STM32系列芯片,欲利用ISP方式進(jìn)行編程燒寫的話,軟件工具可以使用ST官方提供的Stm32CubeProgrammer。
對于STM32芯片的ISP方式燒錄編程,往往需要對硬件BOOT腳做合適的電平設(shè)置,以及對選項字進(jìn)行正確配置,確保芯片從系統(tǒng)存儲區(qū)啟動、運(yùn)行。另外,燒錄完畢后,記得將相關(guān)BOOT腳電平進(jìn)行調(diào)整,以保證下次芯片啟動后運(yùn)行在正確的程序空間,一般是指調(diào)整回芯片主程序區(qū)。
上面介紹了ICP和ISP燒錄所涉及的軟件工具。至于IAP,程序的更新升級就是基于MCU現(xiàn)有的通信接口并借助用戶之前寫進(jìn)芯片的啟動代碼來完成。比方,用戶通過UART接口借助于內(nèi)部引導(dǎo)程序來完成應(yīng)用程序的更新。這里可能會有人會問,那用戶準(zhǔn)備的啟動程序如何寫進(jìn)芯片呢?顯然,我們可以通過ICP方式或ISP方式來完成用戶啟動代碼的事先燒寫。
下面是三種燒寫方式的一個簡單比較匯總表。三種方式各有特點.。表格中提到的無特定軟硬件接口需求是相對的,意思是指基于芯片現(xiàn)有常用接口和通用軟硬件工具,比方串口調(diào)試助手等。其中IAP方式對特定軟硬件的依賴性最弱,使用更為靈活。但開發(fā)工程師須多做一件事,即自己寫用戶引導(dǎo)程序。當(dāng)然,對于STM32來講,各個系列都有一些IAP例程供用戶參考。而ICP方式往往是產(chǎn)品調(diào)試過程中最為常用的一種燒寫方式。ISP方式是生產(chǎn)環(huán)節(jié)較為常用的一種代碼燒寫方式。
下面就STM32F746芯片使用ISP方式的燒寫流程做個簡單介紹,順便做些提醒。
一般來講絕大部分STM32芯片都是支持ISP方式的。在選用這個燒寫方式之前先確認(rèn)下它是否支持ISP方式,即片內(nèi)是否內(nèi)置了system memory,該處存放著系統(tǒng)啟動程序。我們可以通過各芯片所屬的參考手冊BOOT章節(jié)和AN2606應(yīng)用筆記查看確認(rèn)。
經(jīng)確認(rèn),STM32F746支持ISP,不妨選用UART3接口。【當(dāng)然,它還支持其它通信接口】
查看其所對應(yīng)的參考手冊,了解使用ISP方式所需的配置。一般指BOOT腳的電平確定、選項字的配置。具體到這里,就是確定BOOT腳的電平和System memory的啟動入口地址。
對于STM32F7而言,芯片的啟動地址可以通過啟動地址選項字節(jié)任意配置,且有兩種配置方式,對應(yīng)于BOOT腳的電平為高或為低時啟動地址選項字節(jié)所給出的地址。其地址范圍在0x0000 0000 to 0x3FFF FFFF之間。如果配置的地址越界,硬件將使用默認(rèn)啟動入口地址。
我們現(xiàn)在要使用system memory,故需找出它所在的地址范圍,根據(jù)手冊可以查到。
從上面表格得知,訪問System memory可以有兩個地址,分別源自不同的訪問接口。
我們不妨選用ICTM接口地址作為其入口地址,即0x00100000,將BOOT腳電平設(shè)置為高,則需配置BOOT_ADDR1【15:0】選項字節(jié)。這個選項字節(jié)是怎么擬定的呢?它是將程序啟動入口地址的bit29~bit14對應(yīng)過來的。比方我們選擇system_memory的啟動入口地址為0x0010,0000,則它所對應(yīng)的選項字節(jié)數(shù)據(jù)就是0x0040。這點要弄清楚,否則當(dāng)我們想通過修改啟動地址選項字節(jié)來改變啟動地址時就不知怎么填寫數(shù)據(jù)了。
當(dāng)然,對于BOOT_ADDR0和BOOT_ADDR1都有默認(rèn)值。BOOT_ADDR0的默認(rèn)值是0080,對應(yīng)于ITCM接口的0x00200000。BOOT_ADDR1的默認(rèn)值是0040,即對應(yīng)于ITCM接口的0x00100000,結(jié)合上面的介紹可知它剛好是system memory的入口地址。顯然,對于一顆沒有更改過BOOT_ADDR1的STM32F7芯片來說,欲使用ISP的話,只需將BOOT腳置高即可,無須再手動調(diào)整啟動地址選項字節(jié)。
剩下的事情就是確認(rèn)硬件線路、打開STM32CubeProgrammer、連機(jī)下載即可。當(dāng)然下載前可以根據(jù)需要做好各自配置,比如讀寫保護(hù)、看門狗啟動選擇等。
再次提醒下,通過ISP燒寫完畢后,記得調(diào)整BOOT腳的電平以保證芯片重啟后運(yùn)行主程序區(qū)的用戶代碼。
總的來講,基于ISP方式的STM32芯片燒寫過程不復(fù)雜。最后一點建議,目標(biāo)板上最好弄個復(fù)位鍵,操作方便點,如果板上不方便設(shè)計復(fù)位鍵,燒寫工位上安排個也可以。基于STM32F746芯片使用ISP方式進(jìn)行燒錄就提醒這么多。畢竟說得再多,不如一試。
本文的主要目的就是讓剛接觸STM32的人對STM32芯片的燒寫方式有個基本的了解,至于具體的實現(xiàn),除了上面提到的基于ST的工具外,還有其它第三方的編程燒寫工具可以選用。
-
燒寫
+關(guān)注
關(guān)注
0文章
58瀏覽量
14625 -
STM32芯片
+關(guān)注
關(guān)注
0文章
38瀏覽量
4615
原文標(biāo)題:STM32芯片的幾種燒寫方式簡介
文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
debugInRam,與debuginflash,reinflash這三種燒寫方式有什么區(qū)別?
STM32的三種啟動方式
STM32的三種boot模式介紹
單片機(jī)燒寫的三種方式解析

單片機(jī)燒寫程序的三種方式
單片機(jī)常用的三種程序燒寫方式資料下載

STM32:程序燒寫方式

評論