¿Cómo elegir la velocidad máxima de salida de UART?

Cuando abro un proyecto en STM32CubeMX y configuro un UART, hay una configuración de velocidad de salida máxima (en Configuración de GPIO ) que por defecto es Muy alta . Las opciones son:

  • Bajo
  • Medio
  • Alto
  • Muy alto

En el Manual de usuario de STM32CubeMX dice lo siguiente sobre la velocidad máxima de salida :

Velocidad de salida máxima de GPIO (solo para periféricos de comunicación)
Está configurada en Baja de forma predeterminada para optimizar el consumo de energía y se puede cambiar a una frecuencia más alta para adaptarse a los requisitos de la aplicación.

Pero en realidad está configurado en "Bajo" solo para GPIO de salida regulares. Para los pines UART TX/RX, en realidad está configurado en Muy alto.

Tengo algunas preguntas con respecto a esto:

  1. ¿Qué "requisitos de aplicación" requerirían una configuración más alta?
  2. ¿Por qué esta configuración predeterminada es muy alta en UART y baja en GPIO de salida?
  3. Lo que es más importante, ¿pueden hablar (comunicarse) 2 UART con diferentes velocidades máximas de salida o deben configurarse de la misma manera? ¿Qué implicaciones ocurrirían si el UART de cada lado se configurara de manera diferente con respecto a esta configuración?

Respuestas (2)

La configuración de velocidad de GPIO solo configura la fuerza de la unidad o la capacidad de la cantidad de corriente que el pin puede generar y absorber. Más corriente significa transiciones de señal más rápidas a cargas capacitivas más pesadas.

1) Por ejemplo, conducir una puerta FET que es altamente capacitiva y necesita pasar un tiempo mínimo a mitad de camino

2) Alguien ha elegido estos valores predeterminados a menudo solo porque necesita tener una configuración predeterminada básica que funcione en su mayoría. Usar, digamos, 3 megabaudios con cables largos para depurar UART podría ser más seguro para tener una alta capacidad de manejo, pero hacer parpadear un LED en GPIO una vez por segundo no importa qué configuración se use.

3) Por supuesto, pueden comunicarse si la velocidad de transmisión utilizada es lo suficientemente lenta como para que la velocidad de respuesta de la señal no contribuya mucho al error. La fuerza de la unidad más débil puede funcionar a aproximadamente 2 MHz tal vez, depende de qué MCU se use.

Con respecto a 3, ¿cómo sé si mi velocidad en baudios es "lo suficientemente lenta"? es 115200
Miras los números en las hojas de datos. Si la configuración más débil puede generar una frecuencia de al menos 2MHz, eso es aproximadamente 17 veces la tasa de bits de 115200 que necesita. Mirando las cosas desde el tiempo máximo de subida/bajada de 100 ns, su período de bits es de 8680 ns, por lo que sus bits son casi 87 veces más largos, por lo que gastar aproximadamente el 1% del tiempo de bit cambiando el estado no es nada en UART, ya que UART toma muestras del pin en 16 veces la tasa de bits, o aproximadamente cada 543 ns a una tasa de bits de 115200.

Esto corresponde a la configuración de potencia de la unidad del pin GPIO, configurada por los bits de registro OSPEEDR. Para cada pin, hay 4 configuraciones posibles. Elegir una unidad de salida más fuerte permite una frecuencia operativa máxima más alta (porque las transiciones se hacen más rápido), pero conduce a un mayor consumo de energía cuando el pin cambia y a mayores emisiones de EMI. Menor fuerza significa menor EMI, menor consumo de energía y menor velocidad máxima.

Eche un vistazo a la hoja de datos de la MCU específica que está utilizando para verificar a qué se traduce exactamente esto. Por ejemplo, para STM32F405/407 aquí está (capítulo 5.3.16: Características del puerto de E/S , párrafo Características de CA de entrada/salida ):

ingrese la descripción de la imagen aquí

Entonces puede ver que incluso en la configuración mínima, en el peor de los casos mencionado, puede esperar 2MHz. Esto es probablemente mucho más alto de lo que ya está configurado su UART, por lo que en realidad no es necesario configurarlo en "muy alto". Probablemente lo hagan de manera predeterminada para estar seguros, pero no tiene su tasa de baudios configurada a 100 Mbps, ¿verdad?

Como consejo general, mantenga esta configuración en "bajo" a menos que sea realmente necesario.

Ahora, por supuesto, dos UART configurados con diferentes configuraciones pueden hablar entre sí (siempre que la tasa de bits sea inferior a la velocidad máxima que el GPIO puede soportar de acuerdo con la tabla anterior y la configuración que eligió). El UART configurado con una configuración más fuerte tendrá una salida mucho más nítida que el otro e irradiará más EMI, pero podrán comunicarse entre sí.