STM32_Programmer_CLI.exe基本命令介绍

一、前言

STM32有不少可视化烧写工具,例如STVP和ST-LINK Utility等等。现在ST主推的是STM32Cube软件系列的STM32CubeProgrammer,功能更多。虽然这些工具挺好用,但是有时需要自己制作上位机来实现一键下载、测试、加密等功能时,这些软件就无法满足,要自己调用st-link读写stm32,可以借助命令行工具:

安装STVP后有 STVP_CmdLine.exe

安装ST-LINK Utility后有 ST-LINK_CLI.exe

安装STM32CubeProgrammer后有 STM32_Programmer_CLI.exe

下面就介绍如何调用STM32_Programmer_CLI.exe来实现st-link连接stm32,解除读保护,擦除、写入程序、校验,再添加读保护,读取ID,写入加密。

目录

一、前言

二、安装STM32CubeProgrammer

三、 STM32_Programmer_CLI.exe 常用指令

3.0 批处理文件

3.1 -h --help 帮助命令

3.2 -c, --connect 连接命令

3.3 -e, --erase 擦除命令

3.4 -w, --write, -d, --download 下载命令

3.5 -w32 写32位数据命令

3.6 -v, --verify 校验命令

3.7 -r, --read, -u, --upload 读命令

3.8 -r32 读32位数据命令

3.9 -g, --go, -s, --start 运行指令

3.10 -rdu, --readunprotect 解除读保护

3.11 -ob, --optionbytes 选项字节命令

四、实际应用

4.1 读取ID

4.2 实现烧写程序添加读保护

4.3 利用ID加密


 

二、安装STM32CubeProgrammer

2.1 官网搜索STM32CubeProg,点击获取软件,下载STM32CubeProgrammer

2.2  STM32CubeProgrammer用户手册UM2237下载下来,里面有详细的命令行指令介绍。

2.3 选择安装路径,一路Next就行,有个STM32TrustedPackageCreator,博主也没用过,看介绍是ST推出的安全烧写工具,可以先对固件加密,再给产线或客户防止固件泄露,不过好像要买个STM32HSM的卡才能用吧。

 

三、 STM32_Programmer_CLI.exe 常用指令

3.0 批处理文件

装好后,在安装目录下可以找到STM32_Programmer_CLI.exe工具,如果忘了装哪了,右键快捷方式打开文件夹所在位置。

直接打开STM32_Programmer_CLI.exe会一下闪退,可以在同一目录下新建个批处理文件,来测试命令。右键新建文本文档,重命名把txt格式改成.bat文件。

bat用法简单说明,例如有如下命令:

第一行 “::”是注释本行内容

第二行 STM32_Programmer_CLI.exe 是要运行的程序, -h是命令

第三行 pause是暂停,防止闪退。

 

3.1 -h --help 帮助命令

说明:运行帮助命令后会显示所有的命令介绍。

示例:

::帮助
STM32_Programmer_CLI.exe -h 
pause

运行结果:

 

3.2 -c, --connect 连接命令

说明:建立到设备的连接。该命令允许主机打开所选设备的端口(UART/USB/JTAG/SWD),基本上所有操作前都要先建立连接

语法: -c port=<Portname> [freq=<frequency>]  [index=<index>]  [sn=<serialNumber>] [ap=<accessPort>]  [mode=<mode>]     
 [reset=<mode>]   [shared]     

参数<port>指定哪种接口,是必需的参数,值可以是UART/USB/JTAG/SWD,这里只用到SWD

参数<freq>指定频率,如下几种频率可选,未指定频率则使用默认的频率。
• ST-LINK v2/v2.1
– SWD(4000、1800、950、480、240、125、100、50、25、15、5)kHz
– JTAG(9000、4500、2250、1125、562、281、140)kHz
• ST-LINK v3
– SWD(24000、8000、3300、1000、200、50、5)
– JTAG(21333、16000、12000、8000、1777、750)
如果输入的值不符合这些值中的任何一个,则会考虑次高值。

默认频率值为:
– SWD:STLinkV2:4000 kHz,STLinkV3:24000 kHz。
– JTAG:STLinkV2:9000 kHz,STLinkV3:21333 kHz.

其他的参数<index>,<mode>,<ap>等等一般用不到,不用输入默认即可。

示例:

STM32_Programmer_CLI.exe -c port=SWD freq=4000 
pause

使用st-link 连接 STM32F103,先插上st-link ,再运行以上命令,显示如下:

 

3.3 -e, --erase 擦除命令

说明:擦除命令有三种用法,可以擦除全部扇区也可以擦除指定扇区。

语法:-e [all] [sectorsCodes]
[all] :擦除全部闪存。
[sectorsCodes] :仅擦除指定扇区。
[<[start end]>] 擦除从“start”到“end”代码的所有扇区。

示例:

::擦除全部闪存
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -e all

::擦除指定扇区1和扇区2
::STM32_Programmer_CLI.exe -c port=SWD freq=4000 -e 1 2

::擦除从1 到 5 所有扇区
::STM32_Programmer_CLI.exe -c port=SWD freq=4000 -e [1 5]
pause

擦除全部扇区,运行后显示:

 

3.4 -w, --write, -d, --download 下载命令

说明:下载源程序到STM32中,支持bin, hex, srec, axf, elf, stm32 or tsv file格式。其中要注意bin文件是纯粹的二进制文件,需要指定起始地址,而hex、elf等带地址信息的不用指定。下载会判断地址范围,自动擦除扇区,所以不用写 -e 擦除指令了。

语法: -w <file_path> [start_address]
[file_path] :要下载的文件路径。
[start_address] :下载的起始地址

下载bin文件示例:

::下载bin文件到0x08000000
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -w D:\prog\Template.bin  0x08000000  
pause

运行后如下:

记得要指定地址,不然会报错:Error: You must enter the write address to download binary file for STM32 MCU devices.

下载hex文件示例:

::下载hex文件
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -w D:\prog\Template.hex 

下载hex文件即使指定地址也会被忽略:Warning: Write address is ignored for hex, Srec and elf files

 

3.5 -w32 写32位数据命令

说明: 将指定的32位数据从指定地址开始下载到闪存中,注意不像下载指令-w会自动擦除扇区,-w32写指令要手动调用擦除扇区指令-e后才能写。
语法: -w32 <start_address> <32_data_bits>
<start_address>  :下载的起始地址。
<32_data_Bits> :要下载的32位数据。数据应使用空格进行分割

示例:

::先擦除扇区0,再从地址 0x08000000 开始写入0x12345678 0xAABBCCFF 0x12AB34CD 
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -e 0 -w32 0x08000000 0x12345678 0xAABBCCFF 0x12AB34CD 
pause

运行结果:

记得要调用擦除指令-e,不然会报错:Error: Failed to download data!If it's a Flash memory, it may be not erased or protected

 

3.6 -v, --verify 校验命令

使用-w和-w32写指令后,可以跟个-v校验命令,校验写入的数据是否正确

示例:

::下载hex文件并校验
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -w D:\prog\Template.hex -v

运行结果:

 

3.7 -r, --read, -u, --upload 读命令

说明:从指定地址开始读取设备存储器内容并将其上传到指定的二进制文件中,支持文件格式 .bin/.hex/.srec
语法: --upload <start_address> <size> <file_path>
<start_address> :读取的起始地址。
<size> :要读取的存储器内容大小。
<file_path> 上载存储器内容的二进制文件路径。

示例:

::从0x08000000开始读取32k数据到D:\prog\read.bin
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -r 0x08000000 0x8000 D:\prog\read.bin

运行结果:

 

3.8 -r32 读32位数据命令

说明:读取32位数据存储器,-r32 命令最大支持 32KB 
语法: -r32 <start_address> <size>
<start_address> :读取的起始地址。
<size> :要读取的存储器内容大小(字节个数)
示例:

::从0x08000000开始读取100个字节
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -r32 0x08000000 100

运行结果:

 

3.9 -g, --go, -s, --start 运行指令

说明:该命令允许从指定地址开始执行设备存储器中的程序。
语法: --start [start_address]
[start_address]:要执行的应用程序起始地址。

示例:

::从0x08000000开始运行程序
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -s 0x08000000 

运行结果:

 

3.10 -rdu, --readunprotect 解除读保护

说明:此命令通过将RDP级别从级别1更改为级别0来删除存储器读保护。
语法: --readunprotect

示例:

::解除写保护
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -rdu

结果:

 

3.11 -ob, --optionbytes 选项字节命令

说明:该命令允许用户通过显示或修改设备的选项字节来控制它们。注意不同系列的STM32选项字节不同,具体看参考手册
语法: -ob [displ] / -ob [OptByte=<value>]
[displ] : 该选项允许用户显示整套选项
字节。
[OptByte=<value>]:  该选项允许用户编程给定的选项字节。

示例:

::选项rdp修改为0xBB,开启读保护,并显示所有选项字节
STM32_Programmer_CLI.exe -c port=SWD freq=4000 -ob rdp=0xBB  displ

结果:

 

四、实际应用

4.1 读取ID

网上找了一张图,STM32的ID地址:

可以利用-r32命令读取ID,以stm32f429为例,读取ID所在地址0x1FFF7A10总共12字节

示例:

STM32_Programmer_CLI.exe -c port=SWD freq=4000 -rdu -r32 0x1FFF7A10 12 

结果:

 

4.2 实现烧写程序添加读保护

以stm32f429为例,-c使用st-link连接,-rdu先解除读保护, -w下载lcd.hex ,-v校验,-ob修改rdp=0xbb添加读保护,这里没应用-s运行命令,因为添加读保护后-s无效了,无法直接运行了。

示例:

STM32_Programmer_CLI.exe -c port=SWD freq=4000 -rdu -w D:\prog\LCD.hex -v -ob rdp=0xBB
pause

 

4.3 利用ID加密

由于bat文件不好计算和判断结果,下一篇介绍使用C#或QT调编写上位机,用 STM32_Programmer_CLI.exe实现烧写和加密。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哀歌与世无争

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值