Programe STM32 MCU con SWD por defecto como función alternativa

Quiero usar mi primer MCU STM32 en el proyecto. El proyecto involucra algunos periféricos (UART/SPI/I2C) y tiene que hacer un poco de matemática aquí y allá, principalmente cambios de bits y/o cálculos de enteros, así que encontré una MCU con los periféricos que necesito, oscilador interno, suficiente espacio de programa flash y RAM para mi aplicación.

Entonces encontré este smol boi: STM32L051K8T6 en LQFP-32, Hoja de datos

Revisé la hoja de datos, todo parece claro, no tengo ningún problema para elegir cosas nuevas, IDE y todo, sin embargo, tengo un par de preguntas para las que no pude encontrar una respuesta clara en Google, y la comunidad puede ser más útil de todos modos:

  1. Me gustaría poder programarlo a través de SWD. Es una comunicación de 2 hilos, ¿verdad? SWDIO y SWCLK. Entonces, en teoría, siempre que suministre energía para la MCU, solo necesito 2 pines para conectarme a la MCU (¿o tal vez también reiniciar? Conexión a tierra, obviamente). Quiero decir, ¿no necesito un conector grande de 10 pines ni nada? Más o menos como Atmegas a través de UART (que necesita pulso RX, TX y DTR para reiniciar MCU). Buscar en Google el pinout ST-Link v2 me mostró solo estos dos y un pin "SWIM" desconocido para mí. (que nunca se menciona en la hoja de datos; de hecho, tengo un ST-Link v2 e incluso una placa nucleo con programador integrado, pero, de nuevo, nunca está de más preguntar a personas inteligentes).

  2. SWDIO y SWCLK están marcados como "funciones alternativas" de los pines. Por lo tanto, supongo que no podré programarlo a través de SWDIO/SWCLK de fábrica, porque los pines no están configurados como SWDIO/SWCLK de manera predeterminada. ¿Es algo para lo que necesito usar BOOT0? ¿El cargador de arranque de la memoria interna activa los pines SWD para que programe el flash? Tampoco hay pin BOOT1 en este caso específico (Ctrl+F "Boot1" no produce menciones útiles en toda la hoja de datos).

  3. Quiero tener un software actualizable por el usuario. A través de USB. Es fácil hacerlo con ATMega, solo lancé un USB-UART CP2102N, y funciona de maravilla, puede actualizar el software todo el día. Supongo que podría escribir mi propio gestor de arranque UART para STM32, es solo una cuestión de determinación y tomar pastillas para mantenerme cuerdo en el proceso. Pero si hay una manera más fácil, no quiero reinventar la rueda (aunque esa parte de programación en el núcleo parece mucho más grande que solo el chip CP2102N). Encontré este documento sobre el uso de UART: STM32 Bootloader UART parece prometedor, no parece demasiado difícil usar CP2102N para programar STM32, supongo.

Por supuesto, también he visto algunos videos en YouTube sobre STM32, pero básicamente son "parpadeo-parpadeo" con núcleo, no con dispositivo independiente, por lo que no se habla mucho sobre hojas de datos, funciones alternativas, control de cosas a través de registros; y configurar I2C o SPI no será un problema de todos modos. Básicamente, no tengo problemas para controlar los registros y esas cosas, solo necesito que funcione primero. Es como si pudiera conducir un automóvil, pero no tengo una llave para encender el motor, o tal vez la tengo y no me doy cuenta. Para no hacer explotar el auto al encenderlo, prefiero hacer las preguntas primero.

Gracias

Necesita descargar el manual de referencia. Todas sus preguntas serán contestadas.
Respuesta corta: de acuerdo con el manual de referencia, swd funciona de inmediato.

Respuestas (1)

  1. Eso es correcto. Solo necesita SWDIO y SWCLK. La mayoría de las veces no se necesita la conexión NRST. AFAIK, el depurador puede enviar algún tipo de secuencia de reinicio suave usando datos y pines de reloj. Es posible que se necesite un pin de reinicio de hardware si los pines SWDIO y SWCLK están configurados como pines GPIO (relacionados con su segunda pregunta) justo después del reinicio, lo que evita la depuración. Nunca lo he necesitado, pero aún así es aconsejable incluirlo en su encabezado de depuración si tiene espacio en su PCB. También hay un pin SWO, que proporciona una salida de depuración adicional si está habilitado. No es esencial, y los clones ST-Link chinos no tienen el pin roto en su conector, aunque su firmware lo admita.
  2. Después del reinicio, todos los pines relacionados con la depuración están disponibles a menos que los configure para otros fines en su firmware. En algunos modelos, esto incluye los pines JTAG. Si los configura como pines GPIO (o para otros fines) justo al comienzo de su firmware, es posible que el depurador no tenga tiempo para iniciar una sesión de depuración. En este caso, puede ser necesario el uso del pin de hardware NRST. Los pines BOOT no están relacionados con la configuración de pines de depuración. Configuran la asignación del espacio de direcciones. La mayoría de las veces conecta BOOT0 a GND para arrancar desde flash. También es posible arrancar desde la RAM o el cargador de arranque interno de fábrica.
  3. Como dije en la respuesta 2, los dispositivos STM32 tienen cargadores de arranque internos, que se pueden activar usando el pin BOOT0 (con los bytes de OPCIÓN correctos en flash). También es posible saltar a este cargador de arranque programado de fábrica desde el código de usuario. Aunque es un poco complicado, es posible encontrar ejemplos en la web. Algunos dispositivos también proporcionan cargadores de arranque USB DFU (STM32F042, por ejemplo). Al usar estos productos, ni siquiera necesita usar un convertidor USB - Serie. El cargador de arranque programado de fábrica también puede admitir otras interfaces, como SPI o CAN, pero no estoy seguro y no puedo recordar. Debe consultar la documentación específica del dispositivo.

Por cierto, el pin SWIM se usa para programar y depurar partes STM8 (sí, ST-Link es capaz de eso). No está relacionado con las piezas STM32.

Entonces, en teoría, ni siquiera necesito iniciar el cargador de arranque para programar la cosa, es programable a través de SWD incluso mientras está ejecutando el programa flash. ¿Es correcta esta afirmación? No voy a usar pines SWD para nada más si uso SWD. Y todavía necesito conectarlo a USB para que el usuario final actualice el firmware. Escribiré un pequeño programa para él, no hay problema, por lo que no hay forma sin USB-Serial, si es posible programar una memoria flash a través de UART. A menos que ponga el programa en la tarjeta microSD, que tengo (con SPI entonces)
Correcto, ST-Link puede detener y programar (o depurar) un STM32 que se ejecuta desde flash, dado que los pines SWD se dejan en los estados predeterminados y no se configuran para otros fines. Su STM32L051K8T6 no parece tener USB, por lo que el usuario final probablemente necesitará un convertidor de USB a serie para acceder al gestor de arranque programado de fábrica. Tenga en cuenta que algunos modelos, como STM32F103, tienen hardware USB pero carecen del cargador de arranque USB programado de fábrica.