4 votos

UART está distorsionado cuando se ejecuta a más de 9600 bps

Me estoy conectando 2 MSP430F5529basado en tablas (que se ejecuta en 1 MHz) mediante UART y MAX3232 (MSP430F5529 -> MAX3232 -> cable, un par de cm de largo será mayor en nuestra aplicación final -> MAX3232 -> MSP430F5529).

Esto funciona siempre y cuando la tasa de bits de la UART es en virtud de 9600 bps. Si este es elevado, puedo comenzar a recibir muchos errores (normalmente el MSB es volteado).

Si puedo quitar el MAX3232 y conectar las tablas directamente, el problema desaparece. No sucede si me loopback, demasiado.

Estoy ejecutando el MAX3232 de 3 V, que la hoja de datos dice que es suficiente:

Transmisor de salidas se reunirá EIA/TIA-562 niveles de ±3.7 V con voltajes tan bajos como los de 2.7 V.

¿Qué estoy haciendo mal?

Mi código en el TX lado es:

void UART_Initialize() {

    UCA1CTL1 |= UCSWRST;
    UCA1CTL0 = UCMODE_0; // UART
    UCA1CTL0 &= ~UC7BIT ; // 8 bits, no parity, 1 stop bit
    UCA1CTL1 |= UCSSEL_2; // Source 1 MHz


    UCA1BR0 = 104; // 104 ~= 9600 bps 
    UCA1BR1 = 0;  

    UCA1MCTL |= UCBRS_0 + UCBRF_0; // Modulation
    P4SEL |= BIT4 + BIT5;
    UCA1CTL1 &= ~UCSWRST;
    UCA1IE |= UCRXIE;
}


void UART_send_data(unsigned char character) {
    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF = character;
}

unsigned char UART_get_char() {
    while (!(UCA1IFG & UCRXIFG));
    return UCA1RXBUF;
}

void UART_shutdown() {
    UCA1IE &= ~(UCRXIE|UCTXIE);
    UCA1CTL1 = UCSWRST;
}


int main() {
    unsigned char received_data;

    P4OUT = 0x00;
    // Disables the watchdog
    WDTCTL = WDTPW + WDTHOLD;

    // CPU clock to 1 MHz

    UCSCTL0 = 0x00;
    UCSCTL1 = DCORSEL_3;  
    UCSCTL2 = FLLN5_L;

    __enable_interrupt();
    UART_Initialize();

    while(1) UART_send_data(0x55);

}

En la RX lateral el código es similar, excepto para main() (lo que recibe el valor y la compara a 0x55).

1voto

jason Puntos 147

Definitivamente suena como un problema de tiempo. Creo que su reloj está funcionando demasiado rápido y en lugar de muestrear el bit 7, el siguiente bit de parada (ALTO) se desplaza al registro de desplazamiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X