¿Cómo usar ST-Link externo para depurar/programar MCU STM32F103?

Estoy usando STM32F103 MCU para mi propio proyecto y quiero usar el ST-Link de la placa STM32F411 Nucleo para fines de programación/depuración externa.

He desactivado los puentes CN2 y mi pregunta real está en los pines de SWO (CN2). La forma en que procedo en esto es la siguiente:

  • PIN 1 (de SWO) es VDD_Target
  • PIN 2 es SWCLK
  • PIN 3 es TIERRA
  • PIN 4 es SWDIO
  • PIN 5 es NRST
  • PIN 6 es SWO

Que yo sepa, no debería usar todos estos pines anteriores. Como en, me he conectado

  • PIN 2 a PIN 37 (o PA14) en MCU
  • PIN 3 a TIERRA
  • PIN 4 a PIN 34 (o PA13)
  • PIN 5 a PIN 7 o (RESET) en la MCU de destino.

No estoy seguro si debo conectar el pin SWO ya que está configurado como "reservado" (¿Por qué?). También estoy dando 3.3 V al pin VIN de MCU, lo que significa que no necesito conectar VDD (PIN 1 de stlink).

Consulte esta tabla que he tomado de la hoja de datos oficial:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Aquí está la configuración general de pinout de la MCU aquí:

ingrese la descripción de la imagen aquí

He probado "casi" todo con osciloscopio y probador y todo parece estar bien. ¿Qué más me estoy perdiendo aquí? ¿Debo hacer algo con los pines BOOT0 o BOOT1?

Respuestas (2)

En primer lugar, tiene razón, si su placa ya tiene una fuente de voltaje de suministro, no tiene que conectar el pin VDD de ST-Link.

Lo segundo que le recomendaría es abrir el manual de referencia de la placa STM32F411 Nucleo y mirar los esquemas. Especialmente la parte donde el ST-Link está conectado al controlador en la placa.

ingrese la descripción de la imagen aquí

Mediante ST Microelectronics, SWCLK, SWDIO, NRST y SWO (y GND, por supuesto) están conectados a la MCU de destino. El pin SWO adicional se usa con fines de depuración, puede acceder a los datos impresos con la printffunción a través de este pin con la utilidad ST-Link .

Printf a través de SWO Viewer muestra los datos de impresión enviados desde el destino a través de SWO.

Entonces puedo recomendarle que conecte SWO también, puede ser útil más adelante. Conecte su MCU a ST-Link tal como lo han conectado con la MCU de Nucleo.

En cuanto a las configuraciones de arranque, hay tres opciones seleccionables, la más fácil es seguir con Main Flash y vincular Boot0 a GND, pero no conozco sus requisitos, por lo que depende de usted elegir.

ingrese la descripción de la imagen aquí

Si bien puede "salirse con la suya" sin conectar el pin VDD, no está allí para que haya un suministro, sino para detectar el voltaje de suministro del objetivo (vea cómo está conectado a una entrada analógica). Una interfaz de depuración más sofisticada podría mantener sus líneas bajas sin eso, y solo elevarlas al nivel de suministro correspondiente, admitiendo múltiples voltajes objetivo. La línea de reinicio normalmente no se necesita (a diferencia de muchas otras implementaciones de SWD). Es clave para recuperarse de malas cargas y firmwares que deshabilitan los pines SWD, pero también se pueden manipular manualmente.
En una placa STM32F1xx, la razón principal para hacer que BOOT0 se pueda seleccionar externamente sería si se desea utilizar el cargador de arranque ROM UART (etc.) de fábrica. En el '103 esto no es compatible con USB como lo hace en muchas de las partes posteriores de ST. Si uno desea un cargador de arranque USB en el '103, tiene que estar en la memoria flash principal, por lo que el pin BOOT0 no es útil para eso.
Mi boot0 y boot0 están configurados en cero para asegurarse de que el programa se escribirá en la memoria Flash. Aparte de eso, intentaré usar la utilidad st-link en una máquina con Windows. Actualmente estoy usando Mac OS, pero no estoy seguro de si mi problema está relacionado con el sistema operativo.
He usado un ST-Link de un STM32F407 Discovery Kit para programar un STM32F303. Simplemente conecté el conector SWD del kit (2-5 pines) a mi placa SWCLK, GND, SWDIO, NRST, SWO (tal como se hace en Discovery y Nucleo) y funcionó con ST-Link Utility. El pin boot0 está vinculado a GND a través de una resistencia de 10k, según el manual de referencia de hardware STM32F303 .

En primer lugar gracias a todos por su aportación.

Después de dos noches de insomnio y lucha, pude encontrar el problema. El problema estaba en las conexiones de los pines en mi placa personalizada: pensé que, en mi MCU, el pin 9 (VDDA) está cortocircuitado con los PIN 24-36-48 y el pin 8 (VSSA) con los PIN 23-35-47, pero no es asi

Necesitaba dar otros 3.3V y GND a VDDA y VSSA y st-link comenzó a funcionar.

Método de solución : utilicé esquemas de Maple Mini para comprender las conexiones de STM32F103. Resultó que cortocircuitaron VDDA con VDD1, VDD2 y VDD3, y VSSA con VSS1, VSS2 y VSS3. Creo que debería haber entendido esto por el nombre VSSA, ya que no es VSS0 o VSS4.

Siempre hay que conectar los pines VDDA y VSSA en cualquier STM32. Si no va a usar las partes analógicas (ADC, DAC, etc.) o no le importa el ruido, puede vincularlas a VDD y VSS. A veces no tienes otra opción (por ejemplo, Bluepills) ya que el diseñador de la placa ya los ató. Si usaré Analog, alimentaré VDDA a través de un filtro (mayúsculas y un FB).