辛辛苦苦用TouchGFX Designer做出了一個(gè)GUI界面、也順利地用KEIL編譯生成了hex文件,但是download到目標(biāo)板時(shí)杯具了:要么KEIL提示無(wú)法燒寫片外FLASH,要么貌似看到KEIL在燒寫、但漫長(zhǎng)地等待之后等來(lái)的卻是悲催的“下載失敗”!(經(jīng)過(guò)配置后KEIL可以燒寫TouchGFX生成的項(xiàng)目,見(jiàn)這里)如果你也有過(guò)類似慘痛的經(jīng)歷,這篇文章也許可以稍稍撫慰你那顆受傷的小心臟^_^。
其實(shí),就算KEIL能正常燒寫hex,燒寫速度也絕算不上快。要說(shuō)燒寫芯片這事兒,在行的還得屬官方的專業(yè)工具 -- ST-LINK。畢竟,KEIL作為功能強(qiáng)大的IDE開(kāi)發(fā)工具,其調(diào)試能力已經(jīng)登峰造極,燒寫文件這個(gè)短板實(shí)屬瑕不掩瑜。只是,涉及到燒寫片外FLASH,KEIL當(dāng)前版本V5.23貌似無(wú)法勝任這個(gè)任務(wù),我們不得不考慮使用ST-LINK。獨(dú)立使用ST-LINK的方法在上一篇文章里已介紹過(guò),這里,我們?cè)敿?xì)說(shuō)一下如何在KEIL中自動(dòng)調(diào)用ST-LINK,使得在KEIL IDE開(kāi)發(fā)環(huán)境中仍能“一鍵”完成下載、運(yùn)行、調(diào)試。
為了能在KEIL中調(diào)用(就是:運(yùn)行)ST-LINK,首先需要KEIL能找到ST-LINK的目錄位置。為了簡(jiǎn)便起見(jiàn),第一步先在WIN10中配置ST-LINK的PATH環(huán)境變量,使得在任何目錄路徑中都可以運(yùn)行ST-LINK。
WIN10中,在桌面上,鼠標(biāo)右鍵點(diǎn)擊 “此電腦 ” 圖標(biāo),選擇“屬性”,彈出窗口:
選擇《高級(jí)系統(tǒng)設(shè)置》,彈出窗口:系統(tǒng)屬性,然后選擇《環(huán)境變量》:
在《系統(tǒng)變量》欄中,選擇 Path 條目,點(diǎn)擊《編輯》按鈕:
新建 一個(gè)條目,加入你的PC上ST-LINK所在的路徑, 然后按下 確定 按鈕。再一路按下 各個(gè)窗口的 確定,直至窗口消失、回到WIN10桌面(此步驟很重要,這時(shí)剛才修改過(guò)的 Path 變量才真正起作用)
如果不知道ST-LINK安裝在哪里了,這……。在桌面上鼠標(biāo)右鍵點(diǎn)擊ST-LINK的圖標(biāo),選擇《屬性》,在彈出的窗口中,有顯示其所在路徑位置:
好了,完成這些步驟后,先測(cè)試一下Path設(shè)置得是否正確。在WIN10中打開(kāi)一個(gè) 《cmd》命令行窗口,輸入 st-link_cli -v (大小寫均可),意思是調(diào)用ST-LINK命令行、然后打印他的程序版本,如果窗口中看到了版本信息,說(shuō)明上面路徑配置ok了:
第二步,打開(kāi)KEIL,以TouchGFX Designer中的 clock 鐘表例程為例,打開(kāi)keil工程,編譯生成hex目標(biāo)文件:
其中,Keil 是clock工程下KEIL版本的主目錄,編譯之后會(huì)在子目錄 Flash 中生成名為 application.hex 的目標(biāo)文件。了解這個(gè)目錄結(jié)構(gòu)很重要,才能在KEIL中做相關(guān)的配置。打開(kāi)KEIL工程配置窗口,選擇最右邊的《Utilities》選項(xiàng)頁(yè),默認(rèn)情況下,燒寫選項(xiàng)是 Use Target Driver for Flash Programming,意思是用安裝KEIL時(shí)自帶的debug驅(qū)動(dòng)程序來(lái)執(zhí)行燒寫。這里我們勾選第二個(gè)選項(xiàng):Use External Tool for Flash Programming,即:不使用KEIL的驅(qū)動(dòng),而使用外部(第三方)的燒寫工具:
<Command> 中,填入:st-link_cli -P .\Flash\application.hex。因?yàn)橹耙呀?jīng)設(shè)置了Path路徑,這里直接寫 st-link_cli,KEIL就能正確找到它。-P 是命令行參數(shù) -- 燒寫文件,后面可以跟一個(gè)燒寫起始地址,我們這里默認(rèn)是0x0800 0000,可以不填。?.\Flash\application.hex 是hex文件所在目錄位置,圖六中已經(jīng)說(shuō)明,KEIL項(xiàng)目主目錄下,有一個(gè)Flash目錄,其中包含了hex文件。?.\Flash 的意思就是“當(dāng)前”目錄(即主目錄)下的Flash目錄。
<Arguments>中,填入:-c -Rst -EL "C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\ExternalLoader\MX25L512G_STM32F769I-DISCO.stldr"。
這一行命令參數(shù)非常重要:-c -- ST-LINK連接目標(biāo)板,-Rst -- 系統(tǒng)復(fù)位, -EL -- 選擇一個(gè)燒寫目標(biāo)板片外flash“算法文件”(即所謂的 memory-loader),這是最重要的一個(gè)參數(shù)了,本例中使用的板子是官方的 STM32F769I-DISCO,對(duì)應(yīng)的loader文件是?MX25L512G_STM32F769I-DISCO.stldr (如果你使用的是其他官方的板子,請(qǐng)選擇對(duì)應(yīng)的stldr文件)。因?yàn)樯鲜鰏tldr文件路徑中包含了空格,所以一定要對(duì) 路徑+文件名 加上雙引號(hào)。
然后,在KEIL中按下 F8 燒寫快捷鍵,這次可以正確燒寫了:桌面上會(huì)彈出一個(gè)DOS窗口(ST-LINK 命令行),5-6秒鐘后燒寫完畢,比KEIL直接燒寫快多了!
使用KEIL默認(rèn)配置燒寫TouchGFX生成的目標(biāo)文件的方法見(jiàn)這里。