STM32 comunicación serie con la diferencia USART_FLAG_TC USART_FLAG_TXE (tomado de la red)

STM32 serie entender el primer sencillo proceso de envío de datos, como se muestra a continuación.

Enviar: software para datos de escritura USARTx-> DR en el interior, el hardware automáticamente USARTx-> DR datos paralelos que se transfiere a la "Enviar un registro denominado", a continuación, los datos del hardware transmitirá automáticamente por una cadena pin registro TX línea de enviado. Recibir: los datos sobre el primer bit de datos en un "registro de desplazamiento recibir", que, después de recibir un byte completo, el hardware de forma automática la transferencia paralela "recibir registro de desplazamiento" a los datos dentro del RX USARTx -> DR interior.

while ((USART1-> SR & USART_FLAG_TC )!); frase está esperando datos del completo "registro de desplazamiento de transmisión" de transmisión a cabo, mientras que ((USART1-> SR & USART_FLAG_TXE)!); frase está a la espera de los datos de USARTx-> DR procede a "cambio de transmisión registro" en. Después de escribir el método de canales, no necesita esperar a que los datos transmitidos por completo, sólo se USARTx-> DR cuales los datos han sido transferidos de distancia, la escritura se puede realizar inmediatamente la operación USARTx-> DR de nuevo, esto no se va a guardar una gran cantidad de tiempo? En cuanto a ilegible, necesita otro código integral a analizar.

Por ejemplo: STM32 datos UART de transmisión, consulta USART_FLAG_TC normal, pero utilizando USART_FLAG_TXE ser ilegible.

En función de envío de un solo byte puedo trabajar con la siguiente redacción
USART1-> RD = CH y 0xFF;
el tiempo (! (USART1-> el SR & USART_FLAG_TC));
sin embargo, si la segunda frase escrita
Mientras que ((USART1-! > SR & USART_FLAG_TXE));
será ilegible de salida cuando se llama a esta función (por lo general el primer carácter es correcto).

Análisis del problema: el transceptor conflicto

1, y recibe los conflictos de transmisión, esta situación puede ser: el contenido "registro de desplazamiento de transmisión" se está transmitiendo a la TX y USARTx-> DR también se espera de ser transmitidos, los datos recibidos durante este tiempo, un nuevo dato los datos recibidos también necesitan ser almacenados en USARTx-> DR en el interior, que puede causar errores impredecibles.

2, en el último byte que envíe, asumir que después de haber terminado de enviar el último byte del puerto serie apagar o desactivar la función de envío, etc., error o ilegible que se producen debido a que:

En el tiempo ((USART1-> SR & USART_FLAG_TXE)!); Representatividad, después de datos se han transferido a la "transmisión del registro de desplazamiento" en este caso a transmitir es el último byte, entonces se piensa que los datos se han enviado por completo, pero la real en este punto, los datos no han enviado por completo el verdadero sentido, pero también tienen que esperar a que los datos "registro de desplazamiento de transmisión" se envía a cabo se considera enviados por completo, sino que en este momento se cerró el puerto serie, y finalmente enviar este byte es un fracaso, se produce o ilegible un error.

 

Supongo que te gusta

Origin www.cnblogs.com/yilangUAV/p/12667053.html
Recomendado
Clasificación