Análisis USART de STM32

Conocimientos básicos de bus y comunicación.

Antes de presentar el USART, debemos comprender algunos conocimientos básicos de transmisión de información, y la mayor parte de la transmisión de información del microcontrolador se lleva a cabo mediante el bus.

definición de autobús

El bus se refiere al canal público a través del cual el sistema de microcomputadora y el instrumento inteligente ya se han transmitido información entre sí, y es la línea de interconexión real entre los módulos internos del chip, entre dispositivos y entre sistemas. Por ejemplo, para permitir que el bus intercambie información de manera efectiva y confiable, se deben realizar una serie de regulaciones sobre las señales del bus, las reglas de transmisión y los medios físicos para la transmisión, estas regulaciones se denominan protocolos de bus o reglas de bus.
El bus se puede dividir en las siguientes tres categorías según su ámbito de uso u objetos de conexión:

Chip bus : el canal que conecta cada módulo en el chip, utilizado para la transmisión de información entre módulos. El bus en chip de los microcontroladores adopta principalmente un
bus de sistema de estructura de bus único paralelo (multiplexación por división de tiempo) (también llamado bus interno) : un canal para transmitir información entre módulos y dispositivos dentro de un sistema de microcontrolador o instrumento inteligente. El bus del sistema se divide en bus del sistema paralelo (como bus PCI, bus VXI) y bus del sistema en serie (como I2C, SPI, 1 cable).
Bus de comunicación (también llamado bus externo) : un canal para transferir información entre dos o más sistemas. El bus de comunicación se divide en bus de comunicación paralelo (como el bus IEEE488) y bus de comunicación en serie (como el bus RS232, RS485).

El bus externo se puede subdividir en dos buses de comunicación:

Comunicación paralela : cada bit del byte de datos se transmite o recibe al mismo tiempo.Características
:La velocidad de transmisión es rápida.Cuando la distancia de transmisión es larga y la cantidad de bits es grande, el costo aumentará y la tasa de éxito de la comunicación será reducido.
En la comunicación paralela, cada bit de datos se transmite al mismo tiempo, lo que significa que tantos bits de datos necesitan tantas líneas de transmisión, pero se pueden transmitir múltiples bits al mismo tiempo para lograr una transmisión de datos rápida.

Comunicación en serie : cada bit del byte de datos se transmite o recibe bit a bit en secuencia
Características: solo se necesitan 2-3 líneas de transmisión, la línea es simple y el costo es bajo, especialmente adecuado para comunicación a larga distancia, pero la transmisión la velocidad es más lenta que la comunicación paralela.
La comunicación en serie consiste en enviar datos bit a bit en orden de bytes. En comparación con la comunicación en paralelo, la comunicación en serie requiere muchas menos líneas de transmisión, pero la velocidad de transmisión también será más lenta. Debido al alto costo de la comunicación en paralelo y la baja tasa de éxito de la comunicación durante la transmisión a larga distancia, solo una pequeña parte del método de comunicación utilizado en las aplicaciones prácticas es la comunicación en paralelo, y la mayoría utiliza la comunicación en serie.

Comunicación asíncrona y síncrona

El tipo de comunicación en serie se puede dividir en comunicación asíncrona y comunicación síncrona según los diferentes métodos de transmisión de datos.

comunicación asíncrona

En la comunicación asíncrona, los datos o caracteres se envían cuadro por cuadro. Un marco de datos se define como un formato de comunicación de caracteres completos, también conocido como "marco de formato", generalmente expresado en binario.

Formato de datos

El formato de comunicación completo de un carácter es una trama de datos, que consta de un bit de inicio, un bit de datos, un bit de verificación de paridad y un bit de parada.
inserte la descripción de la imagen aquí
Cada parte de la trama de datos:
bit de inicio : una señal lógica "0", que ocupa un bit, utilizada para notificar al dispositivo receptor que ha comenzado un nuevo carácter.
Bit de datos : seguido del bit de inicio está el bit más bajo (LSB) de 5 a 8 bits de datos. La transmisión asíncrona estipula que el bit bajo viene primero y el bit alto viene después.
Bit de paridad : Inmediatamente después del bit más alto (MSB) de los datos, se ocupa un bit. Cuando se verifica la paridad, se establece en "1" o "0" según el protocolo (establecer según sea necesario).
Bit de parada : es una señal lógica "1", que puede ocupar 1-2 bits. Cuando el extremo receptor recibe el bit de parada, indica el final de una trama de datos. Al mismo tiempo, está listo para recibir el siguiente marco de datos, siempre que se reciba otro "0" lógico, es el comienzo de un nuevo carácter.

Características de comunicación asíncrona:
1. La transmisión se realiza en unidades de caracteres (tramas de datos), y el intervalo de tiempo entre tramas es arbitrario, es decir, las tramas son asíncronas, y el envío y la recepción correctos de ambas partes están controlados por el bit de inicio.
2. Cada bit en cada marco de datos se transmite en un tiempo fijo, por lo que los dos lados de la comunicación deben usar la misma velocidad en baudios para realizar la sincronización del envío y recepción de marcos de datos.
3. Dado que el marco de datos de la comunicación asíncrona tiene un formato fijo, los dos lados de la comunicación solo necesitan enviar y recibir datos de acuerdo con el formato de marco acordado, por lo que su estructura de hardware es más simple que la de la comunicación síncrona.
4. Dado que el bit de inicio y el bit de parada para la transmisión y recepción síncrona se insertan en la trama de datos, su eficiencia de comunicación es menor que la de la comunicación síncrona.
5. Se puede agregar un bit de verificación al marco de datos de la comunicación asíncrona para detectar errores en la transmisión de datos, que se usa ampliamente.

tasa de baudios

La razón clave por la cual la comunicación asíncrona se llama comunicación asíncrona es que las dos partes en la comunicación no comparten la misma señal de reloj.Cuando la parte de comunicación A quiere transmitir datos a la parte de comunicación B, si la frecuencia de reloj de la parte A y la parte B es diferente, entonces A transmite los datos a la frecuencia de reloj de A de acuerdo con el formato de la trama de datos, y si el receptor B recibe los datos de acuerdo con su propia frecuencia de reloj, puede ocurrir una desalineación de datos o una fuga de bits. Esto requiere que A y B acuerden la misma frecuencia para enviar y recibir datos, que es la velocidad en baudios.
La tasa de baudios es un indicador importante de la comunicación asíncrona, ya que refleja la tasa de transmisión de datos.
Definición de tasa de baudios: el número de bits de datos binarios transmitidos por unidad de tiempo. Suele expresarse por el número de bits transmitidos por segundo, que es b/ps o bps (bit por segundo). Cuanto mayor sea la tasa de baudios, mayor será la velocidad de transferencia.
Tasas de baudios comúnmente utilizadas: 1200, 1800, 2400, 4800, 9600, 115200

comunicación sincrónica

La comunicación síncrona es un método de comunicación que transmite datos de forma continua y en serie. El extremo de envío y el extremo de recepción necesitan una señal de reloj síncrono para controlar la sincronización de los dos lados de la comunicación. La señal de sincronización es generada por el host que inicia la comunicación.
La llamada sincronización significa que los dos lados de la comunicación necesitan transmitir información a la misma frecuencia de señal de reloj.La comunicación síncrona requiere al menos 3 líneas: línea de datos SDA, reloj síncrono SCL y tierra común. El formato de datos de la comunicación síncrona se muestra en la figura, y su característica es comunicarse en la unidad de "serie de datos". Una serie de datos incluye las siguientes tres partes:

1. Carácter de sincronización: indica el inicio de la transmisión de datos para lograr la sincronización entre el extremo de envío y el extremo de recepción.
2. Bloque de datos: el contenido de datos a comunicar. Después de que finalice el carácter de sincronización, envíe y reciba de forma continua y secuencial.
3. Carácter de verificación: para verificar la exactitud de los datos de comunicación y mejorar la confiabilidad de la transmisión de datos, después de enviar el bloque de datos, generalmente es necesario enviar el código de verificación del bloque de datos de acuerdo con el acuerdo. El método de verificación y la longitud del código de verificación se realizan de acuerdo con el protocolo de comunicación acordado.
inserte la descripción de la imagen aquí
El bus del sistema en serie (bus interno) generalmente adopta métodos de comunicación síncronos, como IIC, SPI, USB.

Método de transmisión de datos de comunicación en serie.

La comunicación en serie es un método de comunicación de uso común. De acuerdo con la dirección de transmisión de datos, la comunicación en serie se puede dividir en tres métodos de transmisión: simplex, half-duplex y full-duplex. 1. La transmisión simplex es un tipo de transmisión de datos
en
un solo dirección En el modo de comunicación, la máquina A solo se puede usar como transmisor, y la máquina B solo se puede usar como receptor, y los datos se transmiten de la máquina A a la máquina B. La transmisión de datos se puede realizar con una sola línea de transmisión durante la comunicación.
inserte la descripción de la imagen aquí
2. Modo de transmisión semidúplex
Los datos se pueden transmitir en dos direcciones, pero al mismo tiempo, solo uno puede enviar y el otro puede recibir. Solo se utiliza una línea de transmisión para transmitir datos alternativamente en ambas direcciones. Los datos se pueden enviar en ambas direcciones, pero no simultáneamente.
inserte la descripción de la imagen aquí
3. Modo de transmisión full-duplex
Hay 2 líneas de datos entre la máquina A y la máquina B. Tanto la máquina A como la máquina B tienen módulos de hardware de receptor y generador independientes, por lo que ambas partes pueden enviar y recibir al mismo tiempo en cualquier momento.
inserte la descripción de la imagen aquí
Entre estos tres métodos de transmisión, la transmisión simplex se puede entender como escuchar la radio, y la información solo se puede escuchar desde la radio, pero no se puede transmitir a la radio; la transmisión semidúplex se puede entender como una conversación de walkie-talkie, cuando una parte está hablando Cuando la parte que habla está en el estado ocupado, la otra parte solo puede escuchar pero no hablar, y la parte que habla solo puede hablar pero no escuchar. Solo cuando la parte que habla se detiene y se libera el estado ocupado puede hablar ;transmisión full-duplex puede Se entiende como una llamada telefónica, ambas partes en la llamada pueden hablar o escuchar información en cualquier momento sin ser restringido por la otra parte.

USARTO

USART es un método de comunicación full-duplex. STM32 tiene 5 interfaces de comunicación en serie: 3 transceptores síncronos/asíncronos universales (USART1, USART2, USART3) y dos transceptores asíncronos universales (UART4, UART5). El número de chips de diferentes modelos es diferente. USART1 está conectado al bus APB2 de alta velocidad con una frecuencia de funcionamiento de 72 MHz (que admite una frecuencia de transmisión de hasta 4,5 Mbps); el otro está ubicado en el bus APB1 con una frecuencia de funcionamiento de 36 MHz (frecuencia de transmisión de 2,25 Mbps).

Pines de interfaz USART

La comunicación bidireccional de USART requiere al menos dos pines: pin de entrada RX (recepción de datos, recepción de datos) y pin de salida TX (transmisión de datos). Cuando dos dispositivos se comunican, es necesario conectar el TX del dispositivo 1 al RX del dispositivo 2 y conectar el TX al RX del dispositivo 2. inserte la descripción de la imagen aquí
En el modo de comunicación síncrona, el reloj de sincronización de datos debe enviarse a través del pin de salida SCLK del reloj. Para admitir el control de flujo de hardware, también es necesario solicitar el envío de RST y borrar el pin CTS.
Sin embargo, los pines de la interfaz UASRT se comparten con GPIO en el microcontrolador STM32. En otras palabras, el pin USART usa el pin de función AFIO. Si el GPIO todavía quiere usar este pin de E/S, puede usar el pin de la función de reasignación.

Formato de caracteres de comunicación asíncrona en serie

En la comunicación en serie, la información de datos, control y estado se transmite utilizando la misma línea de señal, por lo que las partes emisoras y receptoras deben cumplir con el protocolo de comunicación común para resolver los problemas de velocidad de transmisión, formato de información, sincronización de bits, formato de caracteres , verificación de datos, etc. La comunicación asíncrona en serie se transmite en unidades de caracteres, y su protocolo de comunicación es un protocolo de comunicación asíncrona de inicio y parada.
inserte la descripción de la imagen aquí
Una vez completada la transmisión de un carácter, se puede transmitir el siguiente carácter, o se puede transmitir el siguiente carácter después de estar inactivo durante un período de tiempo. Los bits inactivos están en un nivel lógico 1. El "bit" en el formato de carácter significa binario, y la duración de cada bit es la misma, que es el recíproco de la tasa de transmisión de datos. La tasa de transferencia de datos también se conoce como tasa de bits, que es el número de bits binarios transferidos por segundo. **La tasa de bits es igual a la tasa de baudios cuando se transmiten dígitos binarios y cada bit tiene la misma longitud. **Tasa de baudios significa la tasa de modulación de datos, y su unidad es baudios.

Estructura USART

La siguiente figura es un diagrama de bloques de la estructura USART del microcontrolador STM32:
inserte la descripción de la imagen aquí
la parte más importante es la parte sombreada de la figura, y las otras partes son la interfaz y las partes de control.

Al enviar datos, el bus de datos transfiere los datos que se enviarán al registro de datos de envío (TDR), y el registro de datos de envío (TDR) luego transfiere un byte de datos al registro de desplazamiento de envío, y el registro de desplazamiento de envío transfiere los datos de este byte se transmite al pin TX bit a bit según el bit binario. Después de que los datos del byte anterior se envíen a través del registro de desplazamiento de datos, el contenido del registro de datos de envío se enviará al registro de desplazamiento de envío.Como se puede ver en la figura anterior, cuando el registro de desplazamiento de envío envía los datos, primero envía los datos al registro de desplazamiento de envío.Se envía el bit en el extremo derecho, lo que también muestra que la comunicación del puerto serial es de orden bajo primero.
Al recibir datos, los datos son recibidos por el pin RX en forma de un marco de datos, y los datos recibidos se envían al registro de desplazamiento receptor.Cuando el registro de desplazamiento receptor recibe un byte completo de datos, el byte completo de datos transmitirse al registro de datos de recepción. Cuando el registro de desplazamiento de recepción recibe datos, los datos se ingresan desde el extremo izquierdo en forma binaria. Cada vez que se recibe un bit, los datos se mueven un bit hacia la derecha, y el orden de bits binario original se restaurará al final. Es por eso que la comunicación del puerto serie es un bit bajo primero, pero la razón por la cual los datos no cambian cuando se reciben.

Funciones básicas de USART

Hay muchas funciones periféricas como USART proporcionadas por la biblioteca de firmware STM32, que pueden clasificarse y entenderse simplemente una vez. Las funciones relacionadas comúnmente utilizadas de USART son las siguientes:

void USART_DeInit(USART_TypeDef* USARTx);//USART初始化:根据USART初始化结构参数USART外设
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);//USART解除初始化//
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);//使用默认值填充USART初始化结构体成员
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);//允许或禁止USART外设
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);//返回USART外设最新接收的数据
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);//通过USART外设发送当个数据
void USART_SendBreak(USART_TypeDef* USARTx);//发送终止字符
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);//设置USART的某个中断请求是允许或禁止
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);//获取USART中断状态
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);//清除USART某个挂起中断标志
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);//获取标志状态:检测某个USART事件是否置位
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);//挂起标志清除:清除某个USART事件挂起标志

Supongo que te gusta

Origin blog.csdn.net/Tao_9/article/details/130546602
Recomendado
Clasificación