UART compartido en STM32F103x (o cualquiera)

0

Esta es una de esas preguntas para principiantes, lo siento mucho.

Estoy intentando agregar un chip inalámbrico a mi PCB actual, pero no hay más UART disponibles en STM32F103. Hay un pin UART (RX, TX) "reservado" para el depurador / programador en el chip.

Entonces mi pregunta es: ¿Puedo compartir este UART entre el controlador de Wifi y el programador?

¿Me gusta desconectar el wifi cuando ejecuto el programador, y de otra manera?

¿O pueden funcionar esos dispositivos al mismo tiempo?

En caso afirmativo, ¿qué tomaría también desde el punto de vista del software?

Gracias

    
pregunta Marakoss

1 respuesta

3

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.

    
respondido por el berendi

Lea otras preguntas en las etiquetas