IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> OpenOCD如何通过stlink直接下载程序到stm32板子(已解决) -> 正文阅读

[嵌入式]OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)

首先,关于OpenOCD的入门介绍,以及如何调试,看我这篇文章:

嵌入式IDE原理 OpenOCD介绍 以及stlink如何连接stm32板子_标biao的博客-CSDN博客

由于OpenOCD一旦连接上,会自动进入3种端口监听模式(其中就包括了gdbserver端口,其实OpenOCD本质上是一个gdbserver),所以进行调试(选择gdb端口即可,上面那个文章有讲),还是比较容易的。但是本文要讲的是如何直接下载程序,而不是调试。

?

已有的不错参考博客如下(这两博客讲得差不多):

Windows上使用 OpenOCD 给 STM32 下载程序_MCUlover666的技术博客_51CTO博客

【STM32开发环境】Linux下开发stm32(二) | 使用openocd下载程序_Mculover666的博客-CSDN博客_openocd

其中有两种把程序下载到板子上的方法:

(win10,stm32f103ZET6单片机,st-link v2硬件调试器,OpenOCD版本 OpenOCD-20211118-0.11.0)

1. 使用端口连接模式

先连接OpenOCD到硬件调试器,打开powershell命令行窗口

命令行:openocd -f <接口配置文件> -f <目标芯片配置文件>

例如我的stm32f103zet6板子:openocd -f? scripts/interface/stlink.cfg -f?scripts/target/stm32f1x.cfg

?所以可以有三种端口连接协议方式:tcl 、?telnet? 、gdb(调试功能使用,我这篇博客就是用的这个 嵌入式IDE原理 OpenOCD介绍 以及stlink如何连接stm32板子_标biao的博客-CSDN博客)。

假如选择?telnet端口连接,然后再打开另一个powershell命令行窗口,

输入命令行:telnet localhost 4444连接到openocd

  1. 输入命令:halt,目标芯片挂起,相当于关机
  2. 输入命令:flash write_image erase <要下载的文件>,将文件下载到目标芯片flash
  3. 输入命令:reset,目标芯片复位

?同理,tcl端口连接也是类似的。

但是下载程序都感觉太麻烦,能不能不连接端口,一行命令行,直接下载完成呢?可以的,如下

2. 使用直接下载方式

一行命令行:

openocd -f scripts/interface/stlink.cfg -f scripts/target/stm32f1x.cfg -c init -c "reset halt; wait_halt; flash write_image erase build/项目15.bin 0x08000000" -c reset -c shutdown

解释:

  • openocd -f scripts/interface/stlink.cfg -f scripts/target/stm32f1x.cfg 用于连接OpenOCD
  • -c表示要执行的选项,-c init 用于初始化
  • -c?"reset halt; wait_halt; flash write_image erase build/项目15.bin 0x08000000" 表示执行命令,其中 reset halt; wait_hal 先停止单片机 (分号不能少),这句非常重要
  • -c reset -c shutdown,表示复位单片机,且退出OpenOCD

?

注意:

reset halt; wait_hal ,这句必不可少,否则第一次下载能成功,但是第二次下载就会报错:timeout waiting for algorithm, a target reset is recommended,比如下面的博客就有这样的问题:?
Windows上使用 OpenOCD 给 STM32 下载程序_MCUlover666的技术博客_51CTO博客?STM32开发环境】Linux下开发stm32(二) | 使用openocd下载程序_Mculover666的博客-CSDN博客_openocd

?

?Thread: [OpenOCD-devel] J-TAG flash programming issues STM32F7 | OpenOCD - Open On-Chip Debugger

我猜测原因:

  • 第一是我的OpenOCD版本跟他们不一样,我这个是最新版。
  • 第二,因为连接上了OpenOCD,这个的gdbserver没有正常退出啥的
  • 第三,直接写的命令?-c halt 没有生效,必须按照我那种写法。

网上也有人是这样写的命令行:(我就是从这儿得到的启发,大家也可以自己启发一下)

openocd -f interface/ftdi/jtagkey.cfg -f myboard_EK390.cfg -c "init; targets; reset halt; wait_halt; poll; flash write_image erase unlock Debug-EK390-0/FirmwareEK390_caffe.elf; flash erase_check 0; reset run; shutdown"

OpenOCD参考手册:

  • 使用openocd的一些技巧:OpenOCD使用指南-oceanhehy-ChinaUnix博客
    使用jtag时,最好使的cpu复位后不执行任何指令直接halt,相关指令为:reset halt,另外还有类似指令reset run、reset init,这些指令在openocd手册中都有说明。

    Openocd的配置文件为tcl脚本,所以使用proc可以定义一个类似函数的接口。通过使用proc,可以省去不少麻烦。

    在MinGW编译出的openocd可以在windows的cmd中直接运行,可是如果jtag接口没有和板子接口,会出现程序死掉的情况,而且退不掉。此时重新在板子带电情况下拔插一下openjtag,然后重新打开新的cmd运行openocd即可。不过,此时必须更改telnet_port,因为,刚才死掉的openocd占用着原先的端口。
  • 官方文档?OpenOCD用户指南_子曰小玖的博客-CSDN博客_openocd

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:00:44  更:2022-08-06 11:02:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:22:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码