Configuration stm32f1x in openocd tools

Good day to everyone.
There is a board on the stm32f103rct6 controller. There is a problem with the firmware and debugging of the controller via VSCode. the platformio extension is used. Can’t beat the bug:

Debug: 916 972 stlink_usb.c:999 stlink_usb_error_check(): STLINK_SWD_DP_ERROR
Debug: 917 972 target.c:2710 target_write_u32(): failed: -4
Debug: 918 973 command.c:590 run_command(): Command 'reset' failed with error code -4
User : 919 973 command.c:654 command_run_line(): in procedure 'program'
Debug: 920 973 target.c:2194 target_free_all_working_areas_restore(): freeing all working areas
Debug: 921 973 hla_interface.c:117 hl_interface_quit(): hl_interface_quit
Debug: 922 973 stlink_usb.c:1540 stlink_usb_exit_mode(): MODE: 0x02
*** [upload] Error 1

Configuration file in the tool-openocd/scripts/target folder, stm32fx.cfg file

# script for stm32f1x family

# stm32 devices support both JTAG and SWD transports.
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]

if { [info exists CHIPNAME] } {
} else {
   set _CHIPNAME stm32f1x

set _ENDIAN little

# Work-area is a space in RAM used for flash programming
# By default use 4kB (as found on some STM32F100s)
if { [info exists WORKAREASIZE] } {
} else {
   set _WORKAREASIZE 0x1000

# Allow overriding the Flash bank size
if { [info exists FLASH_SIZE] } {
} else {
    # autodetect size
    set _FLASH_SIZE 0

#jtag scan chain
if { [info exists CPUTAPID] } {
} else {
   if { [using_jtag] } {
      # See STM Document RM0008 Section 26.6.3
      set _CPUTAPID 0x3ba00477
   } {
      # this is the SW-DP tap id not the jtag tap id
      set _CPUTAPID 0x1ba01477

swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

if {[using_jtag]} {
   jtag newtap $_CHIPNAME bs -irlen 5

target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap

$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0

# flash size will be probed
flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME

# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
adapter speed 1000

adapter srst delay 100
if {[using_jtag]} {
 jtag_ntrst_delay 100

reset_config srst_only
#reset_config srst_nogate

if {![using_hla]} {
    # if srst is not fitted use SYSRESETREQ to
    # perform a soft reset
    cortex_m reset_config sysresetreq

$_TARGETNAME configure -event examine-end {
	#              DBG_STANDBY | DBG_STOP | DBG_SLEEP
	mmw 0xE0042004 0x00000307 0

$_TARGETNAME configure -event trace-config {
	# Set TRACE_IOEN; TRACE_MODE is set to async; when using sync
	# change this value accordingly to configure trace pins
	# assignment
	mmw 0xE0042004 0x00000020 0

Windows 10 platform. In cale and cubeside, everything works flawlessly. In VSCode, at the first firmware, an error is displayed with the inability to reset, at subsequent attempts, an error connecting to the device. The stlink/v2 programmer is used.

Has anyone solved such a problem?

P. S. I hope I formulated the question clearly)


I have been flashing and debugging STM32F103RCT6 boards for a long time with platformio using this project
Maybe you want to check how it’s set up

Figured it out. I copied define __HAL_AFIO_REMAP_SWJ_DISABLE() from Cubex and didn’t look. The question is closed. Thanks for the link.

I started to use this as well recently.
I reenable programming in software when a button is pushed.

How did you recover programming?

I am cleared flash in cubeIDE.