排版:
安装 > 手打命令理解过程 > 一条命令一步到位 > 轻松舒适的脚本使用
一、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感觉没用,所以还是看官网吧--此文章最后面。
换了后如图:
nice~
(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 就不一一讲了。
上一张图:
成功后打开新命令行窗口
(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: 传送门