Uart/Usart: use solo Rx-pin

Estoy diseñando una placa con un MCU stm32f722 (versión de 64 pines) y no puedo permitirme desperdiciar/no usar ningún GPIO.

Mi pregunta es la siguiente : ¿Existe una opción para usar solo el pin Rx de un uart / usart para que el pin Tx se pueda usar para otra cosa (en mi caso, SPI_SCK)?

Si habilito un uart / usart en STM32CubeMx y voy a la pestaña "Configuración", puedo cambiar "Dirección de datos" a "Solo recibir". Pero esto no deshabilita el Tx-pin.

Otra forma puede ser usar el modo semidúplex, pero de todos modos se usaría el pin Tx y no podría usarlo para SPI.

Nota: todavía estoy planeando mi propia placa y no tengo ningún hardware para probar.

¿Ha considerado leer la hoja de datos de la MCU?
Del manual de referencia : "Cuando el transmisor está desactivado, el pin de salida vuelve a su configuración de puerto de E/S". No estoy 100% seguro, así que no lo publico como respuesta, pero creo que esto significa que puede tener cualquier tipo de configuración para este pin. Entonces, la función alternativa establecida en SPI_SCK y UART no controlará este pin. Por supuesto, póngase en contacto con ST.
o simplemente pruébalo.

Respuestas (2)

Sin estudiar la hoja de especificaciones de su parte en particular, sería inusual que le permitiera esa flexibilidad. Aunque según el comentario de Bence, este podría.

Sin embargo, eso no significa que no puedas compartir pines para diferentes funciones.

La clave aquí es dedicar algún pin, o una cantidad de pines, para permitir que los circuitos externos, multiplexores, puertas, etc. comprendan cómo el dispositivo está usando los pines actualmente. Parece que significa atar un par de pines más, pero si tiene suficientes pines que puede compartir, la cantidad total de pines se puede reducir.

En el caso de las líneas seriales, por supuesto necesitarías multiplexarlas en el tiempo. Es decir, no podría realizar la comunicación en serie al mismo tiempo que usaba los pines para las otras funciones.

En realidad, es bastante común que MCU U(S)ARTS admita un modo semidúplex en el que se usa un pin u otro para transmitir y recibir. Pero si es compatible, la pregunta es si el pin utilizado es el que quiere el autor de la pregunta, o si es el otro.

Tendría que consultar la hoja de datos para ver si se admite un modo semidúplex usando solo el pin de recepción; por ejemplo, podría tener mala suerte y descubrir que se ofrece uno pero usa el pin de transmisión.

Sin embargo, hay una solución que definitivamente funcionaría.

  1. Configure el pin de transmisión para la función no USART para la que desea usarlo, ya que STM32 permite la asignación única de cualquier pin, independientemente de los demás.

  2. Configure el pin RX para la función alternativa de recepción de USART

  3. Cuando desee transmitir, reconfigure el pin RX como GPIO y golpee la señal. La transmisión de bits es quizás más limpia que tener que recibir muestras de bits de todos modos, ya que puede continuar usando la interrupción de recepción de USART siempre que reconfigure el pin a tiempo.

Una cosa que tendrá que averiguar es qué sucede con el USART mientras está transmitiendo un bit bang; no estoy seguro de si recibirá sus propias transmisiones o no, o si incluso entrará en un estado de error, pero puede borrar las banderas cuando vuelves al modo de recepción.

Solo necesito recibir datos y no quiero enviar nada. Por lo tanto, el paso 3 no es necesario. ¿Está seguro de que usar el pin RX para USART no afectará la funcionalidad del reloj SPI en el pin TX?