Problema de PCB STM32

Llevo casi un año intentando que un STM32 funcione en una placa de circuito impreso personalizada. Tengo un STM32F107 y lo conecté como se muestra en el diagrama adjunto (actualmente solo los componentes que se muestran están soldados).

¿Este circuito es correcto o tiene errores evidentes que me estoy perdiendo?

ingrese la descripción de la imagen aquí

Probé OpenOCD para conectarme con swd, y también intenté subir BOOT0 y conectarme a través de USART1 sin éxito.

Si desea utilizar JTAG, debe conectar TDI en el pin PA15. ¿Has probado a programar el dispositivo en modo SWD? Además, ¿dónde está conectado el pin NRST?
Hola, lo siento, quise decir SWD no JTAG. Sí, lo intenté sin éxito, no se pudo iniciar. El pin NRST solo está conectado a una almohadilla de prueba que soldé al programador SWD.
No veo ningún otro problema obvio con el esquema. Cuando se trata de la depuración de hardware, debe verificar tres cosas básicas: energía, reloj y reinicio. Si todo funciona como se esperaba, buscaría probar con un programador diferente o verificar que su programador esté tratando de inicializar SWD correctamente (consulte la página 1071 del manual de referencia).
En primer lugar, le recomiendo que diseñe su placa de acuerdo con este documento: Primeros pasos con el desarrollo de hardware STM32F 10xxx .
¿Incluyó un pull-up apropiado en NRST?
El pin NRST se levanta internamente de manera predeterminada. Figura 10, página 124 .
Si está utilizando SWD, asegúrese de haber conectado los pines SWCLK, SWDIO y GND correctamente. Consulte el comentario de @BenceKaulics para obtener más detalles. Conectar NRST al pin RESET es importante pero no obligatorio. También aconsejo no tirar de BOOT0 alto. Deje que sea bajo y su código se escribirá en la memoria flash. Los pines BOOT0 y BOOT1 son para la gestión de la memoria.
¿Qué tipo de depuración de hardware has hecho? Esto no parece un problema con el esquema. Aunque si lo fuera, diría que no me gusta su circuito de cristal porque no tiene etiquetas para los condensadores, lo que me lleva a sospechar de él.
El esquema parece estar bien. Eche un vistazo a la asignación de pines del paquete.
¿Incluso proporciona energía al chip, o simplemente falta en esta parte del esquema? Tal vez sea una segunda subparte en su esquema Eagle. Los pines 12/13 son solo para VDD-Analog.
De acuerdo con @Hans, parece que está usando un paquete LFQP64, que debería tener VDD en los pines 19, 32, 48 y 64. Haría lo que muchos otros han dicho y revisaría su diseño con un peine de dientes finos. (A menos que no haya mostrado esa parte de sus esquemas)

Respuestas (4)

Como aún no puedo comentar, publicaré esto como respuesta: por mi vida, no puedo encontrar los pines SWD en su esquema conectado a nada y sin él, la programación solo es posible a través del cargador de arranque de ST a través de UART jugando con BOOT1 y la depuración es imposible. Si desea utilizar SWD, necesita conectar 5 pines:

  • SWDIO
  • SWCLK
  • NRST
  • VDD
  • TIERRA

SWDIO y SWCLK son para transferencia de datos, NRST a veces se usa para programar la placa ("programa en reinicio"), VDD es necesario para conectarse a TVDD de ST-Link ya que se usa para detección y GND para tener un terreno común.

También debe colocar condensadores en los osciladores de cristal de 8 MHz, aunque al observar su diseño no necesita una frecuencia precisa, por lo que también puede usar el oscilador interno de 8 MHz de F107 y ahorrar algo de dinero.

Los condensadores parecen estar integrados en el oscilador.
@Daniel mea culpa

Entiendo que mi respuesta es más para las personas que enfrentarán este problema en el futuro. En stm32f107, el pin boot1 (PB2) no es necesario, puede verificarlo en la tabla 9 en el manual de referencia en la página 59. STM32F107 podría ejecutarse en 3 modos de arranque diferentes que se pueden seleccionar a través de BOOT [1: 0]

-----------------------------------------------------------------------------
| boot1 | boot0 | Boot Mode        | Alliasing
-----------------------------------------------------------------------------
|  X    |   0   | Main Flash Mmory | Main Flash memory is selected as boot space
-----------------------------------------------------------------------------
|  0    |   1   | System Memory    | System memory is selected as boot space
-----------------------------------------------------------------------------
|  1    |   1   |  Embedded SRAM   | Embedded SRAM is selected as boot space
-----------------------------------------------------------------------------

Entonces, creo que pb2 no fue una solución correcta.

De hecho, si bien es discutible si esto es técnicamente una respuesta en lugar de un comentario sobre otra respuesta, ¡este es un problema importante! Mientras boot0 sea bajo, boot1 no importa. Sin embargo, vale la pena señalar que tener boot0 bajo puede frustrar ocasionalmente el uso de SWD, si hay un código en flash que reutiliza los pines SWD. En ese caso, aumentar boot0 para que el chip se inicie desde una fuente diferente puede ser una solución alternativa (conectar SWD mientras se confirma el restablecimiento es otra).

Realmente debería leer este breve tutorial de ST: "Primeros pasos con el desarrollo de hardware STM32F 10xxx"

Tiene un capítulo sobre programación a través de JTAG y SWD y también tiene un esquema de referencia de muestra con los componentes mínimos necesarios para ejecutar STM32, para que pueda compararlo con su diseño.

Gracias. Olvidé conectar pb2 a tierra (el otro pin de arranque).

mejor gareth

Si esta es la solución a la pregunta original, puedes marcarla como aceptada (incluso si respondiste tu propia pregunta) =-)
Como señaló Sergii, esta teoría no podría ser la solución al problema porque cuando boot0 es bajo como se muestra en su esquema, el estado de boot1 es irrelevante . Si su problema ahora se resolvió, se resolvió con otra cosa , tal vez algo que desconocía, como una conexión suelta, un cableado del depurador o un cambio de fuente de alimentación, etc.