Pio run not obeying upload_port parameter on linux

Once you choose upload_protocol = stlink (which is also the default for Nucleo boards), upload_port has no effect. You are not uploading via /dev/ttyACM0 devices (that would take effect when you do a serial bootloader upload), but via the ST-Link USB device.

Choosing stlink will simply invoke openocd saying “use the ST-Link adapter”, but not which.

openocd -d2 -s /home/martin/.platformio/packages/tool-openocd/scripts -f board/st_nucleo_l4.cfg -c "program {.pio/build/int-test-idle/firmware.elf}  verify reset; shutdown;"

For that, special logic must be injected into openocd (board scripts) and into PlatformIO to figure out the ST-Link UID.

This was discussed in Choosing STLink V2 programmer - #2 by maxgerhardt.

If you want an easy solution: If you work with Nucleos, they will expose themselves as a USB flashdrive device.

Choose the upload protocol mbed and point upload_port to the directory where the device is mounted.