找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4383|回复: 0
打印 上一主题 下一主题
收起左侧

IAR调用openOCD脚本实现烧录程序功能

[复制链接]
跳转到指定楼层
楼主
本帖最后由 没有你 于 2020-4-13 21:31 编辑

    在IAR for ARM编译使用STM32,有个不方便的地方,就是如果只下载程序不进行仿真,程序下载完需要手动按复位按钮才能执行程序,比较麻烦。其实很多时候我们都是直接烧录程序,并不会用到仿真功能,这样比较省时间。另外一种方式就是在IAR编译产生hex文件,然后再用其他软件如STM32 Cube Programmer或者FlyMCU下载hex文件到STM32中。如果有一种工具,可以在IAR编译完就直接烧录程序,并且自动重启,那就方便了。无意之间我看到了openOCD,openOCD是一款开源片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。IAR不像eclipse支持用户使用第三方片上调试器,所以无法直接在IAR上用openOCD。接下来我介绍如何在IAR使用openOCD的程序烧录功能。一、选择一款调试器
    我们需要一款调试工具,这里我选择DAP Link。因为DAP Link不仅支持芯片的烧录和调试,更重要的是它带有虚拟串口功能。DAP Link支持免驱HID,直接接上电脑就可以使用。在IAR for ARM上是支持DAP Link调试器的,调试器选项选择CMSIS DAP即可,DAP Link是CMSIS DAP的升级版本。
二、构建脚本文件
    这里我选择构建脚本文件,因为IAR for ARM可以执行。我们需要下载openOCD资料文件,我的单片机是STM32F103RC,要在目录openocd-toolbox\OpenOCD-20190426-0.10.0\share\openocd\scripts\target找到stm32f1x.cfg。然后复制到openocd-toolbox\OpenOCD-20190426-0.10.0\tcl\target中,再这个目录新建一个stm32f1x_cmsisdap.cfg文件,内容为:
interface cmsis-dap
transport select swd

#set FLASH_SIZE 0x20000

source [find target/stm32f1x.cfg]

adapter_khz 10000

点击保存,在目录openocd-toolbox\openocd-toolbox\scripts\windows\stm32f1x新建一个flash_write.bat文件,内容如下:
..\..\..\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

三、测试脚本文件
    flash_write.bat相同目录粘贴一个STM32F103RC单片机可以执行的hex文件,文件命名为flash_image.hex。电脑插上DAP LINK,用SWD接口连接STM32F103RC,然后点击执行flash_write.bat,这时可以看到如下图:


    显示DAP LINK下载256k大小的文件用时10.76秒,实测比STLINK V2快1秒。这个速度比串口下载程序快多了,串口波特率选择460800,下载256k的程序也要36秒左右,简直令人抓狂。
四、复制文件到工程
    由于脚本文件用到OpenOCD-20190426-0.10.0目录的文件,我们需要将OpenOCD-20190426-0.10.0文件夹复制到STM32工程里面,将flash_write.bat脚本复制到工程hex文件生成的目录下。flash_write.bat的内容还有做修改,以便IAR可以正常调用。修改如下:
@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识别用的,加上这两句,IAR就能正常调用该脚本。“::pause”表明pause被注释掉的,这样执行窗口在程序下载完成后会自动关闭。对openocd.exe 和stm32f1x_cmsisdap.cfg的相对路径也有根据实际情况更改。
五、IAR调用脚本文件
    人在IAR的Options-Build Actions-Bulid Actions Configuration-Post Build Command Line填写"$EXE_DIR$\flash_write.bat",如下图所示:


    点击确认后,就配置完成了。现在只要按下快捷键F7,IAR就会编译程序,然后调用脚本下载hex文件,脚本会在下载后让STM32F103会重启执行程序,不用人工按复位按键。如果需要程序仿真,则点击debugger without download,IAR就会直接进入仿真,省去重新下载程序的时间。
    编译同一个大工程IAR的速度会比kei明显快不少,这也是部分人喜欢用IAR的原因之一,长期下来,节省的时间可不是一点点了。现在加上这个功能,就更快了,直接按F7就可以自动编译和烧录程序,连鼠标都不用点。目前国内IAR用户还是比keil少,有部分原因是很多人从51就一直用keil,使用习惯问题导致后面开发也选择keil。其实我们没有必要局限在keil,除了IAR,eclipse也是一个不错的开发平台。
    IAR for ARM版本为:8.32.1,本次STM32F103最小工程(带自动下载程序脚本)的分享链接如下:https://pan.baidu.com/s/1bGJnWNIr0fH0bC9X6WCYdQ  提取码:6qxc。有兴趣的可以下载使用。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表