¿Cómo diseñar una placa STM32 con UART a través de una conexión USB?

Lo siento si esto parece una pregunta estúpida, pero estoy diseñando una PCB personalizada basada en el microcontrolador STM32F303RE y estoy un poco confundido sobre cómo se debe conectar el UART en el hardware para comunicarse a través de serie a través de USB.

Tengo un conector microUSB a bordo, ¿deberían conectarse los pines UART directamente a este conector? ¿O necesito usar los pines USB en el STM32 y configurar el microcontrolador como un dispositivo USB y conectar el UART a estos pines de alguna manera (o no usarlos en absoluto)?

Comencé con una placa Nucleo para el desarrollo y puedo comunicarme a través de UART allí (usando las funciones HAL UART), pero mirar el esquema es confuso debido al ST-LINK integrado. Por lo que puedo ver, la señal UART del STM32 se pasa a los pines UART de la MCU ST-LINK y los pines USB de la MCU ST-LINK están conectados al puerto MicroUSB, pero no estoy seguro de cómo los datos se traspasa? ¿Está de hecho utilizando las funciones USB HAL para convertir los datos UART recibidos?

Supongo que está preguntando cómo conectar la MCU a algún convertidor de USB a serie de estilo FTDI. Pero su chip tiene una interfaz USB incorporada que estoy bastante seguro de que es compatible con CDC. Esta pregunta parece ser demasiado amplia y parece que es posible que deba investigar mucho más antes de diseñar su PCB.
Es posible que desee comprarlos y usarlos en menos tiempo para hacer uno o considerar otros caminos electronics.stackexchange.com/questions/206521/… o mobilewill.us/stm32-nucleo-and-dfu-usb-bootloading
No puede conectar los pines UART a un conector USB. Debe elegir entre usar el puerto USB nativo de la MCU, que es el más flexible y económico, pero el más difícil de poner en funcionamiento, o usar alguna solución USB<>UART conectada a los pines UART, que tiene la ventaja de funcionar mucho antes en el desarrollo de su firmware. proceso y ser mucho más independiente de los errores en el mismo y algo (si no completamente) compatible con cosas como la depuración de puntos de interrupción que rompería por completo una sesión USB.
Recomiendo que esta pregunta no se cierre, ya que (y sus respuestas) exponen un malentendido central de estas tecnologías.
Gracias por todas las opciones, ahora puedo ver mi ignorancia de la tecnología. Creo que me desconcertó el funcionamiento del Núcleo, ¡pero todo eso está claro ahora!

Respuestas (2)

No puede conectar el UART Rx/Tx directamente a las señales DP/DN en el conector USB.

Básicamente tienes dos opciones:

  1. Agregue software a su aplicación para usar el periférico USB en su STM32 para implementar un puerto COM virtual. ST tiene algunos proyectos de ejemplo para esto, por lo que no es terriblemente difícil, pero probablemente llevará algo de tiempo implementarlo. Creo que hay un software de ejemplo aquí: https://www.st.com/en/embedded-software/stsw-stm32121.html . En este caso, conectaría los pines USB del STM32 al conector USB.

  2. Puede comprar un chip para proporcionar un puente de USB a UART. FTDI hace varias versiones de esto, como esta: https://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT230X.pdf

    Esto requiere un chip adicional, pero probablemente sea la opción más fácil para que funcione. En este caso, conectaría los pines UART a los pines Rx/Tx del chip FTDI y luego conectaría el par USB en el chip FTDI al conector USB.

  3. Supongo que también hay una opción 3. Podría comprar un cable USB a TTL UART y conectarlo a su placa, en lugar de colocar el conector USB en su placa, si desea ser lo más simple posible tanto con el software como con el diseño de PCB. Conjuntos de cables FTDI: https://www.ftdichip.com/Products/Cables/USBTTLSerial.htm .

La opción 3 es realmente la misma que la opción 2: el chip está oculto en el ensamblaje del cable.
¡Ja! Parece que escribimos la misma respuesta al mismo tiempo. No importa, esta pregunta probablemente se cerrará de todos modos :-)
@DaveTweed Sí, eléctricamente termina igual.
@bitsmack Jaja. Sí, nuestras respuestas están sorprendentemente alineadas; pero el tuyo fue más rápido, mejor escrito y tiene imágenes, ¡así que te felicito!

Los periféricos UART y USB son entidades completamente separadas.

  1. Si desea un UART simple, generalmente puede dividir los pines TX, RX y GND en un conector y luego conectarlos a un dispositivo habilitado para UART apropiado. Debe configurar ambos dispositivos para que coincidan, en cuanto a velocidad (velocidad en baudios), tipo de paridad, número de bits de parada, etc.

  2. Si quieres que tu proyecto se convierta en un dispositivo USB es más complicado. Además de las pautas de hardware bastante estrictas, deberá manejar todas las cosas del protocolo USB "bajo el capó". ST pone a disposición una biblioteca de dispositivos USB, que se puede encontrar aquí . Se necesita un poco de aprendizaje.

  3. Una tercera opción es usar un convertidor de USB a UART. En este caso, el convertidor maneja todos los requisitos del protocolo USB y UART. Toma UART simple de su microcontrolador y lo canaliza a un host USB a través de un cable USB. Puede incorporar un circuito en su placa para manejar la conversión, o puede comprar un convertidor externo que otra persona ya haya diseñado.

Un ejemplo de un convertidor USB-Serie interno sería un FT232H . Debería agregarlo y su circuito de soporte a su diseño:

USB_IC

Un ejemplo de un cable convertidor prefabricado estaría aquí . En este caso, lo conecta a un puerto USB (quizás en una PC) y conecta el otro extremo a los pines UART en su dispositivo:

adaptador_USB

Estos son solo ejemplos. Hay muchos convertidores, tanto internos como externos, para elegir.


Por cierto, no conecte simplemente las señales UART a un conector USB. No solo no funcionará, sino que los diferentes niveles de voltaje pueden destruir su dispositivo y/o el dispositivo remoto.

Si tuviera que usar el cable, ¿sabe si se requieren resistencias de extracción? En el esquema del cable de la hoja de datos, dice que las resistencias pull-up no están instaladas, pero no estoy seguro de si son necesarias. ¿También tengo razón en que el TX en el cable está conectado al RX en mi MCU y RTS a CTS de manera similar? En ese sentido, ¿son necesarios los pines RTS y CTS para el cable?