No se puede programar una placa STM32 personalizada

He diseñado una placa STM32 simple. A continuación se muestran las imágenes esquemáticas y de diseño de pcb:

Esquemático:
ingrese la descripción de la imagen aquí

diseño de placa de circuito impreso:ingrese la descripción de la imagen aquí

Diseño de PCB con VDD resaltado:ingrese la descripción de la imagen aquí

Diseño de PCB con GND resaltado:ingrese la descripción de la imagen aquí

Solo las partes de este diseño que son relevantes para mi pregunta se muestran en las imágenes de arriba.

Mi problema es: traté de usar el ST-Link incorporado de una placa de descubrimiento STM32 para programar esta placa personalizada, pero aún no pude tener éxito. La aplicación ST-Link Utility en la PC puede reconocer al programador, pero no puede detectar la MCU de destino. Los mensajes de error que recibí fueron: "Objetivo no conectado" y "Error de comunicación USB ST-Link".

Aquí hay algunos hechos relacionados con mi problema:

  • La placa de descubrimiento STM32 funciona bien: puedo usar su ST-Link incorporado para programar su MCU STM32 integrado. Esto esta bien.
  • El MCU STM32 se ha soldado con la orientación correcta en la placa personalizada. Revisé esto dos veces.
  • He comprobado los rastros de VDD y SWD. Están bien conectados (sin problemas de soldadura). Pin Boot0 está a 0V. El pin NRST está a 3,3 V.
  • El cable SWD es corto, de solo 7-8 cm de largo.
  • El STM32 de mi placa personalizada es del mismo tipo que el de la placa Discovery.
  • He seguido las instrucciones del manual de la placa de descubrimiento STM32 sobre cómo usar la placa de descubrimiento para programar una MCU STM32 externa. Para ser más específicos, quité los 2 puentes CN3 y luego conecté las placas como en esta tabla:ingrese la descripción de la imagen aquí

  • También quité el puente de soldadura SB11 en el Discovery Board (para que el pin NRST pueda funcionar correctamente).

  • Probé tanto la aplicación ST-Link Utility como Keil. Los mensajes de error que recibí son los mismos.
  • Al principio no conecté el pin 6 en la tabla anterior (SWO) porque, que yo sepa, no es necesario. Sin embargo, después de eso también lo conecté, pero las cosas seguían sin funcionar.
  • También agregué un límite de 100nF desde el pin NRST a GND, y luego una resistencia pull-up de 100k desde este pin a VDD. El problema aún permanece.
  • También intenté usar el modo "conectar bajo reinicio" del programa ST-Link Utility. Tampoco suerte.

Sospecho que puede haber algún problema con el diseño, pero no estoy seguro. Por favor ayudame a resolver el problema.

Muchísimas gracias :)

Por lo que recuerdo, debe alimentar tanto el st-link como su placa personalizada. Los 3,3 V en el conector SWD de su placa personalizada deben proporcionar los 3,3 V para que el st-link los detecte.
@davidrojas: Gracias por tu respuesta. Bueno, actualmente enciendo el ST-Link por el puerto USB de mi PC. La placa personalizada STM32 está alimentada por un 3.3V externo e independiente. Sin embargo, la tierra de estas 2 placas ya está conectada (como en la tabla anterior). Además, los 3,3 V de mi placa personalizada también están conectados a VDD_TARGET en el ST-Link. ¿Crees que esto es suficiente?
Debería ser suficiente, sí. Otro problema podría ser la longitud y el diseño de las líneas SWDIO y SWCLK, he tenido problemas de conexión intermitente en el pasado debido a esto. Tienen que ser lo más cortos posible. Intente reducir también la velocidad del SWD.
He bajado la velocidad de SWD, de los 1,8 MHz predeterminados a menos de 400 kHz, pero aún no he tenido éxito. En cuanto a la longitud del cable, en mi configuración, la longitud total de la conexión SWD (desde ST-Link hasta el STM32 de destino) es de unos 12-13 cm. ¿Sigue estando dentro del límite?
Normalmente los tengo un poco más cortos. ¿Puede publicar una imagen del diseño desde el conector swd hasta los pines de la MCU, resaltando esas líneas, para ver si podemos detectar algo extraño?
Aquí están las fotos, por favor, eche un vistazo: Esto es SWDIO . Esto es SWCLK . Y esto es NRST .
Me temo que no veo nada extraño, las conexiones me parecen bien.
Bueno, también me rasqué la cabeza durante 2 días debido a esto y todavía no pude encontrar la respuesta. Gracias de todos modos por tus comentarios.
He tenido problemas al usar las placas Discovery st-link para programar otras placas. Lo más curioso es que usando una placa Nucleo todo funciona. Puede estar relacionado con las versiones st-link de ambas placas. Solo mi experiencia.
¿Se dio cuenta de que el vertido de tierra debajo del chip está aislado físicamente y no está realmente conectado a ninguno de los pines de tierra? Las conexiones reales entre los pines de tierra siguen caminos tortuosos fuera del chip, y algunos de ellos podrían estar aislados. Debe ajustar sus espacios libres para que el vertido de tierra no tenga islas aisladas, y esto ayudará a asegurarse de que todos los pines de tierra del chip estén mucho más cerca del mismo potencial.
Agregando a lo que dijo @DaveTweed; parece que está utilizando Altium, ¿correcto? Si es así, puede ingresar a la configuración de sus planos y seleccionar eliminar las islas de cobre, y también modificar el ancho de la astilla (permanecer más ancho que las capacidades del fabricante) y el espaciado de aislamiento entre el trazo y el vertido.

Respuestas (1)

Gracias por sus excelentes comentarios. Gracias a ellos, he estado seguro de que mi diseño está libre de errores. Por eso centré mi atención en buscar errores en el hardware. ¡Y encontré el error! Este es un error de soldadura.

Encontré este error después de seguir estas instrucciones: "Use un multímetro y pruebe todas las conexiones en busca de cortocircuitos o falta de conexión. Recuerde tocar los pines/almohadillas/lo que sea con mucha suavidad, porque si presiona la sonda con fuerza, puede "arreglar "la conexión temporalmente (por ejemplo, empuja el pin del IC en la traza de la PCB y la prueba está bien, pero tan pronto como lo suelta, el pin se dobla de nuevo)". La publicación original está aquí .