上一篇文章介紹了如何在KEIL中配置ST-LINK實(shí)現(xiàn)一鍵燒寫hex文件,可是,我就是想只用自動(dòng)生成的KEIL文件和工程選項(xiàng)配置來(lái)燒寫、調(diào)試,如何進(jìn)行呢?
這難道不是一個(gè)多余的問(wèn)題嗎?難道自動(dòng)生成的KEIL工程不能運(yùn)行的嗎?還真的不能運(yùn)行(燒寫失?。。?,詳情見(jiàn)下:
(這也許是TouchGFX當(dāng)前版本V4.10.0的小bug,期待將來(lái)升級(jí)后的版本不再有這個(gè)問(wèn)題。)
TouchGFX自動(dòng)生成的KEIL工程,編譯是沒(méi)有問(wèn)題的:
上圖第七行可以看到,0 Error,生成了hex,沒(méi)有問(wèn)題。但,按下 F8 燒寫快捷鍵,提示出錯(cuò):0x9000 0000 地址開(kāi)始的代碼段沒(méi)有找到相應(yīng)的燒寫算法。這是什么意思呢?讓我們來(lái)簡(jiǎn)單說(shuō)說(shuō)MCU燒寫flash的細(xì)節(jié):
不同的MCU,其配置的flash物理特性可能是有區(qū)別的,讀寫flash需要一些跟這個(gè)flash有關(guān)的參數(shù),比如讀寫周期、等待間隔、讀寫總線的定義等等,這些參數(shù)就是燒寫falsh的“算法”。實(shí)際進(jìn)行燒寫操作時(shí)是分為2個(gè)步驟的:首先需要把這些算法加載(download)到MCU內(nèi)部的RAM中,然后在MCU內(nèi)部運(yùn)行代碼來(lái)具體執(zhí)行這些算法、讀寫flash。這樣,就容易理解圖一提示的錯(cuò)誤了:燒寫地址 0x0800 0000 (內(nèi)部flash) 的那些代碼沒(méi)問(wèn)題,但對(duì)于地址 0x9000 0000 (外部flash),因?yàn)闆](méi)有加載對(duì)應(yīng)算法,不知道該怎么讀寫flash、無(wú)法進(jìn)行燒寫。讓我們來(lái)看看當(dāng)前的配置中燒寫算法加載的情況:
圖四顯示:默認(rèn)只加載了F7片內(nèi)2個(gè)地址段的flash算法,需要手動(dòng)添加片外flash算法:點(diǎn)擊 Add 按鈕,在彈出的窗口中找到本文使用的F769I-DISCO板子對(duì)應(yīng)的算法、并添加進(jìn)來(lái):
試著按下 F8 再燒寫一次,又出現(xiàn)了錯(cuò)誤:
提示:無(wú)法加載燒寫算法!這是因?yàn)閐ownload算法文件是需要占用MCU片內(nèi)RAM空間的,而這個(gè)空間大小是由KEIL默認(rèn)分配好的,一般是0x1000 ?,F(xiàn)在需要擴(kuò)大這個(gè)空間到0x2000:
再次燒寫,出現(xiàn)燒寫的進(jìn)度條,直到燒寫完畢:
如果多次遇到能正常開(kāi)始燒寫、但中途報(bào)錯(cuò)、中斷燒寫的情況,可以改為在KEIL中使用ST-LINK燒寫(至少可以燒寫的更快?。?,見(jiàn)這里。
下一節(jié)將介紹:如何在IAR中燒寫目標(biāo)文件。