Sí (si entiendo su pregunta correctamente).
Como no especificó el número de pieza, tomemos como ejemplo el código de 48 pines% co_de que se encuentra en los tableros de la "píldora azul".
STM32F103C8T6
y USART2
están programados para USART3
y PA2-PA3
, pero PB10-PB11
se puede reubicar del par predeterminado USART1
a PA9-PA10
. (En realidad, también se pueden reubicar PB6-PB7
y USART2
, pero a los pines que no existen en el paquete de 48 bits).
La reasignación se controla mediante los bits USART3
del registro USART1_REMAP
.
Bit 2 USART1_REMAP : reasignación de USART1
Este bit es establecido y borrado por el software. Controla la asignación de las funciones alternativas de USART1 TX y RX en los puertos GPIO.
0: Sin reasignación (TX / PA9, RX / PA10)
1: Reasignación (TX / PB6, RX / PB7)
Por supuesto, solo una de las conexiones puede estar activa en un momento dado, pero la conmutación puede ocurrir en cualquier momento. El otro dispositivo se desconectará, no recibirá ningún dato del controlador, y se perderá cualquier dato enviado al controlador.
La parte difícil es finalizar correctamente la comunicación con un dispositivo antes de la conmutación.
-
Si solo está enviando la salida a un puerto, espere hasta que se establezca el bit AFIO->MAPR
en TC
. No es suficiente esperar a USART1->SR
, ya que el UART puede estar todavía ocupado transmitiendo el último byte, que se perderá, o parcialmente transmitido al dispositivo incorrecto.
-
Si el control de flujo de hardware es posible, puede conectar un pin GPIO a la entrada CTS del dispositivo. Establezca el pin en 1 para indicar al dispositivo que deje de transmitir, y espere el tiempo necesario para terminar de enviar un byte completo antes de la conmutación.
-
De lo contrario, los pasos necesarios para cerrar la comunicación dependen del protocolo de comunicación. Compruebe si hay algún tipo de control de flujo de software disponible.
También hay un implementación de software UART para ST. Aunque es para la serie F4, no veo ninguna razón por la que no se pueda transferir a la F1.