TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: IngRandall en 07 de Enero de 2017, 01:18:16

Título: Baud rate mayor a 115200 en PIC32
Publicado por: IngRandall en 07 de Enero de 2017, 01:18:16
Hola amigos del foro, quisiera saber si es posible tener una velocidad mayor a la de 115200 por el uart de un PIC32, gracias.
Título: Re:Baud rate mayor a 115200 en PIC32
Publicado por: KILLERJC en 07 de Enero de 2017, 07:54:03
La respuesta es: SI

Te lo dice el mismo PDF del modulo UART en sus tablas ( O usando la formula ). LLegando a un maximo de 2.5Mbaudios ( Cargando 0 ) con 40Mhz de clk de perifericos, Y sin poner BGRH a 1. Si usas BGRH en 1 llegarias a 10Mbaudios. Las entradas cambian cada 10ns aproximadamente. Lo cual para 10Mhz es suficiente que se estaria enfrentando es suficiente.
Título: Re:Baud rate mayor a 115200 en PIC32
Publicado por: IngRandall en 08 de Enero de 2017, 12:18:33
A ok... Ya vi pero toca aplicar ese codigo, sabes de algun programa como el hyperterminal que llegue a esa velocidad para probar
Título: Re:Baud rate mayor a 115200 en PIC32
Publicado por: KILLERJC en 08 de Enero de 2017, 13:22:36
Siempre use Putty y ahi te permite escribir la velocidad, y ademas deberias tener un puerto serie dedicado y no utilizar un USB-TTL ya que sino estarias enfrentandote a los tiempos de USB y no lograrias tener el baudrate deseado.
Título: Re:Baud rate mayor a 115200 en PIC32
Publicado por: IngRandall en 16 de Enero de 2017, 15:10:37
Bueno, con el código que dejo a continuación pude llegar a los 460800bps.

Código: [Seleccionar]
    UARTConfigure(UART2, UART_ENABLE_PINS_TX_RX_ONLY);
    UARTSetFifoMode(UART2, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY);
    UARTSetLineControl(UART2, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);
   
    U2MODEbits.BRGH=0;
   
    UARTSetDataRate(UART2, GetPeripheralClock2(), DESIRED_BAUDRATE);
    UARTEnable(UART2, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));

// Configure UART2 RX Interrupt
    INTEnable(INT_SOURCE_UART_RX(UART2), INT_ENABLED);
    INTSetVectorPriority(INT_VECTOR_UART(UART2), INT_PRIORITY_LEVEL_4);
    INTSetVectorSubPriority(INT_VECTOR_UART(UART2), INT_SUB_PRIORITY_LEVEL_0);
   
    U2MODEbits.SIDL=0;

DESIRED_BAUDRATE es un unsigned long donde pongo el valor de baud rate.

#define GetPeripheralClock2()   (GetSystemClock()/1)

#define GetSystemClock()      (80000000ul)   

Gracias por su ayuda.