Ubuntu下安装STM32调试环境 OpenOCD+JLink

来源:互联网 发布:js ajax post传递参数 编辑:程序博客网 时间:2024/05/19 14:36

OpenOCD安装和使用

下载OpenOCD源码

OpenOCD为sourceforge托管的开源项目,项目地址为:https://sourceforge.net/projects/openocd/
找到最新版本下载,本记录使用:openocd-0.10.0.tar.bz2

配置、编译及安装

  1. 解压、进入源码目录下
  2. 执行./configure -help查看配置命令及提示,完成基于有别于系统的配置,大多数情况不需要有太大改动
  3. 若提示没有那个文件或目录,执行./bootstrap生成配置文件
  4. 执行./configure --enable-jlink添加JLink支持,若提示库缺失,根据提示信息安装所需库(在10之后的版本都提示却什么库,以前的版本提示缺少.h文件,建议安装最新版,起码不用按一堆库来试,有能力看源码,看英文手册的人不用管我的建议)
  5. 执行make
  6. 执行sudo make install
  7. 重启使安装的环境变量生效,如果知道具体在哪,请直接运行该文件,如果能告诉我,感激不尽。
  8. 安装成功

启动OpenOCD

  1. 进入根目录执行sudo find |grep interface/jlink.cfg找到配置文件安装目录(有点慢,如果没更改的话应该在/usr/local/share/openocd/scripts/下)
  2. target目录中有各种U的基础配置,一般不需要修改,找到自己的型号即可,在interface中找到自己使用的调试器
  3. 将硬件连通后在任意目录下执行sudo openocd -f interface/jlink.cfg -f target/stm32f1x.cfg开始用JLink调试stm32f1x,看到有一条是Info : stm32f1x.cpu: hardware has N breakpoints, N watchpoints即进入调试模式,N为硬件断点的数目。若链接不上出现大量错误,大都是硬件或配置问题,在软件配置时就会把绝大部分软件缺失问题扫描到并提示修复方式,但也不完全排除驱动、系统问题,排除错误顺序为,1. 硬件是否连接正常;2. 是否在安装前配置添加该调试器的支持;3. mcu配置文件是否与硬件不匹配(有时速度会不匹配);。

连接到OpenOCD

成功通过Jlink连接到STM32上之后,OpenOCD会监听本机的4444端口。
可以通过telnet连接并控制OpenOCD。
重新启动一个控制台执行telnet localhost 4444
输入help回车获得命令使用提示

我的脚本

#我不是在root中运行,所以sudo加一个密码的输入S,使用2>/dev/null去除不必要的输出,前提是能确定一定能连上,并放入后台运行。$echo "密码"|sudo -S openocd -f interface/jlink.cfg -f target/stm32f1x.cfg 2>/dev/null & #之后就可以连接了,不需要两个控制台了,关闭的时候直接使用shutdown同时结束$telnet localhost 4444

OpenOCD命令使用简易指南

注:<>内是必填项 []内为可选项

基本操作

shutdown能进入调试就要能退出调试
exit能进入连接就要能断开连接
halt 系统还在运行咱们就把它先暂停运行
resume能停下来就要能继续运行
reset想从头看效果就要复位
reset halt想从头调试就要复位并中止

flash操作

flash banks查看flash的bank列表
flash erase_check <bank_id>查看该bank的写入状态(是否擦除)
flash erase_sector <bank_id> <first_sector_num> <last_sector_num>擦除指定bank的第first页到last页
flash write_image [erase] [unlock] <filename> [offset [file_type]]见help。

下载程序

思路是在中止时清除并写flash后复位
1. halt
2. flash write_image erase *.hex请务必将*替换为要下载的文件名,支持大多数格式不仅仅为hex。
3. reset

断点调试

bp <address> [<asid>]<length> ['hw'|'hw_ctx']
rbp <address>
bp为添加断点,rbp为删除断点
address为断点地址,hw为硬件断点,hw_ctx为软件断点,length为指令集字节长度,stm32是2个字节长,2440是4个字节长,部分MCU拥有多套指令集,长度不固定。
思路是中止MCU后添加断点继续运行。

Linux版本信息

Linux version 4.10.0-38-generic (buildd@lgw01-amd64-059) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017

原创粉丝点击