找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5528|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

IAR調(diào)用openOCD腳本實(shí)現(xiàn)燒錄程序功能

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本帖最后由 沒(méi)有你 于 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)重啟,那就方便了。無(wú)意之間我看到了openOCD,openOCD是一款開(kāi)源片上調(diào)試器,旨在提供針對(duì)嵌入式設(shè)備的調(diào)試、系統(tǒng)編程和邊界掃描功能。IAR不像eclipse支持用戶使用第三方片上調(diào)試器,所以無(wú)法直接在IAR上用openOCD。接下來(lái)我介紹如何在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

    說(shuō)明:“@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填寫(xiě)"$EXE_DIR$\flash_write.bat",如下圖所示:


    點(diǎn)擊確認(rèn)后,就配置完成了,F(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)期下來(lái),節(jié)省的時(shí)間可不是一點(diǎn)點(diǎn)了。現(xiàn)在加上這個(gè)功能,就更快了,直接按F7就可以自動(dòng)編譯和燒錄程序,連鼠標(biāo)都不用點(diǎn)。目前國(guó)內(nèi)IAR用戶還是比keil少,有部分原因是很多人從51就一直用keil,使用習(xí)慣問(wèn)題導(dǎo)致后面開(kāi)發(fā)也選擇keil。其實(shí)我們沒(méi)有必要局限在keil,除了IAR,eclipse也是一個(gè)不錯(cuò)的開(kāi)發(fā)平臺(tái)。
    IAR for ARM版本為:8.32.1,本次STM32F103最小工程(帶自動(dòng)下載程序腳本)的分享鏈接如下:https://pan.baidu.com/s/1bGJnWNIr0fH0bC9X6WCYdQ  提取碼:6qxc。有興趣的可以下載使用。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表