|
本帖最后由 沒有你 于 2020-4-13 21:31 編輯
在IAR for ARM編譯使用STM32,有個(gè)不方便的地方,就是如果只下載程序不進(jìn)行仿真,程序下載完需要手動(dòng)按復(fù)位按鈕才能執(zhí)行程序,比較麻煩。其實(shí)很多時(shí)候我們都是直接燒錄程序,并不會(huì)用到仿真功能,這樣比較省時(shí)間。另外一種方式就是在IAR編譯產(chǎn)生hex文件,然后再用其他軟件如STM32 Cube Programmer或者FlyMCU下載hex文件到STM32中。如果有一種工具,可以在IAR編譯完就直接燒錄程序,并且自動(dòng)重啟,那就方便了。無意之間我看到了openOCD,openOCD是一款開源片上調(diào)試器,旨在提供針對(duì)嵌入式設(shè)備的調(diào)試、系統(tǒng)編程和邊界掃描功能。IAR不像eclipse支持用戶使用第三方片上調(diào)試器,所以無法直接在IAR上用openOCD。接下來我介紹如何在IAR使用openOCD的程序燒錄功能。一、選擇一款調(diào)試器
我們需要一款調(diào)試工具,這里我選擇DAP Link。因?yàn)镈AP Link不僅支持芯片的燒錄和調(diào)試,更重要的是它帶有虛擬串口功能。DAP Link支持免驅(qū)HID,直接接上電腦就可以使用。在IAR for ARM上是支持DAP Link調(diào)試器的,調(diào)試器選項(xiàng)選擇CMSIS DAP即可,DAP Link是CMSIS DAP的升級(jí)版本。
二、構(gòu)建腳本文件
這里我選擇構(gòu)建腳本文件,因?yàn)镮AR for ARM可以執(zhí)行。我們需要下載openOCD資料文件,我的單片機(jī)是STM32F103RC,要在目錄openocd-toolbox\OpenOCD-20190426-0.10.0\share\openocd\scripts\target找到stm32f1x.cfg。然后復(fù)制到openocd-toolbox\OpenOCD-20190426-0.10.0\tcl\target中,再這個(gè)目錄新建一個(gè)stm32f1x_cmsisdap.cfg文件,內(nèi)容為:
interface cmsis-dap
transport select swd
#set FLASH_SIZE 0x20000
source [find target/stm32f1x.cfg]
adapter_khz 10000
點(diǎn)擊保存,在目錄openocd-toolbox\openocd-toolbox\scripts\windows\stm32f1x新建一個(gè)flash_write.bat文件,內(nèi)容如下:
..\..\..\OpenOCD-20190426-0.10.0\bin\openocd.exe ^
-f ..\..\..\OpenOCD-20190426-0.10.0\tcl\target\stm32f1x_cmsisdap.cfg ^
-c "init;halt;reset halt;flash write_image erase flash_image.hex;reset;shutdown;"
pause
三、測(cè)試腳本文件
在flash_write.bat相同目錄粘貼一個(gè)STM32F103RC單片機(jī)可以執(zhí)行的hex文件,文件命名為flash_image.hex。電腦插上DAP LINK,用SWD接口連接STM32F103RC,然后點(diǎn)擊執(zhí)行flash_write.bat,這時(shí)可以看到如下圖:
顯示DAP LINK下載256k大小的文件用時(shí)10.76秒,實(shí)測(cè)比STLINK V2快1秒。這個(gè)速度比串口下載程序快多了,串口波特率選擇460800,下載256k的程序也要36秒左右,簡(jiǎn)直令人抓狂。
四、復(fù)制文件到工程
由于腳本文件用到OpenOCD-20190426-0.10.0目錄的文件,我們需要將OpenOCD-20190426-0.10.0文件夾復(fù)制到STM32工程里面,將flash_write.bat腳本復(fù)制到工程hex文件生成的目錄下。flash_write.bat的內(nèi)容還有做修改,以便IAR可以正常調(diào)用。修改如下:
@echo off
cd /D %~dp0
..\..\TOOL\OpenOCD-20190426-0.10.0\bin\openocd.exe ^
-f ..\..\TOOL\OpenOCD-20190426-0.10.0\tcl\target\stm32f1x_cmsisdap.cfg ^
-c "init;halt;reset halt;flash write_image erase STM32F103.hex;reset;shutdown;"
::pause
說明:“@echo off”和“cd /D %~dp0”是給IAR識(shí)別用的,加上這兩句,IAR就能正常調(diào)用該腳本。“::pause”表明pause被注釋掉的,這樣執(zhí)行窗口在程序下載完成后會(huì)自動(dòng)關(guān)閉。對(duì)openocd.exe 和stm32f1x_cmsisdap.cfg的相對(duì)路徑也有根據(jù)實(shí)際情況更改。
五、IAR調(diào)用腳本文件
人在IAR的Options-Build Actions-Bulid Actions Configuration-Post Build Command Line填寫"$EXE_DIR$\flash_write.bat",如下圖所示:
點(diǎn)擊確認(rèn)后,就配置完成了。現(xiàn)在只要按下快捷鍵F7,IAR就會(huì)編譯程序,然后調(diào)用腳本下載hex文件,腳本會(huì)在下載后讓STM32F103會(huì)重啟執(zhí)行程序,不用人工按復(fù)位按鍵。如果需要程序仿真,則點(diǎn)擊debugger without download,IAR就會(huì)直接進(jìn)入仿真,省去重新下載程序的時(shí)間。
編譯同一個(gè)大工程IAR的速度會(huì)比kei明顯快不少,這也是部分人喜歡用IAR的原因之一,長(zhǎng)期下來,節(jié)省的時(shí)間可不是一點(diǎn)點(diǎn)了。現(xiàn)在加上這個(gè)功能,就更快了,直接按F7就可以自動(dòng)編譯和燒錄程序,連鼠標(biāo)都不用點(diǎn)。目前國(guó)內(nèi)IAR用戶還是比keil少,有部分原因是很多人從51就一直用keil,使用習(xí)慣問題導(dǎo)致后面開發(fā)也選擇keil。其實(shí)我們沒有必要局限在keil,除了IAR,eclipse也是一個(gè)不錯(cuò)的開發(fā)平臺(tái)。
IAR for ARM版本為:8.32.1,本次STM32F103最小工程(帶自動(dòng)下載程序腳本)的分享鏈接如下:https://pan.baidu.com/s/1bGJnWNIr0fH0bC9X6WCYdQ 提取碼:6qxc。有興趣的可以下載使用。
|
|