首页 > 编程语言 >OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)

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

时间:2023-01-01 11:34:01浏览次数:63  
标签:reset OpenOCD halt openocd cfg 博客 stlink stm32


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

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

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

 

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

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

​​【STM32开发环境】Linux下开发stm32(二) | 使用openocd下载程序_Mculover666的博客-_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

OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)_命令行

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

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

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

OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)_arm_02

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

OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)_单片机_03

 同理,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的博客_openocd​​

OpenOCD如何通过stlink直接下载程序到stm32板子(已解决)_OpenOCD调试和下载_04

 

 ​​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用户指南_子曰小玖的博客-_openocd​​

 

标签:reset,OpenOCD,halt,openocd,cfg,博客,stlink,stm32
From: https://blog.51cto.com/u_13682052/5982852

相关文章

  • stm32——时钟系统
    时钟系统知识总结(任何一个外设在使用前,都必须首先使能其相应的时钟)最高主频72Mstm32有五个时钟源(HSI、HSE、LSI、LSE、PLL)HSE时钟:高速外部时钟(外接晶振/其他时钟信号)来源......
  • stm32读写sd卡代码解析和调试总结
    一前言 做程序员真是来不得半点偷懒,假如你对经常使用的代码不熟悉,早晚会让你付出沉重的代价。像认识自己的灵魂一样认识每行用到的代码,这才是一个合格的程序员,才不......
  • STM32 窗口看门狗中的喂狗操作具体是指什么
    是指清空看门狗计数器,看门狗实际上就是一个定时计数器,用来防止程序发生意外而设置的一个监测装置,只要看门狗功能打开,看门狗计数器的计数值是会不停的增加,程序正常运行时,需......
  • MINIGPA103 USBHID评估板入门学习手册基于STM32HAL库
    序由于作者水平有限,文档和视频中难免有出错和讲得不好的地方,欢迎各位读者和观众善意地提出意见和建议,谢谢!第一部分、硬件概述1.1实物概图图1.1Gamepad实物概图如图1......
  • 基于STM32+ESP8266的奥运会奖牌榜设计之经典
    (一)实验目的和任务1、掌握esp8266模块的TCP协议,进行联网和服务器2、熟悉jscon库的移植和API的使用,对jscon格式的数据进行解析3、掌握LCD或串口屏显示东京奥运会奖牌榜(二)实验......
  • stm32cubeIDE,双通道ADC+DMA配置
    双通道配置ADC_IN1和ADC_IN3        写下开始函数可用adc采集      ......
  • STM32串口及printf
    1,开启串口相关的时钟,GPIO,USART的时钟2,配置GPIO,注TX引脚AF的(OD和PP试过都没啥问题),RX浮空输入3,配置USART的结构体,NVIC的分组和结构体成员,4,选择串口通信的中断触发信号;usart......
  • STM32 SPI DMA 源码解析及总结
    一前言最近在调试stm32的SPI时候i,遇到了一个非常诡异的问题。中间花费了不少时间才把问题搞定。这中间暴露的问题值得反思。借此机会,还是梳理一下stm32的SPI的代码做......
  • STM32L431 移植 LiteOS 时 _ebss _Min_Heap_Size _Min_Stack_Size 未找到或未定义问题
    如下图所示,移植过程中未出现配置遗漏的情况,也没有配置错误的地方,但依旧报以下错误:个人猜测可能是Keil本身的问题,一直识别你的东西没有,所以不给你通过。因为,我配置了很......
  • STM32中断
    voidEXTI_INIT(void){ GPIO_InitTypeDefGPIO_InitStruct; //GPIO结构体名称 EXTI_InitTypeDefEXTI_InitStruct;//EXTID中断结构体名称 NVIC_InitTypeDefNVIC_Ini......