[Reimpreso] Cómo usar el logotipo TXE y TC al enviar datos desde USART de STM32

Hay 2 registros en el extremo de envío de USART, uno es el registro USART_DR que el programa puede ver, y el otro es el registro de desplazamiento que el programa no puede ver. Hay dos indicadores correspondientes a la transmisión de datos USART, y uno es TXE = el registro de datos de transmisión está vacío, El otro es TC = fin de la transmisión.

Cuando los datos en USART_DR se transfieren al registro de desplazamiento, se establece TXE. En este momento, el registro de desplazamiento comienza a transmitir datos a la línea de señal TX poco a poco, pero debido a que TDR se ha quedado vacío, el programa puede enviar el siguiente byte a enviar (operación USART_DR) se escribe en TDR sin esperar a que finalice la transmisión de todos los bits en el registro de desplazamiento. Cuando se transmiten todos los bits (después de que se envía el bit de parada), el hardware establecerá el indicador TC.

  Por otro lado, cuando el USART se acaba de inicializar y no se han enviado datos, también habrá un indicador TXE porque el registro de datos de transmisión está vacío. El significado de TXEIE y TCIE es muy simple: TXEIE permite que se generen interrupciones cuando el indicador TXE es '1', mientras que TCIE permite que se generen interrupciones cuando el indicador TC es '1'.

  En cuanto a cuándo usar qué logotipo, debe decidir según sus necesidades. Pero creo que TXE permite que los programas tengan más tiempo para completar el registro TDR para garantizar un flujo de datos ininterrumpido. TC puede informar al programa el momento exacto en que finaliza la transmisión, lo que es útil para que el programa controle la sincronización del flujo de datos externos.

 

TXE - registro de escritura DR borrado

RXNE - Lea el registro DR para borrar, también se puede borrar manualmente por software

TC: el registro de lectura / escritura DR se borra o el software puede borrarlo manualmente

 

Déjame hablar sobre TC primero. Esa es la transmisión completa. La interrupción se ingresa después de enviar un byte, que se denomina "interrupción después de enviar". De la misma manera que el método TI original de 8051, las interrupciones se envían después del envío. Debe enviar un byte en la función de envío para activar la interrupción. La función de envío es la siguiente

/ *******
función: modo de interrupción para enviar una cadena. Utilice el método de juzgar TC. Eso es para juzgar el bit de interrupción después de la transmisión.
Entrada: la primera dirección de la
salida de cadena : no
****** /
nulo USART_SendDataString (u8 * pData)
{
    pDataByte = pData;
 
    USART_ClearFlag (USART1, USART_FLAG_TC); // Borre la bandera de finalización de la transmisión, de lo contrario los datos del primer byte pueden perderse.
    
    Proporcionados por los internautas. USART_SendData (USART1, * (pDataByte ); // Debe ser ++, de lo contrario, el primer carácter t se enviará dos veces
}


La función del controlador de interrupción es la siguiente
/ ********
* Nombre de la función: USART1_IRQHandler
* Descripción: Esta función maneja la solicitud de interrupción global de USART1.
* Entrada: Ninguna
* Salida: Ninguna
* Retorno: Ninguno
********* /
void USART1_IRQHandler (void)
{
    if (USART_GetITStatus (USART1, USART_IT_TC) == SET)
    {
        if (* pDataByte == '\ 0') // TC necesita leer SR + escribir DR para borrar 0, cuando se envía al final, vaya a '\ 0 'Use un if para desactivar
            USART_ClearFlag (USART1, USART_FLAG_TC); // De lo contrario, TC siempre está configurado, TCIE también está abierto, lo que provocará una interrupción continua.             Elimínelo, no necesita desactivar TCIE
        más
USART_SendData (USART1, * pDataByte ++);
    }

}

donde u8 * pDataByte; es una variable de puntero externo

en el controlador de interrupciones. Después de enviar la cadena, no es necesario cerrar la interrupción TC para habilitar TCIE, solo necesita borrar el bit de bandera TC; esto se puede evitar TC == SET causó interrupción de entrada repetida.

anular USART_Config ()
{
 ........................................

 USART_ITConfig (USART1, USART_IT_TC, ENABLE); // Tramsimssion Complete, se genera la interrupción. La interrupción TC debe colocarse aquí, de lo contrario el primer byte aún se perderá

 USART_Cmd (USART1, ENABLE); // Habilitar USART1
}

.................................................. ...................

Hablemos de juzgar a TXE. Es decir, Tx DR Empty, el registro de transmisión está vacío. Cuando TXEIE está habilitado, se generará una interrupción siempre que Tx DR esté vacío. Por lo tanto, debe apagarse después de enviar la cadena, de lo contrario, provocará la interrupción repetida de la entrada. Esto también es diferente de TC.

La función de envío es la siguiente:
/ *******
Función: enviar cadena en modo de interrupción. Usar el método de juzgar TC. Es decir, juzgar el bit de interrupción después del envío.
Entrada: la primera dirección de la
salida de cadena : no
****** /
void USART_SendDataString (u8 * pData)
{
    pDataByte = pData;
    USART_ITConfig (USART1, USART_IT_TXE, ENABLE); // Siempre que el registro de envío esté vacío, siempre habrá una interrupción, por lo que si no envía datos, desactive la interrupción de envío, solo Solo se abre cuando comienza el envío.
    
} Las

funciones del controlador de interrupciones son las siguientes:

/ ********
* Nombre de la función: USART1_IRQHandler
* Descripción: Esta función maneja la solicitud de interrupción global de USART1.
* Entrada: Ninguna
* Salida: Ninguna
* Retorno: Ninguno
******* * /
void USART1_IRQHandler (void)
{
    if (USART_GetITStatus (USART1, USART_IT_TXE) == SET)
    {
        if (* pDataByte == '\ 0') // Los bytes que se enviarán al final son NULL
            USART_ITConfig (USART1, USART_IT_TXE, DISABLE); // Porque se envía registro de interrupción vacío, por lo que la cadena de acabado debe estar apagado, o el tiempo vacío, se romperá en
        el otro
            USART_SendData (el USART1, pDataByte * ++);
    }

}

función de inicialización del puerto serie no se podía abrir TXE se interrumpe (en Abrir en la función de envío)

Transferencia desde: cómo utilizar los indicadores TXE y TC cuando el USART de STM32 envía datos

91 artículos originales publicados · 17 elogiados · 50,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_23327993/article/details/105494939
Recomendado
Clasificación