impresión STM32 a través de UART sin Nucleo / Discovery

2

Me gustaría, para fines de depuración / rastreo, imprimir textos (preferiblemente a través de printf pero solo texto también está bien) desde un STM32F103C8T6 a una aplicación de terminal (PC).

Me di cuenta de que todos los ejemplos utilizan un tablero Nucleo o Discovery pero no los tengo. Estoy usando ST Link / V2 y System Workbench (Eclipse).

¿Alguien sabe cómo hacer esto o si es posible? (Supongo que tal vez con algún convertidor USB / RS232).

    
pregunta Michel Keijzers

2 respuestas

1

Todos los STM32F0 que se me ocurren vienen con hardware UART, lo que significa que solo necesitas escribir tu cadena en alguna dirección y activar la transferencia.

El conocimiento de cómo hacerlo se puede obtener del Manual de referencia de esa familia (número de documento ST RM0008), o simplemente directamente desde el controlador UART dentro del paquete de software STM Cube.

Eléctricamente, realmente obtendrá un UART TTL: cualquier convertidor TTL de serie a USB funcionará. Las placas Nucleo solo contienen un segundo microcontrolador que reproduce un puente de USB a STLink y de USB a TTL-UART.

Para una depuración "fácil", el UART es ciertamente la interfaz de comunicaciones menos propensa a errores en el chip. Si tiene la tentación de comunicarse directamente con la PC: su MCU viene con un transceptor USB2. Usted puede, agregando algunas resistencias, conecte eso directamente a su PC, y déjelo como un adaptador en serie, ¡simplemente dándole sus mensajes o datos! Es decir, dado que tienes un firmware que maneja la pila USB. ST ofrece una biblioteca para hacer eso, y eso viene con ejemplos. Sin embargo, tenga en cuenta que el USB es mucho más complicado que el UART, y si solo desea imprimir ocasionalmente cadenas cortas, el UART es suficiente. La interfaz USB le permite enviar paquetes de datos USB a través de USB2 Full Speed (que es el estándar de 12Mb / s), lo que puede ser una gran ventaja si lo necesita, por ejemplo. para generar algo que muestre una señal rápidamente (por eso usé USB en un ARM por primera vez) a largo plazo.

    
respondido por el Marcus Müller
2

No hay problema con eso. Tienes pocas opciones. La primera forma es configurar su UART (el proceso puede ser muy sencillo si utiliza CubeMX) para enviar mensajes de texto y luego conectar los pines RX y GND de su USB-RS232 a los pines TX y GND de su placa, respectivamente. Luego puede transmitir sus registros, por ejemplo, con la función HAL_Uart_Transmit() . La opción más avanzada es redirigir la salida estándar a esa UART . Pero se necesitará mucho esfuerzo para configurar y ejecutar esto.

Hay una forma mucho mejor y más fácil de lograr tu objetivo y se muestra en el video . El ST-Link V2 original (e incluso los clones chinos, excepto los dongles más baratos) tienen un pin SWO. Puede redireccionar la versión estándar de su aplicación a través de esta interfaz mediante la tecnología ITM Trace, que forma parte del núcleo de depuración CoreSight de su MCU. En primer lugar, debe habilitar el pin SWO en la utilidad CubeMX. Luego debe redirigir su stdout a las macrocélulas ITM, para eso puede usar el código de este artículo . Permitirá hacer un registro al estilo printf. Para ver esos registros, puede usar el visor SWO de la utilidad st-link (botón "Printf via SWD"). Puede haber un problema si utiliza el visor SWO de la utilidad ST-link y el depurador de su IDE simultáneamente: el controlador ST-link no funcionará con dos aplicaciones simultáneamente. Es por eso que recomiendo usar IDE's más avanzados. Puede echar un vistazo a Keil uVision: permite utilizar las capacidades de ITM y depurador simultáneamente desde el depurador de uVision. Tienen licencias de evaluación, por lo que puedes intentarlo.

Hay una tercera forma de resolver su problema y se llama semihosting. Tengo una experiencia muy pequeña con él y no puedo recomendar su uso. Un evento semihosted detiene la MCU y necesita soporte de las herramientas de depuración para manejar la operación semihosted y sin las herramientas de depuración adjuntas, un evento semihosted detendrá permanentemente la MCU.

    
respondido por el Vadimchik

Lea otras preguntas en las etiquetas