En el microcontrolador PIC UART, la velocidad de transmisión se estableció en 38400 (sin paridad, 8 bits de datos),
*************UART 1 configuration*********
IFS0bits.U1RXIF = 0;
IFS0bits.U1TXIF = 0;
IEC0bits.U1RXIE = 1;
IEC0bits.U1TXIE = 0;
U1MODEvalue = 0b1000000000001000;
U1STAvalue = 0b0000010000000000;
U1BRG = 103;
U1MODE = U1MODEvalue;
U1STA = U1STAvalue;
El dispositivo conectado a uC funciona bien; Tienen una comunicación sana. Pero estaba midiendo el tiempo en baudios de mis datos, y observé que el bit de inicio y el bit de datos nos leyeron 26, lo cual está bien según 1000000 / Baudrate, pero el bit de parada es solo de 20 us, eso me parece mal. También debe leer los 26us. Así que trato con diferentes baudios. Pero tenga el mismo problema (vea la tabla de abajo).
Velocidad de 4800Buad, tiempo de bit de parada = 160us (pero debería ser 208us)
Velocidad de 9600Buad, tiempo de bit de parada = 72us (pero debería ser 104us)
Velocidad de 38400Buad, tiempo de bit de parada = 20us (pero debería ser 26us)
115200Buad rate, Stop bit time = 7.2us (pero debería ser 8.8us)
Le pregunté al equipo de soporte, y dicen que su valor BRGH está establecido en 1, intente cambiarlo a 0. Así que cambié BRGH = 0 y este problema se resolvió.
Con BRGH = 0, se eliminó el error de bit de parada y el bit de parada mide 26uS. Todavía necesitamos probar esto con otras tasas de baudios también.
Q1) ¿Por qué BRGH hace la diferencia solo en el tiempo en baudios del bit de parada? Estamos utilizando cristal de 8 MHz.
Q2) La hoja de datos dice BRGH = 1 para habilitación de alta velocidad, ¿qué significa aquí por alta velocidad? ¿Es la velocidad en baudios? Si es así, ¿qué velocidad en baudios se considera alta?
Q4) Cuándo usar BRGH = 0 o cuándo usar BRGH = 1, según la prueba se observó un error de baudios de parada en cada velocidad de transmisión según la tabla de resultados de la prueba anterior.
Enlace de uC