Windows上使用 OpenOCD 给 STM32 下载程序

发布者:代码律动最新更新时间:2021-07-28 来源: eefocus关键字:Windows  OpenOCD  STM32  下载程序 手机看文章 扫描二维码
随时随地手机看文章

之前有写过如何在Linux上使用openOCD给STM32下载程序的文章,今天给大家介绍一下如何在Windows上使用openOCD。

openocd全名叫做Open On-Chip Debugger,是一个自由开放的片上调试工具和编程工具,目前已经发布到0.11.0版本,目前主流调试器几乎都支持,具体可以查看Open On-Chip Debugger:OpenOCD User’s Guide。

支持下载器列表(部分):

  • CMSIS-DAP v2 (USB bulk based) adapter driver

  • Nuvoton Nu-Link and Nu-Link2 adapter drivers

  • NXP IMX GPIO mmap based adapter driver

  • ST-Link consolidate all versions in single config

  • ST-Link read properly old USB serial numbers

  • STLink/V3 support (for ST devices only)

https://github.com/xpack-dev-tools/openocd-xpack/releases

2. 安装openOCD

这是第三方编译好的软件,解压后配置环境变量即可。

openocd可执行程序在 bin 目录下,将 bin 目录路径添加到环境变量中:

配置好之后重启电脑。

3. 检查是否安装完成

重启后打开命令行,检查是否可以查看openocd版本:

三、openOCD使用方法

1. 连接到目标芯片

openOCD连接目标芯片的命令格式为:

openocd -f <接口配置文件> -f <目标芯片配置文件>1.

接口配置文件和目标芯片配置文件需要使用绝对路径。

其中接口配置文件是openOCD支持的下载接口,在 scriptsinterface 文件夹下:

目标芯片配置文件是openOCD支持的目标芯片,在 scriptstarget 文件夹下;

比如这里我使用ST-Link v2-1下载器+STM32L431RCT6,结果如图:

2. 下载程序

成功连接到目标芯片后,需要使用 telnet 协议连接到 openOCD 终端,端口4444,这里我使用mobaxterm:


连接之后需要注意,此时终端所在的路径是openOCD开启服务的路径,可以使用pwd命令查看:

连接到openOCD终端之后,按照下面三个步骤下载程序。


① 目标芯片挂起,停机:


halt

1.

② 烧写:


flash write_image erase <要下载的文件>

1.

③ 复位:


reset


3. 一行命令完成

可以在启动openOCD的时候,使用 -c 参数带上要执行的命令,通过一行命令完成烧写和复位,无需新建终端使用 telnet 连接openOCD。

openocd -f <接口配置文件> -f <目标芯片配置文件> -c <要执行的命令>


比如之前的过程可以综合为:

openocd -f G:develop_toolsopenOCDxpack-openocd-0.11.0-1scriptsinterfacestlink-v2-1.cfg -f G:develop_toolsopenOCDxpack-openocd-0.11.0-1scriptstargetstm32l4x.cfg -c init -c halt -c "flash write_image erase E:/MCU/STM32L431RC-BearPi/usart1-fpu-test/build/usart1-fpu-test.bin 0x08000000" -c reset -c shutdown


下载结果如下:

四、添加到makefile中实现一键下载

1. 添加makefile伪目标

openOCD虽然可以通过一行命令完成下载,将其添加到makefile中作为伪目标:


#######################################

# download

#######################################

download:

openocd -f G:develop_toolsopenOCDxpack-openocd-0.11.0-1scriptsinterfacestlink-v2-1.cfg -f G:develop_toolsopenOCDxpack-openocd-0.11.0-1scriptstargetstm32l4x.cfg -c init -c halt -c "flash write_image erase E:/MCU/STM32L431RC-BearPi/usart1-fpu-test/build/usart1-fpu-test.bin 0x08000000" -c reset -c shutdown


这样我们就可以使用下面这行命令完成烧写:


make download

1.

2. 优化makefile

对上述在makefile中添加的命令使用变量进行优化,方便以后不同的工程进行修改:


#######################################

# download

#######################################

OPENOCD_ROOT = G:develop_toolsopenOCDxpack-openocd-0.11.0-1

OPENOCD_INTERFACE = stlink-v2-1.cfg

OPENOCD_TARGET = stm32l4x.cfg

OPENOCD_FLASH_START = 0x08000000

PWD_DIR = E:/MCU/STM32L431RC-BearPi/usart1-fpu-test


download:

openocd -f $(OPENOCD_ROOT)scriptsinterface$(OPENOCD_INTERFACE) -f $(OPENOCD_ROOT)scriptsta


关键字:Windows  OpenOCD  STM32  下载程序 引用地址:Windows上使用 OpenOCD 给 STM32 下载程序

上一篇:FreeRTOS学习笔记01 | 移植FreeRTOS到小熊派开发板(STM32L431RC)
下一篇:使用STM32硬件SPI+STM32cubeMX+HAL库测试DW1000通信

推荐阅读最新更新时间:2024-11-04 11:19

怎么解决STM32(MDK)中不能使用printf()函数的问题
简单地说:想在mdk 中用printf,需要同时重定义fputc函数和避免使用semihosting(半主机模式), 标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数. 例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下: #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_
[单片机]
怎么解决<font color='red'>STM32</font>(MDK)中不能使用printf()函数的问题
STM32通过ADC1读取光敏电阻的值转换光照强度
【1】光敏电阻的原理 光敏电阻是一种半导体元件,它的电阻值会随着照射在其表面的光线强度的变化而发生改变。当光线越强,光敏电阻的电阻值就越小;当光线较弱或没有光照射时,电阻值就会增大。 光敏电阻广泛应用于光电控制、光度计、自动调节亮度灯等领域。 常见的光敏电阻有硫化镉(CdS)光敏电阻和硒化铟(InSb)光敏电阻等。 与其他传感器相比,光敏电阻具有以下优点: 灵敏度高:对光线强度的变化非常敏感。 响应速度快:一般情况下响应时间只需几毫秒。 易于集成:小巧轻便,易于安装和集成到各种设备中。 价格低廉:相对于其他光电传感器,光敏电阻的价格较为低廉。 但是,光敏电阻也有其缺点。由于光敏电阻本身的特性,其输出不太稳定,精度
[单片机]
STM32--程序睡眠唤醒下载的方法
stm32开发:用j-link或ST-link下载, 如果遇到: Internal command error 一种情况是:程序休眠了 解决办法: 按下复位按钮,点击下载。再松开复位按键,就可以重新下载
[单片机]
STM32快速组织代码分析例如IO端口初始化GPIO_Init(GPIOE, &GPIO_InitStructure)
GPIO_Init(GPIOE, &GPIO_InitStructure); 函数实体定义是: void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) //结构体的指针,指向结构体变量的首地址2020.2.18 //疑问?为什么用结构体指针类型定义,而不用结构体类型定义GPIOx, 对应的外设的内部地址单片机第一好的 对应自定义的结构体指针变量的地址,编译器自动分配识别地址 //GPIO_InitStruct2020.2.19
[单片机]
STM32 使用通用计时器实现微秒延时
为了驱动ARF2496K这款芯片,做STM32上的移植,所以第一步需要解决的就是时序问题,很显然在STM32下类似于51的延时方法并不适用,自然想到了采用定时器进行定时来延时。目前使用的是查询方式进行延时。 环境: STM32F107主控,采用STLINK仿真 代码如下: static void TIM5_Init_Query(CALC_TYPE type,uint32_t val) { TIM_TimeBaseInitTypeDef Tim5; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); Tim5.TIM_Period=1; //??? if(typ
[单片机]
<font color='red'>STM32</font> 使用通用计时器实现微秒延时
STM32开发 -- 复位类型判断
复位类型的情况有多种,会导致MCU重启。 因此我们有必要确认一下是何种复位导致的。 一、复位类型 想要查看复位类型可以看一下RCC_GetFlagStatus函数说明 / ** * @brief检查是否设置了指定的RCC标志。 * @param RCC_FLAG:指定要检查的标志。 * *对于@b STM32_Connectivity_line_devices,此参数可以是其中之一 *以下值: * @arg RCC_FLAG_HSIRDY:HSI振荡器时钟就绪 * @arg RCC_FLAG_HSERDY:准备好HSE振荡器时钟 * @arg RCC_FLAG_PLLRDY:PLL时钟就绪 * @arg
[单片机]
stm32 usart的几种通信模式
一 USART 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。 USART支持同步单向通信和半双工单线通信,也支持LIN(局部互联网)、智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。 USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。 同步模式下需要引脚:发送器时钟输出(CK) IrDA模式需要引脚:数据输入(IrDA_RDI)、数据输出(IrDA_RDO)
[单片机]
Windows Rally和IP Camera融合解决方案
  “微软-中星微多媒体技术中心”在京发布Windows Rally和网络摄像机(IP Camera)的融合应用解决方案,同时推出第一代采用了Windows Rally技术的网络摄像机VS-IPC1002。这是继微软和中星微电子2007年5月24日续签“微软-中星微多媒体技术中心”合作备忘录将合作拓展至移动多媒体领域和宽带网络多媒体领域后诞生的第一项成果。   Windows Rally是微软公司基于Windows Vista系统最新推出的PC与各种数码设备间的互联互通技术。目前,第一代采用了Windows Rally技术的网络摄像机VS-IPC1002已经可以被装有Windows Vista的PC所识别,使VS-IPC1002可
[安防电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved