Newer
Older
mbed-os / tools / cmake / upload_methods / UploadMethodSTLINK.cmake
# Copyright (c) 2020 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

### stlink Upload Method
# See docs for valid parameters.

set(UPLOAD_SUPPORTS_DEBUG TRUE)

### Check if upload method can be enabled on this machine
find_package(stlink)
set(UPLOAD_STLINK_FOUND ${stlink_FOUND})

if(stlink_FOUND AND (stlink_VERSION VERSION_LESS 1.7.0))
	message(WARNING "Mbed OS may not work properly with stlink versions older than 1.7.0 (yours is ${stlink_VERSION}), as its command line options have changed.")
endif()

### Figure out --serial argument
if(DEFINED STLINK_PROBE_SN AND NOT "${STLINK_PROBE_SN}" STREQUAL "")
	set(STLINK_SERIAL_ARGUMENT --serial ${STLINK_PROBE_SN} CACHE INTERNAL "" FORCE)
else()
	set(STLINK_SERIAL_ARGUMENT "" CACHE INTERNAL "" FORCE)
endif()

### Function to generate upload target
function(gen_upload_target TARGET_NAME BIN_FILE)

	add_custom_target(flash-${TARGET_NAME}
		COMMENT "Flashing ${TARGET_NAME} with stlink..."
		COMMAND ${st-flash_PATH}
		--reset # Reset chip after flashing
		${STLINK_SERIAL_ARGUMENT}
		${STLINK_ARGS}
		write ${BIN_FILE} ${STLINK_LOAD_ADDRESS})

	add_dependencies(flash-${TARGET_NAME} ${TARGET_NAME})
endfunction(gen_upload_target)

### Commands to run the debug server.
set(UPLOAD_WANTS_EXTENDED_REMOTE TRUE)
set(UPLOAD_GDBSERVER_DEBUG_COMMAND
	${st-util_PATH}
	${STLINK_SERIAL_ARGUMENT}
	${STLINK_ARGS}
	--listen_port=${GDB_PORT}
	--multi)

# Reference: https://github.com/Marus/cortex-debug/blob/056c03f01e008828e6527c571ef5c9adaf64083f/src/stutil.ts#L39
# (except I had to change target-download to load for some reason)
set(UPLOAD_LAUNCH_COMMANDS
	"monitor halt"
	"monitor reset"
	"load"
	"break main"
	"monitor reset"
)
set(UPLOAD_RESTART_COMMANDS
	"monitor reset"
)