专栏首页TencentOS-tinyLinux下开发stm32 ② | 使用openocd下载程序

Linux下开发stm32 ② | 使用openocd下载程序

1.openocd介绍

openocd(http://openocd.org)全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.10.0版本,目前主流调试器几乎都支持,具体可以查看Open On-Chip Debugger:OpenOCD User’s Guide(http://openocd.org/doc/pdf/openocd.pdf),它的项目托管在sourceforge(https://sourceforge.net/projects/openocd)上,点击下载即可~ 注:ubuntu软件源中也有openocd,但是版本到0.9.0,所以使用拉取源码手动安装。

2.openocd安装

首先使用命令unzip openocd-0.10.0.zip将下载的zip包解压,然后重命名为openocd:

2.1.安装openocd所需依赖

  • libtool: 先查看libtool版本,若没有安装,则安装:
  • pkgs-config >= 0.23
  • CMSIS支持需要HIDAPI库:
  • 基于usb的适配器依赖于libusb-1.0和一些旧的驱动,还要安装usb依赖:

2.2.权限授权

  • sudo:在编译和安装的时候最好带上使用sudo,防止因为管理权限出错;
  • contrib / 60-openocd.rules:在Linux上使用USB设备时,需要将此文件复制到/etc/udev/rules.d/目录中:

2.2.编译OpenOCD

首先使用命令sudo ./configure --help查看所有受支持选项的列表,执行sudo ./configure [options](如果没有设置,options选项可以为空)生成构建所需要的makefile:

最后产生一个配置总结,可以看到默认打开CMSIS-DAP,那么如何打开别的呢?这个在刚刚的help中有说明,比如我要打开jlink,带上-enable--jlink参数即可~

2.3.安装OpenOCD

然后使用sudo make,最后使用sudo make install即可成功安装,安装后在/usr/local/share目录即可看到openocd目录:

它下面scripts文件夹存放着openocd使用的文件,在interface文件夹下存放着下载器接口的文件,在target下存放着目标芯片的配置文件:

在这里插入图片描述

3.使用openocd连接到目标芯片

openocd的一些参数描述如下:

参数

描述

-f <config file name\>

使用配置文件

-c <command\>

运行命令

使用命令openocd -f <接口配置文件> -f <目标芯片配置文件>即可成功连接到目标芯片:

  • 接口配置文件在interface文件夹下;
  • 目标芯片配置文件在target文件夹下;

4.使用telnet连接到openocd

openocd连接到目标板后,它的默认telnet端口是4444,所以我们可以新建一个终端(一定不要关闭掉连接到目标板的终端!!!)连接到openocd的端口,然后使用命令控制。 这里因为要下载文件,所以我将路径切换到之前创建的bin文件的目录下,然后使用命令telnet localhost 4444连接到openocd:

这样就表示连接成功了,接下来使用命令控制目标芯片:

命令

描述

halt

目标芯片挂起,相当于关机

flash write_image erase <要下载的文件>

将文件下载到目标芯片flash

reset

目标芯片复位

注意:

  1. 要下载的目标文件需要使用绝对路径,所以下载之前先使用pwd查看一下,然后直接复制过去就ok;
  2. 下载之前必须要先使用halt是目标芯片停止运行

复位后即可看到板子绿色灯亮,下载成功:

退出可使用ctrl+]即可退出,然后输入q退出。

5.将openocd下载文件命令写入makefile

修改makefile

在这里插入图片描述

然后使用make download命令,直接实现一键下载:

==下一篇==:Linux下开发stm32(三) | 寄存器工程开发

本文分享自微信公众号 - Mculover666(Mculover666),作者:mculover666

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • STM32Cube-15 | 使用硬件I2C读写温湿度传感器(SHT30)

    本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设,读取SHT30温湿度传感器的数据并通过串口发送。

    Mculover666
  • Matlab上位机开发(四)Matlab获取自带摄像头或者USB摄像头数据

    Matlab自身不支持直接读取摄像头数据,需要安装硬件支持包才可以获取,目前常用的有两个包:

    Mculover666
  • LiteOS内核教程04 | 信号量(任务同步)

    在多任务操作系统中,不同的任务之间需要同步运行,信号量功能可以为用户提供这方面的支持。信号量(Semaphore)是一种实现任务间通信的机制,实现任务之...

    Mculover666
  • 树莓派JTAG详细使用笔记

    有的时候,在调试代码的时候,往往会借助一些硬件调试工具,JTAG就是很好的调试工具。下面来详细介绍一下如何在树莓派上使用JTAG进行调试。

    bigmagic
  • scRNA-seq聚类分析(一)

    现在我们有了高质量的细胞,在将细胞聚类并确定不同的潜在细胞类型之前,我们需要执行一些步骤。我们的数据集包含来自两个不同条件(Control and Stimul...

    生信技能树jimmy
  • SCRNA-seq聚类分析(二)

    单细胞RNA-seq分析介绍 单细胞RNA-seq的设计和方法 从原始数据到计数矩阵 差异分析前的准备工作 scRNA-seq——读入数据详解 scRNA-se...

    生信技能树jimmy
  • 单精度浮点数的取值,表示以及相关

    可以表示的范围为±3.40282 * 10^38(1.1111…1×2^127)即:

    用户1148523
  • Mysql Innodb 锁机制 select * from table where?insert?delete?update?3个insert的死锁2个update的死锁3个以上delete的死

    latch与lock latch 可以认为是应用程序中的锁,可以称为闩锁(轻量级的锁) 因为其要求锁定的时间必须要非常短,若持续时间长,则会导致应用性能非常差,...

    magicsoar
  • Java多线程——多线程方法详解

    从结果可知:Mythread的构造方法是被main线程调用的,而run方法是被名称为Thread-0的线程调用的,run方法是线程自动调用的

    说故事的五公子
  • Java多线程实战:多线程方法详解

    从结果可知:Mythread的构造方法是被main线程调用的,而run方法是被名称为Thread-0的线程调用的,run方法是线程自动调用的

    Java后端技术全栈

扫码关注云+社区

领取腾讯云代金券