Linux上 openocd的安装和使用,详细(2020更新)

排版:

安装 > 手打命令理解过程 > 一条命令一步到位 > 轻松舒适的脚本使用

一、openocd安装使用遇到的问题:

sudo apt-get install 的openocd-0.10.0,玩着Nucleo STM32L496,flash erase...不行:

> flash erase_sector 0 0 255    
Cannot identify target as a STM32L4 family.    
auto_probe failed     
in procedure 'target' 

 

查得结果说是openocd的问题,遂至官网下载源码编译。

(2020现在新版本0.10.0-2,应该没这问题了。直接系统源里安装就行。)

库更新了,源码编译不通过,自己捣鼓了两个多小时,一路找依赖,修改部分源码,啊啊啊终于编译好~~~

开箱即用成品:https://pan.baidu.com/s/1muJCRbFJMLSZbu2IvkXRMA

(修改后的源码:https://pan.baidu.com/s/1Vh5TcL-4SjbweTy1FoouLw )

解压直接放到想放的地方,比如/opt/openocd,然后自己到/etc/profile或者~/.bashrc添加环境变量即是

至于编译出来的pdf手册,呃不知道为什么没有出来,里面的man1感觉没用,所以还是看官网吧--此文章最后面。

换了后如图:

Linux上 openocd的安装和使用,详细(2020更新)_第1张图片

nice~

二、openocd的基本使用:

(1、学习步骤,手打命令理解过程。2、提升为生产技能,一行命令一步到位,并扩展做成脚本。)

1、手打命令理解过程

(1)烧录前要连接板子(按Jtag协议连接芯片),连接板子命令,例如:

openocd -f  board/st_nucleo_l4.cfg 

或者拆开两条:

openocd -f interface/stlink.cfg -f target/st_nucleo_l4xx.cfg

board/  interface/  target/  等都在openocd的share目录下的script文件夹里,讲到这可以了,自己捣鼓下就ok 就不一一讲了。

上一张图:

Linux上 openocd的安装和使用,详细(2020更新)_第2张图片

成功后打开新命令行窗口

(2)烧录代码:

flash下载基本操作:

telnet localhost 4444

>reset halt                         //要先挂起才能开始擦除
>flash erase_sector 0 0 last        //全部擦除
>flash write_image xxx.hex/bin/elf  //完成
>reset
或者
>halt
>flash write_image erase xxx.bin/hex/elf 0  //自动擦除并从0地址开始                   
>reset                                      //啦啦啦快看你的板子~

下面这个操作最舒服,一条搞定:

>program xx.elf                                                                        
>reset            // look your board

烧录elf文件和hex文件后面不用写擦除地址,因为它们包含有这些信息,而bin文件只有要执行的二进制文件,后面要加地址项。

熟悉之后,可以直接做成脚本。

一行命令版本

openocd -f interface/stlink-v2-1.cfg -f target/stm32l4x.cfg -c "program $(find -name *.elf) reset exit"

2、脚本一步到位(以作者同时使用f429和l496的环境为例。)

文件:~/.openocd

作者使用方式:.bashrc里添加 alias f429disc1="~/.openocd f429disc1",十分方便

#!/bin/sh

if [ $1 = "f429disc1" ]
then
    if [ $2 ]
	then
		openocd -f board/stm32f429disc1.cfg -c "program $2 reset exit"
	else
		openocd -f board/stm32f429disc1.cfg -c "program $(find -name *.elf) reset exit"
	fi
else
	if [ $2 ]
	then
		openocd -f interface/stlink-v2-1.cfg -f target/stm32l4x.cfg -c "program $2 reset exit"
	else
		openocd -f interface/stlink-v2-1.cfg -f target/stm32l4x.cfg -c "program $(find -name *.elf) reset exit"
	fi
fi

 

终。

烧写到指定位置、从指定位置反向读取、其它少见需求可参考官方文档:

Openocd User's Guide:  传送门

 

Command and Driver Index:  传送门

 

你可能感兴趣的:(嵌入式,stm32)