StLink v2 problem: Wrong device detected

01 October 2019 at 8:39 pm

Article image for StLink v2 problem: Wrong device detected

I just spent way too much time on not finding the correct answer to a very simple issue, so posting it for others to find. I’m currently working on a project where I use the popular STM32F103C8T6 (as used in the nice and cheap BluePill boards). After a long evening of successful compiles, I suddenly got the error “Wrong device detected”.

The complete error message was like this:

Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD 
adapter_nsrst_delay: 100 
adapter speed: 950 kHz 
Info : clock speed 950 kHz 
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748 
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748 
Info : using stlink api v2 Info : Target voltage: 3.262028 
Error: init mode failed (unable to connect to the target) 
in procedure 'init' 
in procedure 'ocd_bouncer' 

Now that was odd? I didn’t change much or did I? After a lot of Googling I realised that I had uploaded a Firmware that did NOT include SWD support. As soon as you upload a firmware that does not feature SWD support, you obviously cannot use it any more. You deleted it after all, right? Duhh… I mistakenly thought this was a hardware feature and when you remove this support you can’t use a debugger that only uses software reset (hardware reset will still work).

So - if you use ST-Link V2 or a similar cheap JTAG debuggers, be sure to either lay out a reset pin next to your SWD pins? Or you can do like I did, temporarily hold a wire from ground to the NRST pin on the STM32, release it and trigger an upload. You basically have to do the reset manually. Once a firmware with SWD support is flashed,you can use your trusted STLINK V2 again 😊

So - when using STM32CubeMX to generate a project, always turn on Serial Wire debugging for all projects!

Always turn on SWD in STM32CubeMX
Always turn on SWD in STM32CubeMX